使用struts+spring+hibernate组装你的web应用架构

上传人:飞*** 文档编号:35531709 上传时间:2018-03-17 格式:DOC 页数:24 大小:134.50KB
返回 下载 相关 举报
使用struts+spring+hibernate组装你的web应用架构_第1页
第1页 / 共24页
使用struts+spring+hibernate组装你的web应用架构_第2页
第2页 / 共24页
使用struts+spring+hibernate组装你的web应用架构_第3页
第3页 / 共24页
使用struts+spring+hibernate组装你的web应用架构_第4页
第4页 / 共24页
使用struts+spring+hibernate组装你的web应用架构_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《使用struts+spring+hibernate组装你的web应用架构》由会员分享,可在线阅读,更多相关《使用struts+spring+hibernate组装你的web应用架构(24页珍藏版)》请在金锄头文库上搜索。

1、使用 struts+spring+hibernate 组装你的 web 应用架构其实,就算用 Java 建造一个不是很烦琐的 web 应用,也不是件轻松的事情。 在构架的一开始就有很多事情要考虑。 从高处看,摆在开发者面前有很多问题:要考虑是怎样建立用户接口?在哪里处理业务逻辑? 怎样持久化的数据。 而这三层构架中,每一层都有他们要仔细考虑的。 各个层该使用什么技术? 怎样的设计能松散耦合还能灵活改变? 怎样替换某个层而不影响整体构架?应用程序如何做各种级别的业务处理(比如事务处理)? 构架一个 Web 应用需要弄明白好多问题。 幸运的是,已经有不少开发者已经遇到过这类问题,并且建立了处理这类

2、问题的框架。 一个好框架具备以下几点: 减轻开发者处理复杂的问题的负担(“不重复发明轮子“); 内部有良好的扩展; 并且有一个支持它的强大的用户团体。 好的构架一般有针对性的处理某一类问题,并且能将它做好(Do One Thing well)。 然而,你的程序中有几个层可能需要使用特定的框架,已经完成的 UI(用户接口) 并不代表你也可以把你的业务逻辑和持久逻辑偶合到你的 UI 部分。 举个例子, 你不该在一个Controller(控制器)里面写 JDBC 代码作为你的业务逻辑, 这不是控制器应该提供的。 一个UI 控制器应该委派给其它给在 UI 范围之外的轻量级组件。 好的框架应该能指导代码

3、如何分布。 更重要的是,框架能把开发者从编码中解放出来,使他们能专心于应用程序的逻辑(这对客户来说很重要)。 这篇文章将讨论怎样结合几种著名的框架来使得你的应用程序做到松弛耦合。如何建立你的架构,并且怎样让你的各个应用层保持一致。?如何整合框架以便让每个层在以一种松散偶合的方式彼此作用而不用管低层的技术细节?这对我们来说真是一种挑战。 这里讨论一个整合框架的策略( 使用 3 种受欢迎的开源框架) :表示层我们用 Struts; 业务层我们用 Spring;而持久层则用 Hibernate。 你也可以用其他 FrameWork 替换只要能得到同样的效果。 见图 1 (框架组合示意图) 应用程序的

4、分层应用程序的分层 大部分的 Web 应用在职责上至少能被分成 4 层。 这四层是:presentation(描述),persistence(持久),business(业务)和 domain model(域模块)。每个层在处理程序上都应该有一项明确的责任, 而不应该在功能上与其它层混合,并且每个层要与其它层分开的,但要给他们之间放一个通信接口。 我们就从介绍各个层开始,讨论一下这些层应该提供什么,不应该提供什么。 表示层表示层(The Presentation Layer) 一般来讲,一个典型的 Web 应用的的末端应该是表示层。 很多 Java 发者也理解 Struts 所提供的。 象业务逻

5、辑之类的被打包到 org.apache.struts.Action., 因此,我们很赞成使用Struts 这样的框架。 下面是 Struts 所负责的: * 管理用户的请求,做出相应的响应。 * 提供一个 Controller ,委派调用业务逻辑和其它上层处理。 * 处理异常,抛给 Struts Action * 为显示提供一个模型 * UI 验证。 以下条款,不该在 Struts 显示层的编码中经常出现。 它们与显示层无关的。 * 直接的与数据库通信,例如 JDBC 调用。 * 与你应用程序相关联的业务逻辑以及校验。 * 事物管理。 在表示层引入这些代码,则会带来高偶合和麻烦的维护。 持久层

6、持久层(The Persistence Layer) 典型的 Web 应用的另一个末端是持久层。这里通常是程序最容易失控的地方。开发者总是低估构建他们自己的持久框架的挑战性。系统内部的持续层不但需要大量调试时间,而且还经常缺少功能使之变得难以控制,这是持久层的通病。 还好有几个 ORM 开源框架很好的解决了这类问题。尤其是 Hibernate。 Hibernate 为 java 提供了 OR 持久化机制和查询服务, 它还给已经熟悉 SQL 和 JDBC API 的 Java 开发者一个学习桥梁,他们学习起来很方便。 Hibernate 的持久对象是基于 POJO 和 Java collecti

7、ons。此外,使用 Hibernate 并不妨碍你正在使用的 IDE。 请看下面的条目,你在持久层编码中需要了解的。 * 查询对象的相关信息的语句。 Hibernate 通过一个 OO 查询语言(HQL)或者正则表达的API 来完成查询。 HQL 非常类似于 SQL- 只是把 SQL 里的 table 和 columns 用 Object 和它的 fields 代替。 你需要学习一些新的 HQL 语言; 不管怎样,他们容易理解而文档也做的很好。 HQL 是一种对象查询的自然语言,花很小的代价就能学习它。 * 如何存储,更新,删除数据库记录。 * 象 Hibernate 这类的高级 ORM 框架

