Struts%2BSpring%2BHibernate整合教程.pdf

所需积分/C币:10 2015-04-09 22:14:57 649KB PDF
2
收藏 收藏
举报

是关于 Struts%2BSpring%2BHibernate整合教程的,简单易懂,看了能帮助你更快了解ssh。
1SSH整合理念 11框架 用java来建立一个很有价值的Web应用不是一个简单的任务。在架构这个应用时要考虑很多的因素 和问题。从更高的层次来看,开发人员面临着关于如何构建用户接口,何处驻留业务逻辑,以及如何 实现数据持久性这些问题。这3层都有各自的问题需要回答。而每一层又需要实现那些技术?应用如 何设计来进行松散耦合并能进行灵活变更?应用架构是否允许某一层变更而不影响到其它的层次? 应用应该如何处理容器一级的服务比如事务? 在为你的应用创建一个架构之前有许多问题需要澄清。幸运的是,有很多开发者都意识到这个问题, 并建立了很多框架来解决这些问题。一个良好的框架可以让开发人员减轾重新建立解决复杂问题方案 的负担和精力;它可以被扩展以进行内部的定制化;并且有强大的用户社区来支持它。框架通常能很 好的鲜决个问题。然而,你的应用是分层的,可能每个层都需要各自的框架。仅仅解决U问题 并不意味着你能够很好的将业务逻钭和持久性逻辑和UⅠ组件很好的耦合。例如,你不应该使具有 JDBC代码的业务逻辑放入控制器之中,这不是控制器应该提供的功能。一个UI控制器应该是轾星 化的组件,由它代表对UⅠ范围之夕的其它应用层的服务调用。良好的框架自然地形成代码分离的原 则。更为重要的是,框架减轻了开发人员从头枃建持久层代码的精力,从而集中精力来应用逻辑上, 这对客户端来说更为重要。 本文讨论了如何结合几个著名的框架来达到松散耦合,如何设计你的架构,以及如何达到各个层次的 致性设计。面临的挑战是,将框架整合起来,以使每一昃都向另外的层次以一种松散的方式来暴露 接凵,而不管底层功能使用的是什么技术。本文还讨论鍪合3种著名开源框架的一种策眳。对表现层, 我们使用Stts;业务层仅用 Spring;对于持久层我们仗用的是 Hibernate,你尽可以取代这里的某个 框架而使用你喜欢的框架已达到同样的效果。图1显示了框架被整合起来时,从最高层次看到的视图。 UI Layer Business Layer Persistence Layer aniceLocai Hibernate Struts-MVC Transactions D进 ta sourcer Struts Action Hibernate session Connection pool Action Form, JSP Management Query Language truts-config. xml BuSIness serice Support and other etc Classes Hibernate servces Domain Model Business objects 第3页 12应用层 许多设计良好的web应用,可以被按职责分为四层。这些层次是表现层、持久层、业务层、和领域 模型层。每一个层次都有其独特的职责,不能把各自的功能与其它层次相混合。每一个应用层都应该 和其它层隔离开来,但允许使用接口在层间进行通信。我们开始来看看每个层,并讨论一下它们各自 都应该提供什么和不应该提供什么 121表现层 个典型的web应用的末端是表现层。许多Java开发者都知道Stu提供了什么东西。然而,太 多时候,耦合代码比如业务逻辑被放进org. apache struts. Action中。所以,我们先总结一下 Struts之 类的框架应该提供什么。下面就是 Struts的职责所在: 管坦用户的请求和响应 提供个控制起来将调用委托到业务逻辑和其他上游处理 ·将来自于抛出例外的其他层的例外欠理到 Struts action中 组装可以在视图中表现的模型对象 执行UI校验 下面是一些经常可以使用 Struts进行编码但是不应该和表现层关联的事情: 直接和数据库交互,比如JDBC调用 与应用相关的业务逻辑和校验 事务管理 在表现层中引入这些类型的代码将导致类型耦合和维护负担。 122持久层 个典型Web应用的另一端是持久层。这也是应用屮最容易很快失控的地方。开发者通常低估了自 己构建自己的持久层框架的挑战。一个定制的,内部开发的持久层不仅需要大量的开发时间,并且通 常缺乏功能和难以管理。目前有许多解决这些问題的开源对象关系映射(ORM)框架。特別地, Hibernate框架就允许Java中的对象关系的持久性和查询服务 Hibernate对已经熟悉了SQL和 JDBC API的Java廾发者来或具有中度的学习曲线。 Hibernate的持久对象基」POO和Java群集 ( collections)。此外,使用 Hibernate不和你的IDE接口。下面列出了你需要在持久性框架中编写 的代码类型: 第4页 ·查询关系信息到对象中。 Hibernate是通过称为HQL的0O查询语言,或者使用夏有表现能 力的规则API,来完成这个L作的。除了使用对象而不是表,使用字段而不是列的方式,HQL 非常类似」SQL。也有些新的特定的HQL语言特征需要学习:但是,它们是很容易理解 和良好编写的。HQL是种用于査询对象的自然语言,而对象,只需要很少的学习曲线吧 存储、更新和删狳存储在数据库中的信息 高级的对象关系映射框架比如 Hibernate支持大部分主流SqL数据厍,它们支持父/子关系, 事务,继承和多态。 下面是应该在持久层避免的一些事情: 业务逻辑应该置于应用的更高层中。这里只允许数据访问方法 ·不应该使持久逻辑和表现逻辑耦合。避免表现组件如]SP或者基于seγet的类屮的逻辑直 接和数据访问进行通信。通过将持久性逻辑隔离在其自己的层屮,应用将具有更加灵活的修 改性而不影响到其他层的代码。例如, Hibernate可以仗用其他持久框架和API代替,而不 需要修改其它层中的代码。 123业务层 典型的Web应用的屮间组件一般是ψ务层和服务层ε从编程的角度来说, service layer绎常被忽略。 这种类型的代码散布于UI表现层和持久层并不是不多见。这些都不是正确的地方因为亡导致了紧密 耦合的应用和难以维护的代码。幸运的是,大多数框架都解决了这个问题。这个空间内最流行的两个 框架是 Spring和 PicoContainer。它们都被视为是具有非常小的足迹( footprint)并且决定如何将你 的对象整合在起的微容器( microcontainer)。这些框架都建立在种叫做依赖性注入( dependency injection)(也称控制反转( inversion of control:IOC))的简单概念之上。我们将关注 Spring中通 过针对命名配置参数的bean属性的 setter注入的使用。 Spring也允许一种更加高级的构造器注入 ( constructor injection)形式作为 setter injection的可选替代对象通过简单的ⅪML文件进行连接 该配置文件包含对各种对象的引用,比如事务管理处理器( transaction management handler),对象 工厂,包含业务逻辑的服务对象,以及数据访问对象(DAO)。 我们随后会用一些例子来澄清 Spring中使用这些改变的方式。 业务层应该负责下面的问题 处理应用的业务逻辑和业务校验 管坦事务 允许与其他层进行交互的接口 第5页 管理业务级对象之间的依赖性 加入了衣现和持久层之间的灵活性,以便它们不需要彼此进行直接通信 从表现层暴露上下文给业务层以获得业务服务 管里从业务层到表现层的实现 124领域模型层 最后,因为我们要解决实际的问题的web应用,我们需要一套在不同的层间移动的对象。领域模型 层包含的是表达实际业务对象的对象,比如 Order, OrderLinelten, Product等等。这一层允许能让 廾发者不冉构建和维护不必要的数据传输对象DTO来匹配其领域对象。例如, Hibernate允许你读 取薮据厍信息到一个领域对象的对象图中,以便你可以在离线的情况下将其表现在UI层中。这些对 象可以被更新并跨过表现层发送回去,然后进行数捃库更新。另外,你不再需要将对象转变成DTO 囚为它们在不同的层间移动时可能会丢失事务。这种模型允许Java开发者能够以OO风格的方式很 白然的处理对象,而不用编写额外的代码。 13整合一个简单的例子 到此,应该对各种层次和组件冇一个高层的理解了罢。可以开始一些实践了。再次说明。我们的例子 整合了 Struts, Spring,和 Hibernate框架。每个框架都包含大量的内容细节,我们不会多述。我们的 目的使用一个例子向你说明如何将它们察合在一起构建一个优雅的Web应用架构。实例将演示一个 请求是如何得到各层的服务的。此应用的用户可以将一个订单保存在数据库中并且察看数据中的已有 订单。进一步的增强允许将用户更新和删除现有订单。 首宄,我们将常见我们的领域对象,因为亡们是要和各层沟通的。这些对象将允许我们能够定义那些 对象需要持久化,那些业务逻辑需要提供,以及应该设计那些表现接凵。接下米,我们将仗用 Hibernate 来为领域对象配置持久层和定义对象关系映射。然后,我们将定义和配置我们的业务层。在完成这些 组件后,我们将讨论如何使用 Spring将这些层关联起来。最后,我们将提供个表现层,它知道如 何与业务服务层通信以及如何处理来自于其他层的例外。 2 Spring整合 Struts 31三个小寄门 ●接下来的每种整合技术(或者窍门)都有自己的优点和特点。我偏爱其中的一和,但 是我知道这三种都能够加深您对 Struts和 Spring的理解。在处理各种不同情况的时 候,这将给您提供一个广阔的选择范围。方法如下: 第6页 1.使用 Spring的 Action Support类整合 Structs 2.使用 Spring的 DelegatingRequestProcessor覆盖 Struts的 RequestProcessor 3.将 Struts action管理委托给 Spring框架 装载应用程序境 无论您使用哪种技术,都需要使用 Spring的 ContextLoader Plugin为 Struts的 Action Servlet装载 Spring应用程序环境。就像添加仼何其他插件一样,简单地冋您的 struts-confi!wml文件添加该插件,如下所示 <plug-in lassName=org. springframework. web. struts. ContextLoaderPlugIn"> <set-property property-contextConfiglocacion value"//WEB-INF/beans. xm1"/> </p⊥ug-1n> 32窍门1.使用 Spring的 Action Support 步骤 1. Action直接继承 Action Support 2.使用 Application Context ctx= getWebApplication Context(取得 Spring上卜文 3.取得相应Bean //1继水 ActionSupport public class Searchsubmit extends ActionSupport public ActionForward execute(ActionMapping mapping, ActionForm form Httpservletrequest request Httpservletresponse response throws IOException, ServletException f //2.使用App1ica Context ct tWebApo1 icationccntext();取得 nc上下文 pplicationcontext ct etebApplicationcontext()i /3.取得相应Bean Bookservice bookservice=(BcckService)ctx getBean("bookservice")i 优点 简单 ●缺点 第7页 1)耦合高 2)违反oC 3无法使用多方法的 Action 33寄门2.覆盖 RequestProcessor ●步骤 1. Action中,使用lOC获得服务,配置 struts- config. xm 个普通的 Action Action path="/searchSubmit type=ca excel. books. actions. Searchsubmit input="/searchEntry do validate=true name=searchFor"> <forward name-"success" path-"/WEB-INF/pages/detail. jsp"/> <forward name="failure" path=/WEB-INF/pages/search. jsp"/> </action> <!--利用了< contro11er>标记来用De1 egatingRequestprocessor覆盖默认的 Struts RequestProcessor <controller processorclass=org. springframework. web. struts DelegatingRequestProcessor/> 2. Spring配置文件中注册该动作: bean id="bookService't class=ca. nexcel books business. BookServiceimpl /> < bean name=l/searchSubmit class=ca excel. books, actions. Searchsubmit> <property name="bookService"> <ref bean="bcokService"/> </property> /bean> 3.写具有 Javabean属性的 Struts动作: 第8页 public class Search Submit extends Action 个 Service属性 private BookService bockservicei // gette public Bcokservice getBookService() i return bookservice; // setter public void setBookservice(Bookservicebookservice) f this bookservice bookservicei public ActionForward execute(ActionMapping mapping, ActionForm form, Httpservletrequest request Httpservletresponse response throws IOException, ServletException I /调用 bookservice,个需要new Bookbook e bOoks (. read(isbn. trim())i 34窍门3.将动作管理委托给 Spring 步骤: 1. Action中,使用oC获得服务,配置 struts-configxm: 个 Action注意其 t ype Spring代理类 action path="/searchsubmit type=org. springframework. web. struts. DelegatingActionProxy input="/searchEntry do" validate="true" name="searchFor"> <forward name="success" path="/WEB-INF/pages/detail.jsp"/> <forward name-"failure" patn-"/WEB-INF/pages/search. jsp"/> Spring配置文件中注册该动作: <hean id-"bookservice lass="ca excel. boo <s business. BcokserviceImp1"/> <oean name="/searchSubmit" class=ca. nexcel, books, actions. SearchSubmit <property name="bookservice> ref bean-bookservi K/pre </bean> 第9页 优点 1.动作委托解决方法是这三种方法中最好的 2.不使用 Spring api编写 Action 3.利用了OC装配 3.5拦截 Struts 25.1.前提: 将 Struts动作委托给 Spring框架可以将 Spring的AOP拦截器应用于 Struts动作。 25.2.使用拦截器的步骤: 创建拦截器。 2.注册拦截器。 3.声明在何处拦截代码 253.一个例子: 个简单的日志记录拦截器 //创建拦截器 public class LoggingInterceptor implements MethodBeforeAdvice t public void before (Method method, Chiect[] objects, Object. o) throws Throwable f System. out. println (logging befcre!)i 注册拦截器 第10页

...展开详情
试读 16P Struts%2BSpring%2BHibernate整合教程.pdf
立即下载
限时抽奖 低至0.43元/次
身份认证后 购VIP低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
上传资源赚钱or赚积分
最新推荐
Struts%2BSpring%2BHibernate整合教程.pdf 10积分/C币 立即下载
1/16
Struts%2BSpring%2BHibernate整合教程.pdf第1页
Struts%2BSpring%2BHibernate整合教程.pdf第2页
Struts%2BSpring%2BHibernate整合教程.pdf第3页
Struts%2BSpring%2BHibernate整合教程.pdf第4页

试读结束, 可继续读1页

10积分/C币 立即下载