北京总部

为什么要用Spring(含三大框架简介)

为什么要用Spring(含三大框架简介)

2016-11-02

 Spring作为三大框架之一,一直困惑她有什么用?为什么要使用Spring呢?(大部分来自网上,引用出处太多,恕不一一标明。)。        SSH在J2EE项目中表示了3种框架,即 Spring + Struts +Hibernate。 Struts对Model,View和Controller都提供了对应的组件。Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,可以应用在任何使用JDBC的场合,可以在Servlet/JSP的Web应用中使用,也可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。        Struts2原理就是用拦截器,使得你客户端发送的请求都被拦截下来后处理。拦截器用到了反射机制。Struts2主要的功能是控制转发,在于Action的处理,和struts.xml配置。        Spring其实包含了很多的知识,用到的有IOC,AOP等,其实就是一个管理框架的容器,你不用再考虑你new对象了,它会帮你做,降低了层与层之间的耦合度。Spring里面有很多的思想,IOC就是控制反转,注入。AOP是面向切面的,有点像拦截器。       Hibernate是持久层框架,我们平时用JDBC操作数据库要写SQL语句,有时候字段一多会很麻烦,于是用hibernate就很方便了,你只要熟练掌握里面的映射关系,就不用写sql语句了,它会帮你写,API调用一下很方便的。 Struts 1.Struts框架结构       Struts对Model,View和Controller都提供了对应的组件。       在右图中,ActionServlet,这个类是Struts的核心控制器,负责拦截来自用户的请求。       Action,这个类通常由用户提供,该控制器负责接收来自ActionServlet的请求,并根据该请求调用模型的业务逻辑方法处理请求,并将处理结果返回给JSP页面显示。        2.Model部分        由ActionForm和JavaBean组成,其中ActionForm用于封装用户的请求参数,封装成ActionForm对象,该对象被ActionServlet转发给Action,Action根据ActionForm里面的请求参数处理用户的请求。        JavaBean则封装了底层的业务逻辑,包括数据库访问等。        3.View部分        该部分采用JSP实现。        Struts提供了丰富的标签库,通过标签库可以减少脚本的使用,自定义的标签库可以实现与Model的有效交互,并增加了现实功能。对应上图的JSP部分。        4.Controller组件        Controller组件有两个部分组成——系统核心控制器,业务逻辑控制器。        系统核心控制器,对应上图的ActionServlet。该控制器由Struts框架提供,继承HttpServlet类,因此可以配置成标注的Servlet。该控制器负责拦截所有的HTTP请求,然后根据用户请求决定是否要转给业务逻辑控制器。        业务逻辑控制器,负责处理用户请求,本身不具备处理能力,而是调用Model来完成处理。对应Action部分。        Spring 1.简介        ◆目的:解决企业应用开发的复杂性        ◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能        ◆范围:任何Java应用        简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。        2.轻量        从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。        此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。        3.控制反转        Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。        4.面向切面        Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。        应用对象只实现它们应该做的——完成业务逻辑——仅此而已。        它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。        5.容器        Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。        然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。        6.框架        Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。        所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。        Hibernate 1.简介        Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。        Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这五个核心接口分别加以介绍。        2.Session接口        Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSesion对象称为用户session。        3.SessionFactory接口        SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。        4.Configuration接口        Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。        5.Transaction接口        Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。   6.Query和Criteria接口       Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。   作者: weibo_尉广明大将军_0 链接:http://www.imooc.com/article/7283 来源:慕课网

更多>
10个jQuery小技巧

10个jQuery小技巧

2016-11-02