8、支持大部分主流数据库,并且他们支持 Parent/child关系,事物处理,继承和多态。 业务层(业务层(The Business Layer) 一个典型 Web 应用的中间部分是业务层或者服务层。 从编码的视角来看,这层是最容易被忽视的一层。 而我们却往往在 UI 层或持久层周围看到这些业务处理的代码,这其实是不正确的,因为它导致了程序代码的紧密偶合,这样一来,随着时间推移这些代码很难维护。幸好,针对这一问题有好几种 Frameworks 存在。 最受欢迎的两个框架是 Spring 和 PicoContainer。 这些为也被称为 microcontainers,他们能让你很好的把对象搭配起

9、来。 这两个框架都着手于依赖注射(dependency injection)(还有我们知道的控制反转Inversion of Control=IoC)这样的简单概念。 这篇文章将关注于 Spring 的注射(译注:通过一个给定参数的 Setter 方法来构造 Bean,有所不同于 Factory), Spring 还提供了 Setter Injection(type2),Constructor Injection(type3)等方式供我们选择。 Spring 把程序中所涉及到包含业务逻辑和 Dao 的 Objects例如 transaction management handler(事物管理控

10、制)、Object Factoris(对象工厂)、service objects(服务组件)都通过 XML来配置联系起来。 后面我们会举个例子来揭示一下 Spring 是怎样运用这些概念。 业务层所负责的如下: * 处理应用程序的 业务逻辑和业务校验 * 管理事物 * 允许与其它层相互作用的接口 * 管理业务层级别的对象的依赖。 * 在显示层和持久层之间增加了一个灵活的机制,使得他们不直接的联系在一起。 * 通过揭示 从显示层到业务层之间的 Context 来得到 business services。 * 管理程序的执行(从业务层到持久层)。 域模块层(域模块层(The Domain Mode

11、l Layer ) 既然我们致力于的是一个不是很复杂的 Web 的应用, 我们需要一个对象集合,让它在不同层之间移动的。 域模块层由实际需求中的业务对象组成 比如, OrderLineItem , Product 等等。开发者在这层 不用管那些 DTOs,仅关注 domain object 即可。 例如,Hibernate 允许你将数据库中的信息存放入对象(domain objects),这样你可以在连接断开的情况下把这些数据显示到 UI 层。 而那些对象也可以返回给持续层,从而在数据库里更新。 而且,你不必把对象转化成 DTOs(这可能似的它在不同层之间的在传输过程中丢失),这个模型使得 J

12、ava开发者能很自然运用 OO,而不需要附加的编码。 一个简单例子 既然我们已经从全局上理解这些组件。 现在就让我们开始实践吧。 我们还是用 Struts,Spring 和 Hibernate。这三个框架已经被描述够多了,这里就不重复介绍了。 这篇文章举例指导你如何使用这三个框架整合开发, 并向你揭示 一个请求是如何贯穿于各个层的。(从用户的加入一个 Order 到数据库,显示;进而更新、删除)。 从这里可以下载到程序程序原代码(download) 既然每个层是互相作用的,我们就先来创建 domain objects。首先,我们要在这些 Object中要确定那些是需要持久化的,哪些是提供给 b

13、usiness logic,那些是显示接口的设计。 下一步,我们将配置我们的持久层并且定义好 Hibernate 的 OR mappings。然后定义好Business Objects。有了这些组成部分之后,我们将 使用 Spring 把这些连接起来。 最后,我们提供给 Spring 一个持久层,从这个持久层里我们可以知道它是如何与业务逻辑层(business service layer)通信的,以及它是怎样处理其他层抛出的异常的。 域对象层(域对象层(Domain Object Layer) 这层是编码的着手点,我们的编码就从这层开始。 例子中 Order 与 OrderItem 是一个On

14、eToMany 的关系。 下面就是 Domain Object Layer 的两个对象: com.meagle.bo.Order.java: 包含了一个 Order 的概要信息 com.meagle.bo.OrderLineItem.java: 包含了 Order 的详细信息 好好考虑怎你的 package 命名,这反应出了你是怎样分层的。 例如 domain objects 在程序中可能打包在 com.meagle.bo 内。 更详细一点将打包在 com. meagle.bo 的子目录下面。business logic 应该从 com.meagle.serice 开始打包,而 DAO 对象应

15、该位于com.meagle.service.dao.hibernate。反应 Forms 和 Actions 的 持久对象(presentation classes) 应该分别放在 com.meagle.action 和 com.meagle.forms 包。准确的给包命名使得你的 classes 很好分割并且易于维护,并且在你添加新的 classes 时,能使得程序结构上保持上下一致。 持久层的配置(持久层的配置(Persistence Layer Configuration) 建立 Hibernate 的持久层 需要好几个步骤。 第一步让我们把 BO 持久化。 既然 Hibernate是通

16、过 POJO 工作的, 因此 Order 和 OrderLineItem 对象需要给所有的 fileds 加上getter,setter 方法。 Hibernate 通过 XML 文件来映射(OR)对象,以下两个 xml 文件分别映射了 Order 和 OrderItem 对象。(这里有个叫 XDoclet 工具可以自动生成你的 XML 影射文件) - Order.hbm.xml - OrderLineItem.hbm.xml 你可以在 WebContent/WEB-INF/classes/com/meagle/bo 目录下找到这些 xml 文件。Hibernate 的 urlhttp:/www.hibernate.org/hib_docs/api/net/sf/hibernate/SessionFactory.htmlSessionFactory /url是用来告诉程序 应该与哪个数据库通信,该使用哪个连接池或使用了DataSource, 应该加载哪些持久对象。而 Session 接口是用来完成Selecting,Saving,Del

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 企业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号