APP下载

基于Struts,Hibernate和Spring的J2EE架构研究

2009-05-12王恩东张素宁

现代电子技术 2009年2期

赵 洋 张 丽 王恩东 张素宁

摘 要:介绍Struts,Hibernate和Spring三个开源框架及它们对MVC设计模式的实现,阐述如何更好地将三者结合起来构建一个健壮、高效、易于扩展的J2EE分层架构,并给出该架构的结构图,分析它的优缺点,并且通过网上购物系统给出了这一框架的实现。

关键词:Struts;MVC;Hibernate;Spring;J2EE;购物系统

中图分类号:TP311.52文献标识码:A

文章编号:1004 373X(2009)02 107 04

Research of J2EE Based on Struts,Hibernate and Spring

ZHAO Yang,ZHANG Li,WANG Endong,ZHANG Suning

(Shenyang Institute of Chemical Technology,Shenyang,110042,China)

Abstract:Three frameworks of Struts,Hibernate and Spring are introduced.The implement for MVC model based on the three frameworks is introduced.How to use the three frameworks more efficiency in building a strong,high efficiency and easy expanded J2EE,and the picture of this framework is given.The advantages and disadvantages are analyzed.Finally,the online shopping system,which is based on this framework is realized.

Keywords:Struts;MVC;Hibernate;Spring;J2EE;shopping system

0 引 言

目前,为了降低成本及开发系统的复杂性,加快应用程序的开发和设计,面向企业应用的体系结构J2EE 平台,提供了一种基于组件的方法,对于一个多层的应用模型根据功能将其应用逻辑划分成组件。

MVC 设计模式,最早是在Smalltalk-80中被提出的。MVC即:模型(Model)、视图(View)、控制器(Controller)。模型表示业务逻辑;视图是应用程序中用户界面相关的部分;控制器的作用是从客户端接收请求,并且选择执行相应的业务逻辑,然后把响应结果送回到客户端[1]。这种设计模式把应用逻辑、处理过程和显示逻辑分成不同的组件实现,通过三者之间的分离达到层间的松散耦合以及各层内部的紧密内聚,以实现代码重用和易于修改,以此来提高系统的灵活性、可重用性和可维护性,达到提高软件质量的目的。

1 开源框架Struts,Hibernate和Spring简介

1.1 Web开发框架Struts

Struts是在JSP Model2的基础上实现的一个MVC 模式的应用程序的框架。它提供Controller 组件并且整合了其他技术实现Model和View。对于Model,Struts可以使用标准数据访问技术,如JDBC和EJB, 也可以使用第三方工具, 如Hibernate,iBETIS,O/R 桥。至于View,Struts支持JSP 技术,支持JSTL(JSP Standard Tag Liberary)和JSF(Java Server Faces),也可以使用Velocity模板、XSLT(the Extensible Stylesheet Langusge Transformations)及其他表示系统。此外,Struts 提供的自定义的标签库可以辅助JSP进行表示层的设计。

Struts 的核心组件有ActionServlet,Action,ActionForm,ActionMapping,ActionForward及Taglib配置文件等。

1.2 对象关系映射工具Hibernate

Hibernate是目前流行的ORM(Object Relation Mapping)框架。它对JDBC进行了轻量级的对象封装,使得Java程序员可以使用面向对象编程思维来操作后台关系数据库,而不用再去关心繁琐的SQL语句。

Hibernate采用运行时反射(Runtime Reflection) 来决定一个类的持久化属性[2] 。在企业级应用中,由于需要频繁地与数据库交互,开发者往往在应用和数据库之间建立一个“持久层”(Persistence Layer),它负责应用到数据库的数据存储,也负责数据的检索和更新。在J2EE 的应用中,这个持久层使用JDBC、实体Beans、JDO等技术来建立。但是JDBC中数据访问对象(Databese Access Object,DAO)和SQL语句直接绑定在一起降低了可维护性,且不支持继承和多态。Hibernate 的出现让使用者又多了一个选择,可以选用Hibernate 这种框架来实现对象、关系之间的映射和数据的持久化。Hibernate拥有强大的查询语言(Hibernate Query Language,HQL),HQL完全是面向对象的[1]。

Hibernate的核心接口一共有5个,分别是:Session,SessionFactory,Configuration,Transaction和Query(或Criteria)。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。

1.3 Web开发框架Spring

