基于Struts2和Spring框架的Web整合开发研究

(整期优先)网络出版时间:2011-03-13
/ 2

基于Struts2和Spring框架的Web整合开发研究

谢宗旺方旭升

谢宗旺XieZongwang;方旭升FangXusheng

(南京航空航天大学经济与管理学院,南京211100)

(CollegeofEconomics&Management,NanjingUniversityofAeronauticsandAstronautics,Nanjing211100,China)

摘要:介绍了最新的基于MVCModel2的Struts2框架,分析了Spring框架的容器特性,研究了Struts2和Spring的整合开发策略,最后结合实例详细介绍了利用整合框架进行Web应用开发的具体流程和关键技术。

Abstract:Thenewly-inventedStruts2frameworksystemstructurebasedonMVCModel2isintroducedherewhilethecontainerfeatureofSpringframeworkhasbeenstudied.ThestrategiesofintegrationanddevelopmentinStruts2andSpringhavebeenputforwardaccompaniedwithanapplicationmodelwhichwellillustratesthedetailedprocedureandcriticaltechniquesinWebapplicationdesignutilizingtheintegratedframework.

关键词:Struts2;Spring;MVC;整合开发

Keywords:Struts2;Spring;MVC;Integration&Development

中图分类号:TP311文献标识码:A文章编号:1006-4311(2011)07-0168-02

0引言

基于MVC模式的Struts1框架是Web应用开发最为流行的框架,但是它由于采用侵入式的代码设计,代码与JSP/Servlet耦合紧密,代码重用低、测试难,表现层技术只支持JSP。新的MVC框架Struts2框架诞生克服了Struts1一些缺点,通过与其他框架整合,充分发挥它的良好特性。本文拟整合Struts2和Spring框架来进行Web应用开发。

1Struts2框架

Struts2框架由3部分组成:核心控制器、业务控制器和业务逻辑组件[1]。核心控制器由FilterDispatcher充当,负责拦截用户以.action结尾的请求,该其转入框架处理。业务控制器Action类的实例,包含了execute()方法,返回值是字符串如SUCCESS,与此对应跳转到相应视图。处理请求的Action实例并不是业务控制器,而是Action代理。框架提通过拦截器将HttpServletRequest请求的参数解,传入到Action中,执行相应方法处理请求。关于业务逻辑组件方面,在实际的开发中一般通过工厂模式或者其他IoC(控制反转)容器来获得业务逻辑组件的实例。Struts2具体的框架结构如图1。

2Spring框架

Spring是简化企业级应用开发的开源框架,使得用简单的JavaBean能够实现EJB的功能,是一个轻量级的IoC(控制反转)和AOP(面向切面编程)容器框架[2]。IoC容器就是框架的核心机制,用以实现松散藕合,由容器控制对象间依赖关系,减轻了组件间依赖关系,提高组件的可移植性。IoC又称为依赖注入,基本概念是不创建对象,只描述创建方式,在代码中不直接与对象和服务连接,但在配置文件中描述组件所需要服务项。控制反转模式的本质是将程序之间关系的控制权由程序代码转移到外部容器[3]。

3整合Struts2和Spring框架

通过分析两者框架特性可知,Struts2核心是控制功能。用户开发的控制器要实现业务逻辑处理要通过其它途径来获得业务逻辑组件实例,比如IoC容器。Spring正好具有容器的特性,将两者整合具体策略如下:将Spring以插件的形式与Strut2框架整合,用户把创建的Action实例交给Spring容器来负责生成和管理,Spring插件提供了一种伪Action的机制,当用户在struts.xml文件中配置Action时,指定class属性值为创建Action实例的实现类,利用Spring插件后允许开发者在指定class属性时,不指向Action实现类,而是指向Spring容器的BeanID。当Action类需要获得业务逻辑组件时,Spring容器通过依赖注入机制,为Action注入业务逻辑组件。通过这种整合方式,将控制器与业务逻辑组件相分离,业务逻辑组件与DAO组件相分离。Struts2和Spring框架整合后的运作流程图如图2所示。

4整合开发案例

笔者采用了Struts2和Spring框架来整合开发自行设计和开发了一个小型的图书管理系统,现以其中添加图书的模块为例,介绍整合框架进行Web开发的流程。

