论文导读::面向服务的体系结构SOA和WebServices技术相关的规范、标准逐渐成熟。
关键词:Struts,MVC,OA
为了提高应用系统中组件的重用能力和事务控制的灵活性,越来越多的开发人员采用MVC设计模式来分离系统的用户界面、业务逻辑及业务控制[1~3]。Struts框架结构是MVC设计模式的一种具体实现,它为Web应用提供了一个通用的框架,使得开发人员可以把精力集中在如何解决实际业务问题上。此外,Struts框架提供了许多可供扩展和定制的技术,使得应用程序可以方便地扩展框架,更好地适应用户的实际需求。本文首先介绍了MVC模式的基本思想及Struts的工作原理,并以网上办公系统为例,详细地说明了基于Struts框架进行信息管理系统开发的方法与思路。
1 Struts框架
Struts是Apache软件基金的一个开源项目,是基于MVC设计模式构建Java Web应用程序的框架[4]。Struts框架在构建复杂的Web应用时,允许把应用程序的业务逻辑、控制逻辑和表现逻辑进行分离MVC,从而提高系统灵活性、重用性和可维护性,进而简化Web应用程序的开发。
1.1 MVC模式
MVC是80年代Smalltalk中使用的一种软件模式,目前已经被广泛使用,是J2EE平台上推荐使用的设计模式[5]。该模式将应用系统的输入、处理和输出按照Model、View和Controller的方式进行彻底的分离,因此应用系统就被分为了三个核心部分:模型、视图和控制器,它们各自处理各自的事务。
(1)模型(Model):它代表的是应用的业务逻辑,可以对业务流程、状态处理和业务规则的进行制定。业务流程的处理过程对其它部分来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。
(2)视图(View):它代表的是应用的表示,是与用户交互的部分。它一般进行数据的采集,并把数据交给其它部分处理。
(3)控制器(Controller): 它位于模型与视图之间,控制着它们之间的交互处理过程。控制器把客户端来的请求转换成模型能够理解和执行的请求,并且根据请求选择处理的模型,接着根据执行结果决定下一次显示的视图。
图1描述了模型、视图和控制器三者之间的关系。在应用系统开发过程中,通过该设计模式可以将业务逻辑、控制逻辑和表现逻辑分别用用不同的组件实现,以提高代码的重用性和可维护性。

图1 MVC模式图
1.2 Struts工作原理
Struts是一个开放资源框架,是MVC设计模式的一个实现,由一组相互协作的类、Servlet以及JSP标签库组成中国论文下载中心。Struts 的体系结构将Model、View、Controller 分别映射到 Web 应用中的组件。在Struts中Model由Action和ActionForm对象来实现,所有的Action处理器对象都是Action类的子类,Action处理器对象封装了具体的处理逻辑MVC,调用业务逻辑模块,并且把响应提交到相关的View组件以产生响应。通过ActionForm组件对象实现了对View和Model基本的控制器组件是ActionServlet,但是对于业务逻辑的操作则主要由Action、ActionMapping和ActionForward这几个组件协调完成。其中Action扮演了真正的业务逻辑的实现者,或者说是业务逻辑调用的接口;而ActionMapping和ActionForward则制定了不同业务逻辑或流程的运行方向[ 6],其工作原理如图2所示。