Spring也是一个优秀的Web开发框架。它解决了许多在J2EE开发中常见的问题的强大框架。它提供了管理业务对象的一致方法,并且鼓励对接口的编程而不是对类编程的习惯。Spring的架构基础是基于使用JavaBean属性的Inversion of Control容器,数据访问架构集成了Hibernate和其他O/R mapping解决方案,同时提供了对Struts的支持。它是一个分层的框架,由7个模块组成[3]。Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理Bean的方式,如图1所示。

组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。

1.4 Struts,Hibernate和Spring对MVC模式的实现

Struts和Spring都是当前流行的MVC实现框架,其中Struts 在View上实现较为突出,Spring在业务层实现较好,Hibernate在数据持久层实现较好。因此将三者结合起来,很好地实现了MVC 的设计模式,如图2所示。

在这种结构中,用户从浏览器发出请求,该请求首先将被Struts的ActionServlet接收,然后ActionServlet会根据用户的Struts配置确定应触发哪一个具体的Action。Action的主要任务是调用某一个业务逻辑对象BO(Business Object)已完成相应的业务操作[4]。由于在该框架中考虑引入了Spring,因此Action将不必直接创建具体的BO,而是通过Spring框架利用反向注入的原理(Ioc)来得到BO的实例。

2 基于Struts,Hibernate和Spring三种框架的J2EE架构

在项目开发中采用基于Struts,Hibernate和Spring三种框架的J2EE架构, 用JSP技术结合Struts强大的Taglib来实现表示层;Spring负责中间的业务层;Hibernate完成对象和关系的映射,并借助数据库存储技术来实现整个J2EE应用。

分层设计思想是软件设计中的一个重要的设计思想。在项目中,也利用这种分层的思想,设计出一种分层架构。基于Struts,Hibernate和Spring框架的J2EE分层架构如图3所示。

由图3可以看出,对于基于Struts,Hibernate和Spring框架的J2EE分层架构,基本上划分了5层,详细地说,来自客户层的Web请求送到Struts框架中的控制器ActionServlet等候处理。ActionServlet包括一组基于配置的ActionMapping对象,每个ActionMapping对象实现了一个请求到一个具体的Model 部分中Action处理器对象之间的映射。ActionServlet接收客户端的请求, 并将请求交与RequestProcessor来处理。RequestProcessor根据请求的URL,从ActionMapping中得到相应的Action,并根据请求的参数实例化相应的ActionForm,进行form验证。验证通过,则调用Action的Execute方法。在方法体内,调用业务逻辑模块,由Hibernate在“幕后”完成与数据库的交互。业务逻辑类里Hibernate把HQL转换为SQL,通过O/R映射文件实现具体对数据源的操作,即穿过持久层映射到具体的数据库表。Execute方法执行后须返回ActionForward。ActionServlet接收Execute方法返回的ActionForward对象,转发到ActionForward指定的源。

3 基于这种框架的系统实现

该购物系统采用这种基于Struts,Hibernate和Spring三种框架的J2EE架构设计思想,采用Tomcat 5.0作为应用服务器,以Eclipse 3.2作为前端开发工具。

(1) 购物车的实现。网上购物不同于一般的网上操作,客户在浏览多个商品页面,购物车维持的是整个购物过程结束之前的一系列状态数据,因此必须保证购物车实例在Session范围内有效。该系统运用的是将购物车封装进有效性为Session范围的ActionForm中的方式。采用List类型变量存储购物信息Shoplist,购物车Cart中存放的是每件商品的条目信息,而每件商品的信息在相应的商品文件ProductItemDetail中。

(2) 订单的设计。订单是商务活动中的一个实体,是永久性、持续性对象,该系统订单通过订单表直接创建,由用户提交后,直接写入后台数据库,此时标识订单状态为Unverified,然后由管理员处理订单。检查客户账户余额,用户检验通过后,发送确认Email,表示订单已成功,最后改变订单状态为Submited。该系统主要分为两个部分:前台客户应用系统;后台数据处理系统。

3.1 系统业务流程及总体结构

相对应于功能模块,系统主要分两部分业务:系统应用和后台管理。系统总体结构图如图4所示。

说明:该系统共分为5个部分,首先是客户端浏览部分,然后是Struts负责请表转发和调Spring业务处理逻辑,之后是业务逻辑层,有一个业务逻辑的接口和一个数据库操作接口,主要是实现业务逻辑,再次是Hhibernate层,主要是利用hibernate实现具体的数据库操作,最后就是数据库管理系统。

