基于开源组合框架构建企业级Web应用系统研究

时间:2022-10-15 01:43:48

基于开源组合框架构建企业级Web应用系统研究

摘要:主要研究了如何整合当前比较流行的基于MVC模式的Struts开源框架、基于IoC模式的Spring开源框架和基于ORM模式的Hibernate开源框架来共同构建企业级的Web应用,为企业级Web应用提供了一种轻量级J2EE解决方案。通过一个实际的项目案例展示了如何基于开源组合框架进行实际的企业级Web应用开发。

关键词:企业级Web应用;开源;框架;J2EE

中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)16-21252-03

The Research of the Construction of Enterprise Web Application System Based on Integration of Open Source Frameworks

HE Han-hui1, DING Yong2

(1.Zhejiang Medical College,Hangzhou 310053,China;2.Dept of information technology,Zhejiang Institute of Economic & Technology,Hangzhou 310018,China)

Abstract:This thesis did research on how to combine three open source frameworks (Struts framework based on MVC model, Spring framework based on IoC model and Hibernate framework based on ORM model), which are widely used currently, to construct Enterprise Web Application. It provides a lightweight solution of J2EE for Enterprise Web Application. In the end of the thesis, a project is implemented by the application of the integration of open source frameworks.

Key words:Enterprise Web Application;Open Source;Frameworks;J2EE

1 引言

MVC(Model View Controller的缩写)是一种常用的设计模式,它有效地减弱了业务逻辑接口和数据接口之间的耦合,提高了软件的可扩展性、可维护性。Struts+Spring+Hibernate开源组合框架为开发基于J2EE的企业级Web应用提供了一种轻量级解决方案。它不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。本文通过我们为浙江杭州某知名服装公司开发的一个较为大型的进销存系统展示了如何进行基于SSH框架的Web应用开发。

2 MVC设计模式

MVC即Model-View-Controller的缩写,MVC设计模式将应用程序进行了分层,视图和模型通过控制器连接,从而减少了用户界面和业务逻辑之间的耦合,使程序设计更加清晰、灵活,也提高了软件的可扩展性、可维护性。MVC的工作原理,如图1所示。

图1 MVC模型

2.1 视图(View)

视图提供了用户界面,是用户和应用程序的交互的窗口,既接受用户输入,也把模型数据状态显示给用户,但是视图不负责任何业务逻辑处理,仅仅是将用户输入数据传递给控制器或将模型数据显示给用户。

2.2 控制器(Controller)

控制器连接了模型和视图,根据用户请求判断将请求交给哪个模型来完成,然后调用视图来显示模型处理后的用户请求结果。

2.3 模型(Model)

模型封装了用户数据和处理数据的业务逻辑,体现了应用程序的当前状态,而且可以将用户数据状态的变化提供给多个显示该数据的视图共用。模型是应用程序的核心。

3 开源框架

3.1 Struts开源框架

Struts框架主要分为模型(Model)、视图(Viewer)和控制器(Controller)三部分,其主要的设计理念是通过控制器实现表现逻辑和业务逻辑松耦合,从而提高系统的可重用性、可扩展性和可维护性。

3.1.1 Struts中的视图(View)

Struts构架主要采用了JSP作为视图的实现。Struts自身包含了一组标记库(TagLib),这也是Struts的精华之一,灵活运用它们可以简化JSP页面的代码,提高开发效率。而且引入了ActionForm组件(实质为JavaBean)作为用户表单的封装来完成数据的传输。

3.1.2 Struts中的控制器(Controller)

Struts框架中采用了ActionServlet和Action类以及Struts-config.XML配置文件作为控制器的实现。当用户提出请求,ActionServlet类最先对请求进行处理,它将根据Struts-config.xml配置文件将用户请求映射到具体的Action类;而当Action类调用模型组件处理好用户请求,并返回了处理结果后,仍然由ActionServlet类根据Struts-config.xml配置文件将结果转发到视图提供给用户,或者转发另外一个Action做进一步处理。

3.1.3 Struts中的模型(Model)

模型以一个或多个Java bean的形式存在。Struts没有定义具体Model层的实现,Model层通常是和业务逻辑紧密相关的,有持久化的要求。Struts框架实现了MVC设计模式,但是它是典型的表现层框架,对模型的实现是不足的,所以有必要引入其他架构加强对模型的实现。这也就是说开发人员有更多自由来选择合适量级的持久化技术,比如Hibernate、EJB等等。

3.2 Spring开源框架

Spring是一个解决了许多J2EE开发中常见问题并能够替代EJB技术的强大的轻量级框架。Spring框架的核心是控制翻转IoC(Inversion of Control)/依赖注入DI(Dependence Injection)机制。IoC是指由容器中控制组件之间的关系而非传统实现中由程序代码直接操控,这种将控制权由程序代码到外部容器的转移,称为“翻转”。DI是对IoC更形象的解释,即由容器在运行期间动态地将依赖关系注入到组件之中。Spring采用设值注入和构造子注入的机制,通过配置文件管理组建的协作对象,创建可以构造组件的IoC容器。Spring框架的结构如图2所示。

Spring框架可以成为企业级应用程序一站式的解决方案,同时它也是模块化的框架,允许开发人员自由地挑选适合自己应用的模块进行开发。Spring框架式是一个松耦合的框架,框架的部分耦合度被设计为最小,在各个层次上具体选用哪个框架取决于开发者的需要。

3.3 数据持久层框架Hibernate

