摘 要:目前的J2EE应用中,普遍采用了多层的架构。本文总结了一种基于 J2EE的轻量级多层架构,即目前比较流行的 Struts+Spring+ Hibernate组合框架:Struts框架可分为以下四个主要部分,其中三个就和MVC模式紧密相关: 1、模型 (Model),2、视图(View),3、控制器(Controller),4、一堆用来做XML文件解析的工具包。Spring可以实现对Struts、Hibernate的无缝链接,适用于业务层;持久层中采用了Hibernate这一功能强大的 ORM映射工具。Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了轻量级的对象封装,使得Java程序员可以使用对象编程思维来操纵数据库。文中讨论了轻量级多层架构的应用,并在具体的案例中,充分结合Struts,Spring,Hibernate与J2EE体系结构过程中的性能,利用了Java语言的反射机制,对其中的重要组件进行了配置,又从软件层次结构的角度考虑了该种组合架构应该注意的问题,例如可扩展性问题,在实际的项目中取得了很好的效果。
关键词: Struts; Spring; Hibernate; ORM; MVC
1 引言
目前Java在企业级开发中主要采用多层结构,这样做的好处有:它增强了程序的健壮性,提高了代码的重用率,也加快了程序开发的速度,缩短开发周期,同时还能便于开发人员对代码的维护,其中以三层结构最为经典。本文将理论联系实际地介绍三层结构的开发模式。
2 系统介绍
J2EE的三层结构主要指三层体系结构,即用户层、应用层和数据库服务器。用户层主要指用户界面,它要求尽可能的简单,使最终用户不需要进行任何培训就能方便地访问信息;第二层就是应用服务器,也就是常说的中间件,所有的应用系统、应用逻辑、控制都在这一层,系统的复杂性也主要体现在应用层;最后的数据库服务器存储大量的数据信息和数据逻辑,所有与数据有关的安全、完整性控制、数据的一致性、并发操作等都是在第三层完成。而轻量级架构Struts+Spring+Hibernate可以实现J2EE多层结构,其中Struts用于表示层、控制层Spring用于业务处理层,而Hibernate则用于数据持久层。
2.1 J2EE多层架构分析
2.1.1 Struts框架
Struts是一个基于Sun Java EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。Struts框架可分为以下四个主要部分,其中三个就和MVC模式紧密相关:
* 模型 (Model),本质上来说在Struts中Model是一个Action类(这个会在后面详细讨论),开发者通过其实现商业逻辑,同时用户请求通过控制器(Controller)向Action的转发过程是基于由struts-config.xml文件描述的配置信息的;
* 视图(View),View是由与控制器Servlet配合工作的一整套JSP定制标签库构成,利用她们我们可以快速建立应用系统的界面;
* 控制器(Controller),本质上是一个Servlet,将客户端请求转发到相应的Action类
* 一堆用来做XML文件解析的工具包,Struts是用XML来描述如何自动产生一些JavaBean的属性的,此外Struts还利用XML来描述在国际化应用中的用户
提示信息的(这样一来就实现了应用系统的多语言支持)。
2.1.2 Spring框架
Spring是一个目前非常活跃的轻量级的开源的框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
* 轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。
* 控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
* 面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
2.2 J2EE轻量级架构
2.2.1 J2EE轻量级架构描述
J2EE的三层结构在业界是指表示层(Presentation),业务逻辑层(Business logic)以及基础架构层(Infrastructure)。这样的划分当然是经典的,但是在实际项目中,往往会对三层体系结构做一些扩展来满足项目的需要。一个最常用的扩展就是将三层体系扩展为五层体系,即表示层(Presentation)、控制/中介层(Controller/Mediator) 、领域层(Domain)、 数据持久层(Data Persistence) 和数据源层(Data Source)。它其实是在三层架构中增加了两个中间层。控制/中介层位于表示层和领域层之间,数据持久层位于领域层和基础架构层之间。
2.2.2 View层
视图层中主要采用 Struts技术:
在前端 JSP页面中使用 Struts提供的标签与 EL、JSTL结合来实现页面数据逻辑的组织和显示,如:Bean标签,HTML标签等;
将不同国家语言的字符串信息存储到对应的资源文件,并通过 Struts的 Bean标签提取到 JSP页面中,从而使其能处理国际化的消息;在页面中使用 Struts包含的 Tiles框架实现页面布局的复用,便于系统的改版和维护。
3 结论
从软件层次结构的角度上讲,软件的框架要具有较高的伸缩性和可扩展性。本文所讨论的SSH组合框架架构,它的模块化设计得到了很好的应用,层次非常清晰,具有很好的可复用性。持久层中,Hibernate的应用使得研发人员的工作大大降低,但同时它也存在着一些不足之处,如Hibernate直接生成SQL语句虽然方便快速开发,但同时失去了灵活性,使其应用在一些复杂的SQL应用中比较麻烦。
Struts,Spring,Hibernate三者结合,发挥各自的优点,使得基于轻量级J2EE架构开发简洁、结构清晰、开发周期短、有较高的可扩展性和可维护性,适用于面向对象的设计与开发。
参考文献:
J2EE Web核心技术——Web组件与框架开发技术, 杨少波,清华大学出版社, 2011.1