3.2 系统实现的部分代码及最终结果

(1) Struts核心配置文件struts-config.xml

<form-beans>//Actionform Beans的配置

…</form-beans>

</action>…//设置action类

<action path="/login" //使用此Action的路径是/login.do

<controller />//对于template插件的设置

<plug-in className="org.apache.struts.tiles.TilesPlugin">

<set-property property="definitions-config"

(2) Hibernate配置文件hibernate.cfg.xml

说明:对于Hibernate的配置文件主要是对JDBC进行数据库连接的一些基本配置

<property name="connection.username">root</property>//数据库登录名

<property name="connection.url">//数据库连接地址

<property name="myeclipse.connection.profile">

shoppstore</property>//数据库名

com.mysql.jdbc.Driver</property>//数据库的jdbc驱动

<mapping resource="jsp/shopstore/hibernate/hibernate.cfg.xml" /><mapping

resource="jsp/shopstore/hibernate/front/Userinfo.hbm.xml" />//设置对应数据库表的xml文件路径

(3) Spring配置文件bean.xml

<beans><!设置数据源对象-->

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">

<value> jdbc:mysql://localhost:3306/shopstore</value>

…<!--配置sessionFactory-->

<bean id="sessionFactory" class="">……<bean>

<!--配置事务管理器--><bean id="transactionManager"…

</beans>

(4) 购物车部分实现代码

HttpSession session=request.getSession();//取得用户session

List li=(List) session.getAttribute("shopcat");//取得用户已选商品信息

if(li==null){ li=new ArrayList();}

String id=shop_cartForm.getId1();

IBL ibl=new IBLImpl();

Object obj=ibl.productItemDetail(id);

return mapping.findForward("suc");//返回到成功跳转页面

系统实现的最终形式如图5所示。

4 结 语

在项目开发中选择Struts,Hibernate和Spring来搭建J2EE架构。由于层次之间松散耦合和各层内部的高内聚,在开发过程中,层与层之间的工作几乎是完全独立的。三者的结合体现了良好的设计思想:Struts和Spring是基于MVC的框架,两者的结合很好地分离业务逻辑和表示层;Hibernate是一个小巧的实现对象关系映射的工具,把面向对象的设计开发与关系数据库联系起来。

基于这三种框架的架构也并非没有缺点,如:Struts中Action的映射非常复杂;Hibernate的对象、关系之间的映射工作量很大;两者的配置文件都很复杂等等。其实,这正是其灵活之处。因为把各层都完全分离了所以才易于重用和可扩展,因而其灵活映射的配置文件才会很复杂。

参考文献

[1]黄烟波,张红宇,李建华.基于Struts和Hibernate的J2EE架构[J].计算机时代,2004(10):29-30.

[2]宋汉增,沈琳.利用Hibernate对象持久化服务简化Java数据库访问[J].计算机应用,2003(12):135-137.

[3]计磊,李里,周伟.J2EE-Eclipse struts Hibernate Spring整合应用案例[M].北京:人民邮电出版社,2006.

[4]黄海,朱跃龙.J2EE设计模式与框架技术的应用研究[J].计算机与现代化,2006(5):114-115.

[5]赵小穗,李建民,林振荣.基于Hibernate和Struts的Web应用系统的设计[J].计算机与现代化,2007(6):76-80.

[6]Cay S Horstmann.Gary Cornell Java 2核心技术 (卷I):基础知识[M].北京:机械工业出版社,2006.

[7]Bruce Eckel.Java编程思想[M].北京:机械工业出版社,2005.

[8]Arnold Doray.Struts基础教程[M].北京:人民邮电出版社,2007.

[9]戎伟,张双.Struts-Java流行服务器、框架、工具及整合应用[M].北京:人民邮电出版社,2006.

[10]邵丽萍,绍光亚,张后扬.Java语言程序设计[M].北京:清华大学出版社,2005.

作者简介

赵 洋 男,1974年出生,辽宁抚顺人,讲师,硕士。主要从事计算机软件的研究工作。

张 丽 女,1979年出生,教师,硕士,助教。主要从事计算机软件的研究工作。

王恩东 男,1978年出生,教师,硕士,助教。主要从事计算机软件的研究工作。

张素宁 女,1984年出生,河北衡水人,在读硕士研究生。主要从事计算机软件的研究工作。