4.1为当前Web应用增加Struts2支持①将Struts2的核心类库(struts2-core-xxx.jar等)复制到当前Web应用的lib目录下;②修改Web应用的web.xml配置文件,配置Struts2的核心Filter用以加载Struts2框架。对Filter中<filter>的<filter-class>属性设置为org.apache.struts2.dispatcher.FilterDispatcher和<filter-mapping>的<url-pattern>属性设置为/*。

4.2整合Spring框架首先将Spring的核心类库、依赖库还有插件Struts2-spring-plugin-xxx.jar复制到当前Web应用中;其次初始化Spring容器,将Spring提供的监听器类作为Web应用的Listener,当Web应用启动时,自动查找WEB-INF目录下的applicationContext.xml文件,根据此文件来创建Spring容器。为此在web.xml文件中listener节点添加org.springframework.web.context.ContextLoaderListener。

4.3DAO层的实现DAO层专门用于数据库的访问,包括对数据库查询、插入、修改、删除等操作。DAO接口中定义了业务逻辑所需要的方法,DAO接口的实现类则借助于Spring框架的JdbcTemplate来实现其方法。JdbcTemplate将JDBC的流程封装起来,包括了异常的捕捉、SQL的执行、查询结果的转换等。设计一个BookDAOImp类实现BookDAO接口,属性为DAO组件依赖的数据源和定义Jdbc模板,通过save()方法实现添加图书到数据库。

4.4业务逻辑层的实现业务逻辑层实现系统业务逻辑,每个业务逻辑组件对应两部分:业务逻辑接口和业务逻辑组件实现类。业务逻辑组件所定义的业务逻辑方法为Struts2控制器提供服务、提供用户响应。控制器与业务逻辑接口耦合,使用IoC容器注入管理,避免了控制器主动定位业务逻辑组件,控制器与业务逻辑组件高度解耦。以添加图书模块为例,其业务逻辑层实现类BookManagerImpl实现BookManager接口,属性BookDAO的实例,通过setBookDao()接受容器注入DAO组件来调用DAO接口方法。

4.5控制层的实现控制层核心控制器是由Struts2提供,开发人员重点负责实现具体业务处理的Action类。每个Action类负责处理一项具体业务,包括接收用户请求、根据请求调用模型组件、获取业务逻辑执行结果,根据当前状态和执行结果选择视图返回。处理添加新书控制器AddBookAction类封装用户请求参数和BookManager实现类,在execute()方法中,将属性封装成BOOK实例,调用业务逻辑组件addNewBook()实现添加图书信息,然后返回逻辑视图名。

4.6完成配置工作整合框架开发系统有三个关键配置文件:一是应用的配置文件web.xml,负责加载Struts2框架、初始化Spring容器等;二是Struts2框架的配置文件struts.xml,负责拦截器、控制器、异常处理配置等,三是Spring容器的配置文件applicationContext.xml,管理容器中所有的Bean、依赖注入等工作。这些配置文件以一种松耦合的方式整合系统的各个框架、功能模块。

5小结

能否构建一个好的开发框架将关系到整个系统的开发效果、后期维护扩展。文章分析了当前两种流行Struts2和Spring框架,根据各自特点将两种框架进行整合,并使用在实际应用系统中,实践证明此整合框架是可行的,项目开发简洁、结构清晰,并且具备了更好的可扩展性和可维护性。

参考文献:

[1]李刚.Struts2权威指南[M].北京:电子工业出版社,2008:71-83.

[2]RodJohnson.ExpertOne-on-OneJ2EEDesignandDevelopment[M].Wrox,2002:18-66.

[3]魏学松,张教平.IoC框架的研究与设计[J].计算机技术与发展,2006,16(3):214-216.

[4]袁冷梅,黄烟波,黄家林等.J2EE应用模型中MVC软件体系结构的研究与应用[J].计算机应用研究,2003,20(3):147-149.

[5]冯相忠,王萍.基于J2EE平台的MVC模式的办公日志系统的实现[J].计算机应用,2005,25(12).2964-2965.

[6]程洪,钱乐秋,马舜雄.基于J2EE体系的WEB应用框架整合[J].计算机工程,2005,31(20).96-97.

作者简介:谢宗旺(1986-),男,江西乐平人,硕士,研究方向为管理信息系统;方旭升(1955-),男,江苏南京人,副教授,研究方向为管理信息系统。