O/R mapping技术是为了解决关系型数据库和面向对象的程序设计之间不匹配的矛盾而产生的。Hibernate是目前最为流行的O/R mapping框架,它在关系型数据库和Java对象之间做了一个自动映射,使得程序员可以以非常简单的方式实现对数据库的操作。Hibernate工作原理如图3所示。

图2Spring 框架的结构 图3Hibernate工作原理

Hibernate通过对JDBC的封装,向程序员屏蔽了底层的数据库操作,使程序员专注于OO程序的开发,有助于提高开发效率。程序员访问数据库所需要做的就是为持久化对象编制xml映射文件。

底层数据库的改变只需要简单地更改初始化配置文件(hibernate.cfg.xml或者hibernate.properties)即可,不会对应用程序产生影响。

Hibernate有自己的面向对象的查询语言HQL,HQL功能强大,支持目前大部分主流的数据库,如Oracle、DB2、MySQL、Microsoft SQL Server等,是目前应用最广泛的O/R映射工具。Hibernate为快速开发应用程序提供了底层的支持。

4 基于SSH组合框架的Web应用开发实例

下面将通过我们为浙江杭州某知名服装公司所开发的一个大型的进销存系统来展示如何进行基于SSH框架的Web应用开发。由于本系统功能模块较多、业务逻辑复杂,限于篇幅原因,下面我们将以“渠道管理模块”为例来概要地说明系统的开发与实现过程。

4.1 数据持久层的实现

本系统的数据持久层由Hibernate实现。Hibernate通过映射(Mapping)文件将对象(Object)与关系型数据(Relational)相关联。有了Java持久化类后就可以在此基础上实现数据访问类。在Spring框架中,数据访问类可以从辅助类HibernateDaoSupport继承,这极大地方便了Hibernate框架在Spring中的使用,相应的部分代码如下:

public class ChannelDAO extends HibernateDaoSupport {

private static final Log log = LogFactory.getLog(ChannelinfoDAO.class);

// property constants

……

public void save(Channelinfo transientInstance) {

log.debug("saving Channelinfo instance");

try {

getHibernateTemplate().save(transientInstance);

log.debug("save successful");

} catch (RuntimeException re) {

log.error("save failed", re);

throw re;

} }

……

}

4.2 业务逻辑层的实现

业务逻辑层由Spring框架支持。由于数据持久层实现了Java持久化类并且封装了数据访问对象(DAO),因此可以在Model组件中方便地调用DAO组件来存取数据。Spring的IoC容器负责统一管理Model组件和DAO组件以及Spring所提供的事务处理、缓冲连接池等服务组件。

在用户管理模块中,通过业务建模创建了用户模型ChannelService类,封装了对用户的权限管理以及积分管理等功能。ChannelService类通过调用数据访问类ChannelDao实现对用户数据的操作。这些组件的关系将通过配置Spring框架的applicationContext.xml联系起来,配置文件的主要内容如下:

<!-- ===创建业务模型组件ChannelService,并调用ChannelDao组件作为协作对象=== -->

< bean id= "ChannelService" class= "com.ebcss.hibernate.ChannelService">

<property name= "ChannelDao"> ref local= "ChannelDao"/> </property >

<bean>

<!--===创建数据访问组件ChannelDao,并调用Hibernate的Session工厂作为协作对象===-->

< bean id= " ChannelDao " class= " com.ebcss.hibernate.dao.ChannelDao ">

<property name= " SessionFactory "> ref local= " SessionFactory "/> </property >

<bean>

4.3 表示层的实现

表示层结合JSP和Struts的TagLib库处理显示功能,利用ActionServlet将请求(*.do)映射到相应的Action,并由Action调用业务逻辑的服务组件,然后根据处理结果跳转到Forward对象指定的响应页面。

业务流程的部署由struts-config.xml完成。下面以一个显示所有渠道信息的请求(ListChannel.do)为例来说明配置文件的使用。

<!- 请求调用ListChannelAction,并根据返回的Forward对象的状态来转到相应的页面-->

<struts-config>

<form-beans> <form-bean name="channelForm" type="com.ebcss.struts.form.ChannelForm"/>

</form-beans>

<action-mappings>

<action path = "/ListChannel.do"

type= " com.ebcss.hibernate.action.ListChannelAction "

name= "channelForm"

scope = "request"

validate = "true"

input= "/index.jsp"

<forward name="Success" path="/successListChannel.jsp" />

<forward name="Failure" path="/error.jsp" />

</action>

</action-mappings>

<message-resources parameter="com.ebcss.struts.applicationResources"/>

</struts-config>

一个好的架构可以避免重复设计,减少开发风险,增强软件的可扩展性、可维护性及可移植性,提高软件质量和性能效率。本文通过整合Struts+Spring+Hibernate开源框架,提出了一种利用轻量级开源框架来快速搭建Web应用的解决方案,并且通过其在实际项目中的应用,证明了采用此方案可以帮助开发人员在短时间内建立结构清晰、可重用性好、维护扩展方便的Web应用程序。

参考文献:

[1] JOHNSON R,HOELLER J,ARENDSEN A,et al.Java/J2EE application framework reference document V1.1[M].2004.

[2] CRAIG WALLS,RYAN BREIDENBACH.Spring in Action[M].2005.

[3] Matt Raibler.Spring Live[S].SourceBeat,LLC,2004.

[4] 夏昕,曹晓钢,唐勇.深入浅出Hibernate[M].北京:电子工业出版社,2005.

[5] 孙卫琴.精通Struts:基于MVC的Java Web设计与开发[M].北京:电子工业出版社,2004.

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

上一篇:计算机技术在教学上的应用 下一篇:下一代网络中SIP和H.323互通网关研究和设计