1. 禁止右键点击 $(document).ready(function(){     $(document).bind("contextmenu",function(e){         return false;     }); }); 2. 隐藏搜索文本框文字 $(document).ready(function() { $("input.text1").val("Enter your search text here");    textFill($('input.text1')); });     function textFill(input){ //input focus text function      var originalvalue = input.val();      input.focus( function(){           if( $.trim(input.val()) == originalvalue ){ input.val(''); }      });      input.blur( function(){           if( $.trim(input.val()) == '' ){ input.val(originalvalue); }      }); } 3. 在新窗口中打开链接 $(document).ready(function() {    //Example 1: Every link will open in a new window    $('a[href^="http://"]').attr("target", "_blank");    //Example 2: Links with the rel="external" attribute will only open in a new window    $('a[@rel$='external']').click(function(){       this.target = "_blank";    }); }); // how to use open link 4. 检测浏览器 $(document).ready(function() { // Target Firefox 2 and above if ($.browser.mozilla && $.browser.version >= "1.8" ){     // do something } // Target Safari if( $.browser.safari ){     // do something } // Target Chrome if( $.browser.chrome){     // do something } // Target Camino if( $.browser.camino){     // do something } // Target Opera if( $.browser.opera){     // do something } // Target IE6 and below if ($.browser.msie && $.browser.version <= 6 ){     // do something } // Target anything above IE6 if ($.browser.msie && $.browser.version > 6){     // do something } }); 5. 预加载图片 $(document).ready(function() { jQuery.preloadImages = function() {   for(var i = 0; i

更多>
知道这10个正则表达式 能让你少写100

知道这10个正则表达式 能让你少写100

2016-11-02

       正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑。熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升。下面整理的是,在前端开发中经常使用到的10个正则表达式。        正则表达式经常被用于字段或任意字符串的校验,如下面这段校验基本日期格式的 JavaScript代码: var reg = /^(d{1,4})(-|/)(d{1,2})2(d{1,2})$/; var r = fieldValue.match(reg); if(r==null){ alert('Date format error!') } 1.校验密码强度 密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。        ^(?=.d)(?=.[a-z])(?=.*[A-Z]).{8,10}$   2.校验中文字符串仅能是中文       ^[u4e00-u9fa5]{0,}$   3.由数字、26个英文字母或下划线组成的字符串 ^w+$   4.校验E-Mail 地址 同密码一样,下面是E-mail地址合规性的正则检查语句。     [w!#$%&'+/=?^_`{|}~-]+(?:.[w!#$%&'+/=?^_`{|}~-]+)@(?:[w](?:[w-][w])?.)+w?   5. 校验身份证号码 15位:^[1-9]d{7}((0d)|(1[0-2]))(([0|1|2]d)|3[0-1])d{3}$ 18位:^[1-9]d{5}[1-9]d{3}((0d)|(1[0-2]))(([0|1|2]d)|3[0-1])d{3}([0-9]|X)$   6.校验日期“yyyy-mm-dd“ 格式的日期校验,已考虑平闰年。   ^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])| (?:0[48]|[2468][048]|[13579][26])00)-02-29)$ 7.校验金额,金额校验,精确到2位小数。       ^[0-9]+(.[0-9]{2})?$   8.校验手机号 下面是国内 13、15、18开头的手机号正则表达式。(可根据目前国内收集号扩展前两位开头号码)        ^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])d{8}$ 9.判断IE的版本        IE目前还没被完全取代,很多页面还是需要做版本兼容,下面是IE版本检查的表达式。    ^.MSIE 5-8?(?!.Trident/[5-9].0).*$ 10.校验IP地址 IP4 正则语句:         (?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) IP6 正则语句: (([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))

更多>
配置你的虚拟服务器

配置你的虚拟服务器

2016-10-27

前言 1. 本篇旨在理清,路由器端口映射的过程,简单来讲就是让外网也能访问你的本地资源。 2. 所以涉及到本地服务的搭建自行解决 原理:        通常情况下,路由器都有防火墙功能,互联网用户只能访问到你的路由器WAN口(接ADSL的电话线口或路由宽带外网口),而访问不到内部服务器。要想让互联网用户访问到你建的服务器,就要在路由器上做一个转发设置,也就是端口映射设置,让互联网用户发送的请求到达路由器后,再转发到你建立的服务器或WEB站点。这就是端口映射。由于各个路由器厂商所取功能名称不一样,有的叫虚拟服务器,有的叫NAT设置(BitComet中常见问题)端口映射。

更多>
移动端开发的一些技巧

移动端开发的一些技巧

2016-10-27

一、样式按组件或板块分文件写再合成 ①设置各种变量       采用scss或者less来写css代码有很多好处。这里就不详细说。       我们拿到设计图的第一步,就是要分析各个页面之间有哪些模块、哪些样式、哪些颜色是一样的。一般情况下,为了各个页面的风格统一,各个页面上的主颜色应该都是一致的,而且好些页面都会用到一些相同的组件,例如slider。所以,我们首先可以定义一个常量文件,里面就专门存放颜色、高度、宽度等变量。定义一个公共样式文件,例如写一些各个页面都有可能用到的清楚浮动等样式。       scss比less更好用一点,用scss定义的话,其中有一个方法是%定义法,就是定义了并不会被编译,而是实际上用到的时候才会被编译。例子图: ②按模块细分       按模块等细分之后,代码的可读性能够明显地提高,方便维护,而且引入页面的文件个数也减少了,还可以提高性能呢。不过,这里要注意,子模块的文件名要以“_”开始哦,这样就不会被编译,而是需要引用的时候再编译哦。例子如图: 二、页面适应性布局 适配移动端比较好的布局方式是百分比+rem布局。 百分比的优势在于,同一个百分比的真实尺寸会跟随屏幕大小变化。举个例子,像这种:       红色框那里,假设现在的要求是一行4个板块,适应任何屏幕。那么,用ul,li写html,然后布局的话,如果写定ul的宽度是100%,然后li的宽度是25%,再设置box-sizing:border-box的话。各种屏幕下,这四块都是平分并且不会出现横向滚动条的。不过要注意,这个时候的间距就不要用margin-left和margin-right来撑开,而是用padding来撑开。就是像这样比例明显,板块区分度高的情况适合用百分比来布局。 代码如下: ul{     width:100%;     margin-bottom:10px;} ul li{     width:25%;     box-sizing:border-box;}         rem的话,rem的取值是只。相对于根元素htm的font-size,即只需要设置根元素的font-size,其它元素使用rem单位设置成相应的百分比即可。你再用@media写一下不同尺寸下跟元素html的font-size的值即可。然后神奇的事情就发生了。当你改变尺寸时,字体。图片等,就会自动跟着适应了。用起来真的很爽! 一些常用的适应尺寸如下: @charset "utf-8"; @media only screen and (max-width: 315px){   html {     font-size: 50% !important;   }}@media only screen and (min-width: 316px){   html {     font-size: 62.5% !important;   }}@media only screen and (min-width: 640px){   html {     font-size: 125% !important;   }}@media only screen and (min-width: 750px){   html {     font-size: 150% !important;   }}@media only screen and (min-width: 1242px){   html {     font-size: 187.5% !important;   }}   三、常见的一些效果的做法 ①页面板块可横向滑动 一种就是我们经常见的,一些特卖活动、抢购活动的时候,需要出现横向滚动情况。效果图: 不要以为这种效果会涉及到什么touch事件,要写多复杂的js。其实只用css就可以很简单地实现了。原理就是利用overflow属性。设置其水平方向滚动,垂直方向hidden即可。 当然,还要配合一些其他的代码。 具体css代码如下: ul.pinxiang-list{         padding:10px;         padding-top:0;         padding-bottom:20px;         width:100%;         box-sizing:border-box;         overflow-x:scroll;         overflow-y:hidden;         white-space: nowrap;         float:left;} ul.pinxiang-list li{         position:relative;         display:inline-block;         margin-right:5px;  }   这里最主要的就是要设置ul的宽度是100%,并且向左浮动。li要设置为display:inline-block. 还有一个就是,如果你用谷歌调试的时候,会发现,效果是这样的:        对,就是会出现一个明显的滚动条。但是如果你用真机,也就是用移动设备看的时候,你会发现其实滚动条是不会出现的。所以有时候做移动的东西,还是需要真机测试一下比较靠谱啊。       另外要注意一个问题,由于li被display:inline-block.那么就有了inline的属性,默认。此元素会被显示为内联元素,元素前后没有换行符。并且,该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐。什么意思呢,简单来说就是这些li的对齐基线的默认方式是以最后一行的文字对齐的。看图:        由图中可以明显看出,最后一个li由于没有图片撑起来,而它们的默认方式又是以最后一行文字为基准的,所以最后一个li就“掉”了下来。这个时候,我们就需要设置一下vertical-align这个属性的值了。设置为:vertical-align:middle。具体用法,可以看这里。这样设置了的话,就没有问题了。

更多>

推荐阅读

更多

友情链接:

中软卓越java培训地址:北京市海淀区科学院南路2号融科资讯中心C座北楼12层 联系电话:400-666-3775 邮箱账号:etc-marketing@chinasofti.com

©2008-2016 北京中软国际教育科技股份有限公司 京ICP备14058756号-2