面向Web系统的Struts框架研究与应用
2008-07-08
作者:林 穗, 李振坤
摘 要: Struts是目前面向Web系统开发的一种成熟框架。介绍了框架及设计模式" title="设计模式">设计模式的基本思想,阐述了基于MVC模式的struts框架的体系结构及主要组成组件,并基于struts框架开发了高考网上报名系统" title="报名系统">报名系统。
关键词:软件复用" title="复用">复用 领域框架 Struts Web应用 报名系统
软件复用可以缩短软件的开发周期,提高软件的可靠性,降低软件的开发成本,因此软件复用技术被认为是解决软件危机的有效途径,成为软件工程的研究热点[1]。面向领域的复用是提高软件复用水平的主要途径,工业化的软件复用已经从通用类库进化到了面向领域的应用框架[2]。
Struts是目前Web开发中比较成熟的一种框架,通过把Servlet、JSP、JavaBean、自定义标签和信息资源整合到一个统一的框架中,为Web开发提供了具有高可配置性的MVC开发模式。本文从软件体系结构的理论着手,利用现有的理论体系和技术框架指导应用软件开发中的实际问题,在MVC模式的指导下设计并实现了一个基于Struts框架的高考网上报名系统。实践表明,采用这种方法开发应用软件能扩大软件代码的复用率,提高软件代码的复用质量和开发效率。
1 框架的概念
软件生产中的重用技术由来已久,从最早使用的函数库,到现在广泛使用的类库、构件库" title="构件库">构件库,但这些都只能复用小型的组件。随着面向对象技术的出现,研究人员开发了一种能复用大型组件的技术——框架[2]。
1.1 框架与构件
一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类及其实例之间协作的方法,它为构件复用提供了上下文(Context)关系,因此构件库的大规模重用也需要框架。构件领域框架方法是构件技术、软件体系结构研究和应用软件开发三方面发展结合的产物。在很多情况下,框架通常以构件库的形式出现,但构件库只是框架的一个重要部分。框架的关键还在于框架内对象间的交互模式和控制流模式。框架为构件提供重用的环境,为构件处理错误、交换数据及激活操作提供了标准的方法。应用框架强调的是软件的设计重用性和系统的可扩充性,以缩短大型应用软件系统的开发周期,提高开发质量。与传统的基于类库的面向对象重用技术比较,应用框架更注重于面向专业领域的软件重用。
1.2 框架和设计模式
框架、设计模式这两个概念总容易被混淆,它们虽然相似,却有着本质的不同。设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;框架可以用代码表示,也能够直接执行或复用,而设计模式只有实例才能用代码表示;设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式;框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。简单地说,框架是软件,而设计模式是软件的知识。在软件开发过程中把框架和模式配合起来使用,可以极大地提高软件的重用性。
2 面向Web应用的Struts框架
Struts是一种基于MVC模式的开放源代码的应用框架,它将应用程序分解为业务逻辑、控制逻辑和表现逻辑,降低了各逻辑层之间的耦合度,提高了应用程序的开发速度及可维护性和可重用性。
2.1 MVC设计模式
模型-视图-控制器MVC(Modle-View-Controller)模式是Xerox PARC在二十世纪80年代为编程语言Smalltalk-80所设计的一种软件设计模式,至今已被广泛使用,并被推荐为Sun公司J2EE平台的设计模式。MVC模式主要由三个部分组成:模型、视图和控制器,其结构如图1所示。
模型表示业务逻辑和业务规则等,模型能为多个视图提供数据,它是MVC的三个部件中处理任务最多的一个。它可以用JavaBean和EJB等组件技术来处理数据库的访问。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。视图是屏幕上的显示,模型进行操作之后,其结果就是通过视图来显示的。在视图中其实没有真正的处理发生,只是作为一种输出数据并允许用户操作的方式。控制器用于管理用户与视图发生的交互。当用户想对模型进行处理时,它不能直接去执行模型,而是通过控制器来间接地实现。控制器能从视图中取值,然后将相应的值传送给模型进行处理。控制器接收用户的输入并调用模型和视图去完成用户的需求。
2.2 Struts框架
Struts体系结构实现了MVC设计模式的概念,它将Model、View和Controller分别映射到Web应用中的组件,其结构如图2所示。
在Struts框架中Controller功能由ActionServlet和ActionMapping对象构成,核心是一个Servlet类型的对象ActionServlet,它用来接收客户端的请求。ActionServlet包括一组基于配置的ActionMapping对象,每个ActionMapping对象实现了一个请求到一个具体的Model部分的Action处理器对象之间的映射。Model部分由Action和ActionForm对象构成。所有的Action处理器对象都是开发者从Struts的Action类派生的子类。Action处理器对象封装了具体的处理逻辑,调用业务逻辑模块,并且把响应提交到合适的View组件以产生响应。Struts提供的ActionForm组件对象可以通过定义属性描述客户端表单" title="表单">表单数据,开发者可以从它派生子类对象,并利用它和Struts提供的自定义标记库相结合,可以实现对客户端的表单数据的良好封装和支持,Action处理器对象可以直接对它进行读写,而不再需要和request、response对象进行数据交互。通过ActionForm组件对象实现了对View和Model之间交互的支持(View部分是通过JSP技术实现的)。Struts提供了自定义的标记库,通过这些自定义标记库可以非常容易地和系统的Model部分交互,通过使用这些自定义标记库创建的JSP表单,可以实现对Model部分中的ActionForm的映射,完成对用户数据的封装。
3 基于Struts框架的高考网上报名系统
随着各类考试、招生业务过程信息化建设的不断完善和深入,传统的C/S架构的报名系统已经不能适应日益变化的需求。各级报名招考系统都倾向于采用Web形式的系统应用,在这种情况下,本文基于MVC设计模式的Struts框架开发了广东省普通高考网上报名系统。该架构可简述为:为数据基本信息表创建数据模型(Model),封装其所有属性以及对属性的Get和Set等方法,根据具体需求创建一系列Javabean的操作,用JSP来显示Model的内容,用控制器Web.xml来控制对定向和资源文件的读取。该结构使得系统具有良好的开发效率、可伸缩性、灵活性和健壮性。
网上报名系统用现代化的网络手段实现了报考工作,方便了考生报名,减少了考生数据出错几率,考生可登录网站直接输入报名表信息,并可随时查询和修改个人信息。同时,系统也降低了各级考试招生部门的工作量,提高了工作效率,招办可登录网站对考生数据进行统一管理,对高考报名全过程实现动态实时监控。系统功能模型如图3所示。
(1)报名管理模块:分为考生信息数据采集模块和现场确认模块。考生信息数据采集模块的使用者是考生,考生登录网站后,修改密码,填写个人简历和家庭关系及报考科目信息。在报名期限内,考生可多次登录网站查询并修改自己的信息。现场确认模块是各报名点(中学)对考生所填信息进行确认,且对考生进行现场摄像,照片会即时上传至省招办的数据库。通过报名管理模块,基本上保证了考生信息(包括相片)的准确入库。
(2)系统管理模块:主要实现各级管理员( 省级,市级,县(区)级)按不同权限灵活方便地管理系统,分配相应用户权限以及进行一些系统数据处理功能,如用户管理、数据上报、考生信息检查、信息的导入/ 导出、日志维护、报名点数据维护等。
(3)数据统计模块:主要实现招办对各类考生数据的统计分析,如考生人数、各科目报考人数、报考科目组合、考生实时报名和特殊考试类型考生等数据的统计分析。
(4)数据打印模块:主要实现各类报表的打印,如登记表、准考证、考生名册、体检表等。
框架能使应用程序的开发简单,价格低廉,但是开发框架不是一件容易的事。它是一个需要领域和设计经验的反复过程。设计模式可以简化这个过程,因为它提供了对过去经验的抽象。
MVC模式本身就是一个非常复杂的系统,所以在采用MVC开发Web应用时, 如果自行建立一个基于MVC 模式的框架, 需要很大的开发成本, 选择一个现成的MVC框架会带来事半功倍的效果,Struts框架不失为一个很好的选择。本文基于Struts框架,实现了符合要求的高考网上报名系统, 系统已成功地应用于广东省2005、2006年的高考网上报名。
参考文献
[1] GAMMA E,HELM R,JOHNSON R, et al.Design patterns: elements of reusable object-oriented software[M].Boston: Addison Wesley, 1995.
[2] 李秀芳,张福增,贾世祥.软件复用与Framework框架技术[J].科学技术与工程,2006,6(1):80-83.
[3] 陈传波,唐咸峰.领域框架的设计[J].计算机工程与科学,2002,24(6):1-3.
[4] 闫斐,王亚弟,韩继红. 基于Struts架构的J2EE应用软件的设计与开发[J].微计算机信息,2006,22(30):227-229.
[5] 官全龙,姚国祥.基于Struts的应用架构的研究[J].计算机工程与设计,2005,26(12):3225-3227.