您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > Struts2+Spring+Hibernate框架技术
第1章初识S2SH轻量级JavaEE技术以SSH为代表,即S(Struts)+S(Spring)+H(Hibernate)。2007年Struts的下一代产品Struts2诞生,Struts2是在Struts和WebWork的技术基础上进行的合并。S2SH指的是Struts2+Spring+Hibernate。1.1Struts2框架简介Apache的Struts2是一个优雅的、用于创建企业级JavaWeb应用程序的可扩展的框架。该框架旨在简化整个开发周期,从建设,部署及维护所用的时间。对于Struts1框架而言,由于与JSP/Servlet耦合非常紧密,因而导致了一些严重的问题。首先,Struts1支持的表现层技术单一。由于Struts1出现的年代比较早,那个时候还没有FreeMarker、Velocity等技术,因此它不可能与这些视图层的模板技术进行整合。其次,Struts1与ServletAPI的严重耦合,使应用难于测试。最后,Struts1代码严重依赖于Struts1API,属于侵入性框架。从目前的技术层面上看,出现了许多与Struts1竞争的视图层框架,例如,JSF、Tapestry和SpringMVC等。这些框架由于出现的年代比较近,应用了最新的设计理念,同时也从Struts1中吸取了经验,克服了很多不足。这些框架的出现也促进了Struts的发展。目前,Struts已经分化成了两个框架:第一个是在传统的Struts1的基础上,融合了另外一个优秀的Web框架——WebWork的Struts2。Struts2虽然是在Struts1的基础上发展起来的,但是实质上是以WebWork为核心的。Struts2为传统的Struts1注入了WebWork的先进设计理念,统一了Struts1和WebWork两个框架。1.1.1Struts2体系结构Struts2体系与Struts1体系的差别非常大,因为Struts2使用了WebWork的设计核心,而不是Struts1的设计核心。Struts2的体系结构如图1-1所示。Struts2中大量使用拦截器来处理用户的请求,从而允许用户的业务逻辑控制器与ServletAPI分离。Struts2框架的处理流程如下。浏览器发送一个请求。核心控制器FilterDispatcher根据请求决定调用合适的Action。WebWork的拦截器链自动对请求应用通用功能,如验证等。回调Action的execute方法,该execute方法根据请求的参数来执行一定的操作。Action的execute方法的处理结果信息将被输出到浏览器中,支持多种形式的视图。4图1-1Struts2体系结构1.1.2Struts2与Struts1经过6年多的发展,Struts1已经成为了一个高度成熟的框架,不管是稳定性还是可靠性都得到了广泛的证明。其市场占有率超过20%,拥有丰富的开发人群,几乎已经成为了事实上的工业标准。但是随着时间的流逝,技术的进步,Struts1的局限性也越来越多地暴露出来,并且制约了其继续发展。Struts2对Struts1进行了巨大的改进,主要表现在如下几个方面。在Action的实现方面:Struts1要求必须统一扩展自Action类,而Struts2中可以是一个普通的POJO。线程模型方面:Struts1的Action工作在单例模式,一个Action的实例处理所有的请求。Struts2的Action是一个请求对应一个实例。没有线程安全方面的问题。Servlet依赖方面:Struts1的Action依赖于ServletAPI,比如Action的execute方法的参数就包括request和response对象,这使程序难于测试。Struts2中的Action不再依赖于ServletAPI,有利于测试,并且实现TDD。封装请求参数:Struts1中强制使用ActionForm对象封装请求的参数。Struts2可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性。表达式语言方面:Struts1中整合了EL,但是EL对集合和索引的支持不强,Struts2整合了OGNL(ObjectGraphNavigationLanguage)。绑定值到视图技术:Struts1使用标准的JSP,Struts2使用ValueStack技术。类型转换:Struts1中的ActionForm基本使用String类型的属性。Struts2中使用OGNL进行转换,可以更方便地使用。数据校验:Struts1中支持覆盖validate方法或者使用Validator框架。Struts2支持重写validate方法或者使用XWork的验证框架。Action执行控制的对比:Struts1支持每一个模块对应一个请求处理,但是模块中的所有Action必须共享相同的生命周期。Struts2支持通过拦截器堆栈为每一个Action创建不同的生命周期。1.1.3Struts2与WebWorkStruts和Webwork是同服务于Web的一种MVC框架,从某种程度上看,Struts2是从5第1章初识S2SHWebWork2上升级得到的。甚至Apache的官方文档也讲,WebWork2到Struts2是平滑的过渡。甚至也可以说Struts2就是WebWork2.3而已。在很多方面,Struts2仅仅是改变了WebWork下的名称,因此,如果开发者具有WebWork的开发经验,将可以更加迅速地进入Struts2的开发领域。除此之外,Struts2也删除了WebWork中的少量特性,如下所示。AroundInterceptor:Struts2不再支持WebWork中的AroundInterceptor。如果应用程序中需要使用AroundInterceptor,则应该自己手动导入WebWork中的AroundInterceptor类。富文本编辑器标签:Struts2不再支持WebWork的富文本编辑器,如果应用中需要使用富文本编辑器,则应该使用Dojo的富文本编辑器。IoC容器支持:Struts2不再支持内建的IoC容器,而改为全面支持Spring的IoC容器,以Spring的IoC容器作为默认的Object工厂。1.1.4Struts2下载读者若要获取Struts2最新的软件包以及相关的资源文件,可以访问其官方网站。官网网址是。下载页面如图1-2所示。图1-2Struts2官网下载页面读者单击中间并列图标中的第一个,就可以下载到最新的Struts2文件。当然官网也提供了一些非常不错的教程,网址是,有时间也可以看看。教程页面如图1-3所示。6图1-3Struts2教程首页1.2Spring框架简介传统J2EE应用的开发效率低,应用服务器厂商对各种技术的支持并没有真正统一,导致J2EE的应用没有真正实现WriteOnce及RunAnywhere的承诺。Spring作为开源的中间件,独立于各种应用服务器,甚至无需应用服务器的支持,也能提供应用服务器的功能,如声明式事务等。Spring致力于J2EE应用的各层解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,并贯穿于表现层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而是与它们无缝地整合。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB来完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。1.2.1IOC和AOP控制反转模式(也称作依赖性注入)的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器(在Spring框架中是IOC容器)负责将这些联系在一起。在典型的IOC场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起,决定什么时间调用方法。面向方面的编程,即AOP,是一种编程技术,它允许程序员对横切关注点或横切典型的职责分界线的行为(例如,日志和事务管理)进行模块化。AOP的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。AOP和IOC是补充性的技术,它们都运用模块化方式解决企业应用程序开发中的复杂问7第1章初识S2SH题。在典型的面向对象开发方式中,可能要将日志记录语句放在所有方法和Java类中才能实现日志功能。在AOP方式中,可以反过来将日志服务模块化,并以声明的方式将它们应用到需要日志的组件上。当然,优势就是Java类不需要知道日志服务的存在,也不需要考虑相关的代码。所以,用SpringAOP编写的应用程序代码是松散耦合的。AOP的功能完全集成到了Spring事务管理、日志和其他各种特性的上下文中。1.2.2IOC容器Spring设计的核心是org.springframework.beans包,它的设计目标是与JavaBean组件一起使用。这个包通常不是由用户直接使用,而是由服务器将其用作其他多数功能的底层中介。下一个最高级抽象是BeanFactory接口,它是工厂设计模式的实现,允许通过名称创建和检索对象。BeanFactory也可以管理对象之间的关系。BeanFactory支持以下两个对象模型。单态模型:提供了具有特定名称的对象的共享实例,可以在查询时对其进行检索。Singleton是默认的也是最常用的对象模型。对于无状态服务对象很理想。原型模型:确保每次检索都会创建单独的对象。在每个用户都需要自己的对象时,原型模型最适合。Bean工厂的概念是Spring作为IOC容器的基础。IOC将处理事情的责任从应用程序代码转移到框架。1.2.3Spring下载读者若要下载Spring最新的相关资料,可以访问其官网,官网页面如图1-4所示。图1-4Spring官网页面81.3Hibernate框架简介目前在Java应用程序开发中,使用广泛的、开源的持久层框架是Hibernate和Ibatis。Hibernate和Ibatis都是ORM解决方案,不同的是两者各有侧重。Hibernate提供了Java对象到数据库表之间的直接映射,开发者无需直接涉及数据库操作的实现细节,实现了一站式的ORM解决方案。而Ibatis则采取了另一种方式,即提供Java对象到SQL(面向参数和结果集)的映射实现,实际的数据库操作需要通过手动编写SQL实现。Ibatis是又一个O/RMapping解决方案,和Hibernate相比,Ibatis最大的特点就是小巧,上手很快。如果你不需要太多复杂的功能,Ibatis是能满足你的要求又足够灵活的、最简单的解决方案。Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲地使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,又可以在Servlet/JSP的Web应用中使用。最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。Hibernate的体系结构如图1-5所示。图1-5Hibernate的体系结构1.3.1Hibernate的优点Hibernate的优点如下。Hibernate功能强大,数据库无关性好,O/R映射能力强,如果一个程序员精通Hibernate,而且对其进行了适当的封装,那么项目整个持久层代码对于他而言会相当简单,需要编写的代码会很少,开发速度也会很快。Hibernate体现了OO编程的思想,许多OO的特性
本文标题:Struts2+Spring+Hibernate框架技术
链接地址:https://www.777doc.com/doc-5946086 .html