图2 Struts 的工作原理
2 网上办公系统的实现
2.1 系统介绍
网上办公系统是为帮助企事业单位内部员工更好地进行合作或更有效地工作而设计的,旨在实现企事业单位内部的无纸化办公。由于不同单位所需办公系统功能的不同,在此我们选取了网上办公系统中通用的几个模块进行了实现,主要包括:文件夹、待办事项、通讯录、日程安排、文件柜、电子公告、用户设置和系统管理等模块。
2.2 系统实现
由于系统各功能的实现无论是在步骤上,还是在方法上都是大同小异,所以在此以用户登录为例详细说明该系统的实现方法及思路。在登录窗口当用户输入用户名和密码,点击“登录”按钮,即向 Controller 发出一个 HTTP 请求。用户输入的表单参数将以LoginForm的形式封装提交到 ActionForward。这个ActionForward调用相应的 login 执行业务逻辑,完成用户登录功能。以下是登录功能的具体实现过程:
首先,编写登录相关的业务逻辑代码,其具体代码如下所示:
public int login(String uid,String pwd)throws OAServiceException{
Session session=null;
Transaction tx=null;
Query query1=null;
Query query2=null;
int result=1;
try {
session=HibernateUtil.getSession();
tx=session.beginTransaction();
query1=session.createQuery('from User u where u.uid=:vUid');
query1.setParameter('vUid',uid);
if(query1.uniqueResult()==null) return 1;
query2=session.createQuery('from User u where u.uid=:vUid andu.password=:vPwd');
query2.setParameter('vUid',uid);
query2.setParameter('vPwd',pwd);
User u=(User) query2.uniqueResult();
tx.commit();
return((u==null)?2:3);
} catch (Exception e) {
rollBack(tx);
}finally{
closeSession(session);}
return result;}
然后,编写登录要用到的ActionForm类:
package com.lanyu.oa.form;
……
public class LoginForm extends ActionForm {
private String uid;
private String password;
……
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) {
ActionErrors errors=new ActionErrors();
if(uid.length()<1)
errors.add(ActionErrors.GLOBAL_ERROR,newActionError('errors.uid.required'));
if(password.length()<1)
errors.add(ActionErrors.GLOBAL_ERROR,newActionError('errors.password.required'));
return errors;}
}
接着,编写登录相关的Action类以及相应的方法,登录相关的Action类为com.lanyu.oa.action.UserAction.java,以下是完成登录功能的代码片断:
public ActionForward login(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,HttpServletResponse response) {
ActionForward forward=null;
String msg=null;
Useru=null;
intresult=0;
LoginForm form=(LoginForm) actionForm;
String uid=form.getUid();
String pwd=form.getPassword();
try {
result=service.login(uid,pwd);
u=service.getUser(uid);
} catch (OAServiceException e) {}
if(u==null)result=2;
forward=processResult(result,msg);
return forward;
}
最后,在配置文件中添加与登录相关的配置。具体步骤如下:
(1) 在Struts的配置文件中找到<form-beans>标签MVC,在此标签下添加子标签<form-bean>。其具体内容如下:
<form-beans>
……
<form-bean name='LoginForm' type='com.lanyu.oa.form.LoginForm'/>
……
</form-beans>
(2) 在Struts的配置文件中找到<ActionMappings>标签,在此标签下添加<action>子元素以及相关的局部<forward>标签。其具体内容如下:
<actionpath='/User/login' parameter='method' type='com.lanyu.oa.action.UserAction'
name='LoginForm'input='/login.jsp' scope='request'>
<forward name='success' path='main.page' redirect='true'/>
</action>
(3)由于本系统中使用了tiles,因此还得在tiles-defs.xml文件中添加相应的配置。
登录模块的运行界面如图3所示,如果登录成功,则进入系统,系统登录成功的主界面如图4所示。

图3 用户登录界

图4 系统主界面
3 结束语
Struts作为一种有效的进行Web应用开发的框架,充分利用了MVC模式的优点。应用Struts框架构建网上办公系统很好地实现了业务逻辑与表示逻辑的分离,大大简化系统开发的难度。尤其是各层逻辑组件的同时开发,缩短了开发周期,其灵活的、大量丰富的标记库语言大大提高了开发效率,而且应用Struts框架构建的Web应用系统,具有良好的可重用性、可维护性和可扩展性。
参考文献
[1]石海鹏.基于MVC模式的J2EE应用研究与开发:[硕士学位论文]. 江西:江西师范大学, 2004.
[2]马黎明.基于J2EE平台的Web应用系统研究:[ 硕士学位论文]. 武汉:武汉理工大学, 2004.
[3]孙卫琴.精通Hibernate:Java对象持久化技术详解[M]. 北京:电子工业出版社, 2005.9
[4]Erich Gamma. J2EE构建企业系统[M]. 北京:清华大学出版社, 2001
[5]James Holmes著, 孙燕等译. Struts程序员查询辞典[M]. 北京:中国铁道出版社, 2005
[6](美)Ted Husted. 实战Struts[M].北京:机械工业出版社,2005.5
|