工控网首页
>

应用设计

>

基于Struts框架DynaForms的Web应用

基于Struts框架DynaForms的Web应用

2006/5/19 10:00:00
关键词:MVC;Struts;DynaForms 中图分类号:TP312 文献标识码:A Web Application Based on Struts Frameworks DynaForms CAI Yu - Zhi1, CAI Zhao - Quan2, PI You - Guo1 (1.South China University of Technology, guangzhou 510640, China; 2. Huizhou College, huizhou 516001, China) Abstract: Using DynaForms can reduce lots of coding drudgework and be propitious to maintain the application. This paper narrate the application of struts frameworks DynaForms, and introduce the contrast between DynaForms program and ActionForm program in logon procedure of Web application. Key words: MVC; struts; dynaForms 1 Struts框架 来自Apache软件组织的Jakarta工程的Struts框架版本1.1b2,是一个开放式源代码框架,用于构建集成标准技术(如JavaServlet,JavaBeans和 JavaServer页等)的Web应用程序[1]。Struts提供了一个实现MVC(Model - View - Controller)架构的高度自动化的方式,作为一个MVC的框架, struts对模型、视图和控制器都提供了对应的实现组件。 MVC是一种设计模式,在此设计模式中,应用程序的流程是由一个中央控制器控制的,这个控制器分派http请求到相应的处理者,而这些处理者是和模型关联在一起的,它在中间担当着适配器的角色[2]。MVC在定义下面三个应用层时作了明确的区分: 模型(Model)用于处理事物逻辑,对系统相关的对象进行数据的存取操作或其它处理[3],用来表示业务数据和业务逻辑。 视图(View)是模型的显示,提供应用程序的用户界面,并随模型状态变化作相应更新。 控制器(Controller)定义了应用程序与用户输入及模型进行交互的方式,控制应用程序流程。 通过明确区分各个层,MVC允许组成每个层的各个组件间松散地耦合。这使它更加灵活,并且可以重用代码。这种特性使得应用程序开发和维护变得更加容易。 在struts中模型通常被分为两个子系统,系统内在状态和为了改变状态而采取的actions;视图则使用JSP技术;控制组件是由源自类ActionServlet的一个Servlet,接收用户请求,寻找相应acion映射,其ActionMapping就是用来组织Servlet映射的,以确定程序流程。如图1所示:
2 使用DynaForms Web程序应用时,会有许多的表单提供给用户填写信息,越是大型的网站就需要越多的A-cionForm类来应付表单的取值、赋值等工作。这些类文件对于struts是非常关键的,它通常由许多 bean属性及其每个属性的getXxx、setXxx方法和一个Validate方法(有时还有reset方法)构成,在视图显示和用户信息校验方面担当着重任。但是对于有些简单表单而言,ActionForm仅仅是完成取值、赋值的行为,在strutsl.1以前,如果要为每个表单都撰写一个ActionForm类,那是一件简单重复且非常无趣的事情,花费了我们大量的时间和精力去编写该类文件,还增加了维护的难度。其框架构成如图2所示。
随着strutsl.1版本的推出,现在有一套新的方法来完成前面的任务,这就是使用Dynabeans[4]。 DynaForms是基于Aphaehe公共包中接口Dyn- aBean的扩展,作为DynaBean,那么它的名称、属性、值都是可以动态修改的,它不再要求显式的 getXxx和setXxx方法。因此使用DynaForms,可以减少AcionForm中80% - 90%的代码[5],甚至可以在JSP页中写Javascript小程序或者是通过创建一个DynaActionForm的子类,然后在子类中实现Validate方法来完成ActionForm中的校验功能,这样就可以完全的丢弃AcionForm。其框架构成如图3所示。
要使用DynaForm,是非常容易的,只要在 struts -config.xml配置文件中做好相关的属性设置,就可以在运行时动态生成DynaBeans,这样可以集中于配置文件中管理表单,维护方便且省去了编写枯燥的ActionForm代码的过程,同时还可以减少程序的所占磁盘空间。虽然使用DynaForms相当的方便,但相应也必须付出一些代价。不可避免,struts - config.xml文件内容将变得冗长;另一方面,由于DynaForms使用Map来查找属性,也使得运行效率有所降低。 3 用DynaForms实现办公业务系统的用户登录 本实现列出了如何使用DynaForms从用户 JSP页面提取用户名和密码的部分代码,提取用户信息后的业务逻辑部分代码未列出。 以下是系统的struts-config.xml文件的部分内容,该部分定义了DynaBeans和ActionMapping。配置文件中定义了对于用户登录时的http请求lo.ginSubmit.do,将由LoginSubmitAction和login- Form协同响应。LoginForm封装了用户的请求信息,LoginSubmitAetion完成相应业务操作。此处的loginForm就使用了strutsl.1的DynaForms,在运行过程中动态的生产DynaBean,因而不用再另外编写ActionForm的代码,用户信息的sysuserid 属性的初始值被设定为tomy,这相当于完成A cionForm中的reset方法的功能。 …… < form - beans > < form - bean name = "loginForm" type = "org. apache, struts, action. DynaActionForm" > < form - property name = "sysuserid" type = "java. lang. String" initial = "tomy"/> < form - property name = "password" type = "java. lang. String" /> < action - mappings > < action name = "loginForm" type = "com. news. struts. LoginSubmitAction" validate = "false" input= " login.jsp" scope= "request" path= "/loginSubmit" /> …… 本实现的控制器部分的LoginSubmitAction业务处理的部分代码如下,仅列出从FormBean中取得用户id和密码的部分,对业务逻辑的后续操作代码部分未列出。由于我们不再向execute方法中传递带有getXxx和setXxx方法接口的Form类,所以我们需要将Form转型至DynaActionForm,然后使用方法get(filename)来取得用户信息。 public class LoginSubmitAction extends Action { public ActionForward execute (ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServle- tResponse) I ActionErrors errors = new ActionErrors( ) ; DynaActionForm form = ( DynaAction- Form) actionForm; String sysuserid = ( String ) form. get ( " sysuserid" ) ; String password = ( String ) form. get ( " password" ) ; //至此用户信息被提取,可用于后续业务逻辑处理。 } } 本实现中用户视图login.jsp的内容未列出。 作者分别使用ActionForm和DynaForms对上 述登录部分进行编程,完成调试后进行对比,使用 AcionForm编译后的LoginForm.class文件大小为1.28k字节,源文件也有766字节,这还是在未编写其Validate和reset方法代码的情况下得到的。而采用DynaForms这部分都是动态生成的,在其它代码基本相同的情况下,上述代码就是节省的。在某市城管办网络办公系统开发中,通过使用Dy— naForms,不仅大量地减少了编写的代码量,也减轻了调试的工作量,有效地提高开发效率,在维护管理时也更加方便。 4 结束语 采用DynaForms处理Web应用中的简单表单交互业务,可以大大减少程序代码,提高编程效率,减少调试和维护工作量。 参考文献 [1] 郭梅,江红.Struts在实现MVC架构中的应用[J].计算机与现代化.2004.1.106~108. 2] The Struts Users Guide [EB/OL]. http://struts, apache. org/userGuide/index, html. [3] 张娅,杜友福,张南平.用Struts建立MVC模式的Web应用[J].微机发展,2003,13(12),105 107. [4] James M. Turner. Succeeding With Struts: Dyanforms[EB/OL]. http://www, developer, corn/java/web/article, php/2214681. [5] James Turner, Kevin Bedell. Struts kick start[M]. Sams; Bk&CD - Rom edition, 2002.
投诉建议

提交

查看更多评论
其他资讯

查看更多

助力企业恢复“战斗状态”:MyMRO我的万物集·固安捷升级开工场景方案

车规MOSFET技术确保功率开关管的可靠性和强电流处理能力

未来十年, 化工企业应如何提高资源效率及减少运营中的碳足迹?

2023年制造业“开门红”,抢滩大湾区市场锁定DMP工博会

2023钢铁展洽会4月全新起航 将在日照触发更多商机