论文导读:为了降低代码的耦合性,提高系统的开发效率,本文提出了一种基于Struts框架和Hibernate框架的J2EE应用开发策略。Hibernate是一个数据持久层框架,是一种实现对象和关系之间映射(O/RMapping)的工具,它对JDBC进行了轻量级的对象封装,使程序员可以使用对象编程思想来操作数据库。MVC(Model-View-Controller)首先被应用在SmallTalk-80环境中,是许多交互和界面系统的构成基础。Struts框架最早是作为ApacheJakarta项目的组成部分问世运做,它继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。
关键词:Hibernate,Struts,MVC,持久层
一、引言
随着Java技术的逐渐成熟与完善,作为建立企业级应用的标准平台,J2EE平台得到了长足的发展。借助于J2EE规范中包含的多项技术:Enterprise JavaBean(EJB)、JavaServlets(Servlet)、Java Server Pages(JSP)、Java Message Service(JMS)等,开发出了许多应用系统。但是,在传统J2EE应用的开发过程中也出现了一些问题:1)数据模型和逻辑模型之间的矛盾。目前使用的数据库基本上都是关系型数据库,而Java本质上是一种面向对象的语言,对象在存储和读取时使用SQL和JDBC进行数据库操作,降低了编程的效率以及系统的可维护性;2)传统的J2EE应用多采用基于EJB的重量级框架,这种框架适合于开发大型企业应用,但是使用EJB容器进行开发和调试需要耗费大量时间。为了降低代码的耦合性,提高系统的开发效率,本文提出了一种基于Struts框架和Hibernate框架的J2EE应用开发策略。
二、数据持久层及Hibernate
Hibernate是一个数据持久层框架,是一种实现对象和关系之间映射(O/R Mapping)的工具,它对JDBC进行了轻量级的对象封装,使程序员可以使用对象编程思想来操作数据库。它不仅提供了从Java类到数据表的映射,也提供了数据查询和恢复机制。在Hibernate中有一个简单而直观的API,用于对数据库所表示的对象执行查询。要创建或修改这些对象,只需在程序中与它们进行交互,然后告诉Hibernate保存即可。这样,大量封装持久化操作的业务逻辑不再需要编写烦琐的JDBC语句,从而使数据持久层得到了极大的简化。
图1 Hibernate体系结构
三、用Struts实现MVC架构
MVC(Model-View-Controller)首先被应用在SmallTalk-80环境中,是许多交互和界面系统的构成基础。根据界面设计可变性的需求,MVC把交互系统的组成分解成模型、视图、控制器三部分。
通常一个视图对应一个控制器。模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化-传播机制。

状态查询状态改变
通知改变
视图选择
用户请求
 方法调用事件
图2 MVC组件之间的关系图
Struts框架最早是作为Apache Jakarta项目的组成部分问世运做,它继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts框架没有具体定义模型层的实现,在实际开发中,模型层通常是和业务逻辑紧密相连的,并且要对底层数据进行操作。下面介绍一种开发策略,将Hibernate引入到Struts框架的模型层中,使用它来进行数据封装和映射,提供持久化的支持。
四、运用Hibernate和Struts开发J2EE应用
1、体系结构
下图显示了基于Hibernate和Struts开发策略的体系结构图。

图3 体系结构图
2、开发实践
下面结合开发实践,以在J2EE应用中非常普遍的用户登录过程为例,来说明上述体系结构是如何具体运用的。登录的流程非常清晰:用户从登录页面login.jsp输入登录信息,系统对登录信息进行验证,如果正确则成功登录,否则提示相应错误信息。
在开发过程中,使用Eclipse做为开发环境,同时加载了对Struts及Hibernate提供更好的控制和支持的第三方插件MyEclipse,Web服务器使用Tomcat,数据库选用了Mysql。
首先对Hibernate进行配置,只需要对系统自动生成的hibernate.cfg.xml进行修改,配置好数据库连接的各种参数以及定义数据映射文件。由于Hibernate所带的连接池主要用于测试,性能不是很好,可以通过JNDI将其修改为使用Tomcat的连接池。配置文件代码中关键的一部分如下:
<hibernate-configuration><session-factory>
<propertyname='connection.datasource'>java:comp/env/jdbc/ sysdb</property>
<propertyname='dialect'>net.sf.hibernate.dialect.MySQLDialect</property>
<mappingresource='User.hbm.xml'/>
</session-factory></hibernate-configuration>
其次是生成持久化类,实际上,由于使用了Hibernate,持久化类以及对持久化对象的映射定义均可以借助于系统中的向导自动生成。持久化对象的映射定义放到了User.hbm.xml中。部分代码如下:
<classname=”User” table=”tUser”>
<idname=”UserID” column=”User_ID” type=”java.lang.Integer”>
<generatorclass=”native”></id>
<propertyname=”UserName” column=”User_Name” type=”java.lang.String”>
…..</class>
再次,使用Struts框架来实现逻辑控制,利用系统提供的向导可以生成视图及控制器。具体的配置在Struts-config.xml文件中。相关代码如下:
<form-beans><formbean name=”LoginForm” type=”com.LoginForm”></form-beans>
<action-mappings><actionattribute=”LoginForm” input=”Login.jsp” path=”/DoLogin”
….</action></action-mappings>
输入页面Login.jsp将用户填写的登录信息提交给控制器DoLogin进行处理,控制器调用由Hibernate定义好的持久化类User从数据库中读取相应信息进行验证。操作完成后将提示信息展示在表示层中。DoLogin中使用语句User u1=UserDAO.findbyname(username)得到User对象,然后就可以进行登录信息的验证。
从整个开发过程可以看出,程序员除了利用向导对有关的配置文件进行修改,只须编写少量代码即可完成登录模块的编码。开发完成的模块符合MVC框架的要求,质量比较高,易于修改和维护。
参考文献
[1]Struts官方网站,http://jakata.apache.org/struts/
[2]Hibernate官方网站,http://www.hibernate.org/
[3] 程序员论坛,http://www.csdn.net
|