已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于MVC设计模式的Struts框架研究 陈星王宁吴特杨东 (中国矿业大学北京机电与信息工程学院,中国北京100083) 【摘要】一个好的设计模式能够有效地建立系统结构,降低系统复杂度。模型-视图-控制器(MVC)就是一个框架级的设计模式,它可以分离数据访问和数据表现,让开发人员可以开发一个可伸缩性强的、便于扩展的控制器,来维护整个流程。本文在介绍了MVC模式的发展、概念以及实现的基础上,详细介绍了MVC模式在Struts框架中的具体应用。 关键词mvc模式;struts框架;应用研究 0引言 MVC模式最早由TrygveReenskaug在1978年提出,是施乐帕罗奥多研究中心(XeroxPARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式。并且由于其鲜明特点,广泛受到程序开发人员的青睐。使用MVC模式的目的是实现一种动态的程式设计,使之简化对后续程序的修改和扩展,并且可以重复利用程序的某一部分。而基于MVC模式的Struts框架,可以将问题进行划分,成为一个个的小模块,这样使得问题更容易得到解决,系统结构更加清晰,另外当问题发生变化或者当技术有所改变时,我们可以进行代码重用,这能够极大的提高开发人员的开发效率。所以基于MVC模式的Struts框架非常适合开发大型的复杂系统。本文详细介绍了MVC模式的基本思想,以及Struts框架的体系结构。 1MVC模式概述 1.1MVC架构 MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层模型层、视图层、控制层。模型(Model):就是业务流程/状态的处理以及业务规则的制定。视图(View)代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML、XML和Applet。随着应用的复杂性和规模性,界面的处理也变得具有挑战性。控制(Controller)可以理解为从用户接收请求,将模型与视图匹配在一起,完成用户的请求。这实际上是一种模型的变化-传播机制。模型、视图、控制器三者之间的关系和各自的主要功能,如图1所示。 1.2MVC模式的优势与不足 MVC能够被众多的web应用系统作为主流框架,主要原因在于它具有巨大而众多的优势,这主要体现在下面几个方面。 (1)MVC可以让一个正在运行着的模型,同时建立和使用多个视图,并且,MVC中具有一种特殊的机制,那就是内置数据监听机制,依靠观察者模式,这种机制可以监听模型层数据的更新,并且能够同步将视图层的数据进行更新,以此来实现同步响应。 (2)在视图和控制器之间,是相互透明和独立的。这种特点,可以让开发人员根据需要来动态的定制控制器和视图之间的关联关系,以此开发相对复杂的应用系统。同样因为视图和模型之间是相互独立、分别存在的,所以如果在做跨平台的系统移植时,把一个模型单独移植到新的平台进行工作就会相对比较简单。我们仅仅需要在新的平台上将视图重新设计,并且重新运行控制器。 (3)由于MVC是一种思想,是一种潜在框架结构,因此我们可以在此模型的基础上建立客制化的应用框架,以此来满足客户的个性化需求。 虽然MVC具有很多的优点,但是也有一些不足的地方,例如,使得系统结构更加复杂,从而增加了实现的难度。此外,MVC适用于相对规模比较大的系统,如果系统实现的功能结构相对比较简单,那么如果严格遵循MVC模式,反而会使得系统结构复杂度增加,并且还有可能由于进行跟多的更新操作,导致系统运行效率降低。另外,视图与控制器之间的耦合性过强。虽然在理论上,视图与控制器之间是相互分离的,但是在实际的应用中,视图和控制器之间的耦合性还是比较强的。如果视图中没有控制器的话,那么他的应用将会非常有限,反之亦然。这种强耦合阻碍了组件的独立复用。还有,视图通过模型界面访问数据的效率很低,这是由于在模型层中提供的接口是不相同的,因此视图为了获得足够多的显示数据,往往需要进行多次调用,这种方式访问数据的效率比较低,并且对系统操作性能也有一定的影响。 综上所述,通过对MVC模式的分析,可以看出MVC模式的作用是很明显的,并且在大的系统结构中作用会更加明显。 2MVC模式基本实现方法 实现MVC模式的方法不止一种,例如使用Struts或jsf等MVC模式的框架,本身就是一个实现。下面主要来介绍一种简单的基本实现方法。 2.1Model的实现 在Model的实现过程中,最关键的地方在于定义一个具有存储多个数据更新的用的监听对象向量。并且根据这个向量可以编写出下面的两个函数,以此来分别实现添加数据业务时监听对象的添加和发生更新时能及时把消息发送给所有的监听对象: /当注册模型发生修改时需通知的对象 publicvoidaddChangeListener(Viewcv)throwsException /*1添加cv到变化监听队列 changeListeners.add(cv); /触发模型变化事件 privatevoidfireModelChangeEvent(Objectf) ViewV; for(inti=0;i try /将变化通知队列中的每个视图 System.ou.tprintln(dMode:lfireModelChangeEventloopd+i); v=(View)changeListeners.get(i); v.handleChange(f); catch(Exceptione) Systemoutprintln(etoString(); 2.2View的实现 在视图的实现过程中,关键的地方有三点。第一点是我们在进行视图构造函数时,需要将视图注册到指定的模型对象中去(modeladdChangeListener(view);第二点需要做的就是定义一个能够存放和它所关联的控制器对象的向量,并且我们需要根据这个向量的对象,定义增加动作监听者的注册方法(publicvoidaddUserGestureListener(Controllerb);最后,我们还得需要为视图编写一个能够依靠传入对象的类型来显示不同的界面的方法。通过上面所说的三个关键点,视图就能够实现接收模型更新的通知、发送动作到控制器,并且能够接受控制器对显示界面的控制。 2.3Controller的实现 相对于模型的实现和视图的实现,控制器的实现要简单很多。因为对于控制器来说,只需定义一个模型对象和视图对象就能能实现。模型对象是为了方便在函数中进行调用其业务的行为,视图对象是为了方便于将控制器的动作注册到视图中去,使他们可以成为该视图的动作接收者。 3基于MVC模式的Struts框架 所谓的基于MVC模式的STRUTS框架,实际上就是把JavaServlet、JSP、自定义标签(TagLib)、JavaBeans、XML和信息资源(ResourceBundles)整合到一个统一的框架中,由此组成了一个可复用的MVC设计。Struts框架本身带有自己的控制器,同时还整合了其它的一些能够实现模型层和视图层的技术,而且,Struts框架提供了许多可供扩展和定制的地方。同时,Struts提供自定义标记库,通过这些自定义标记可以顺利完成和系统的Model部分交互,通过使用这些自定义标记创建的JSP表单,可以实现和Model部分中的ActionForm的映射,以此来完成对用户数据的封装。图2显示了Struts的工作流程。 (1)Struts框架总控制器(ActionServlet),作用是用来完成所有初始化工作。当启动总控制器之后,首先会读取Struts-config.xml的配置信息,目的是为相应的对象进行不同的Struts模块初始化。当在Web容器启动时,初始化动作也会自动完成,总控制器完成初始化动作后,将通过URL匹配映射截获所有以.do结尾的URL请求。 (2)用户向Web应用程序器提交一个请求的方法有两种,一种是提交表单,另一种是调用URL,而用户请求的数据会通过协议上传给Web服务器。 (3)控制器接收请求,然后控制器首先会通过ActionConfig找出对应该请求的Action子类,如果没有找到对应的Action,控制器直接会把请求转发给JSP或者静态页面。如果有对应的Action,并且这个Action有一个相应的ActionForm,ActionForm首先会被控制器实例化,然后会使用请求的数据来填充其属性,然后保存在ServletContext中,这样就可以被其它Action对象或者JSP调用。 (4)控制器根据配置信息将请求切换到具体的ActionFormBean也一并传给这个Action的execute()方法。 (5)Action一般其中只包含一个execute()方法,它的作用是负责执行相应的业务逻辑,然后会返回一个ActionForward对象,控制器会通过这个ActionForward对象来进行转发工作。 (6)根据业务处理时产生的不同结果,Action会返回一个目标相应对象给总控制而这个目标相应对象对应的是一个具体的JSP页面或者另外一个Action。 (7)总控制器根据业务功能Action返回的目标响应对象,将请求转换到这个目标响应对象中,通常来说,它是一个具体的JSP页面。 ()目标响应对象(JSP)将结果页面展现给用户。 4结论 综上所述,MVC模式已经被广泛的应用于软件开发之中,它可以通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。而使用基于MVC模式的Struts框架极大的提高了控制层的灵活性,增加了代码的可重用性。并且由基于MVC模式的Struts框架构建的复杂系统可以分离数据访问和数据表现,让开发人员可以开发一个可伸缩性强、便于扩展的控制器,来维护整个流程。因此在结构复杂的系统中基于MVC模式的Struts框架有着很大的优势和发展前景。 参考文献 美IvorHortonJava2入门经典JDK5M潘晓雷,于浚泊,王丹,等,译北京:机械工业出版社,xx:1-1058. 赖英旭,刘增辉,李毛毛.MVC模式在B/S系统开发中的应用研究J.微计算机信息,xx,22(10-3):62-64. 孙卫琴精通Struts:基于MVC的JavaWeb设计与开发M北京:电子工业出版社,xx,8:7-35. 菜剑,景楠JavaWeb应用开发:J2EE和TomcatM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 南充市高坪区2025年面向“三支一扶”人员考核招聘卫生事业单位工作人员历年真题汇编及答案解析(夺冠)
- 2025年阜阳市肿瘤医院(阜阳市颍东区人民医院)招聘劳务派遣人员34名备考公基题库带答案解析
- 2025贵州高速公路集团有限公司第二批次招聘6人(第二轮)历年真题汇编附答案解析
- 2026年初级经济师之初级经济师财政税收考试题库300道附答案(轻巧夺冠)
- 2026中国储备粮管理集团有限公司湖北分公司招聘参考题库附答案解析
- 浙江银行招聘-金华银行金东支行招聘5人笔试模拟试卷附答案解析
- 2025海南三亚市卫生健康委员会招聘下属事业单位工作人员(第8号)笔试模拟试卷附答案解析
- 2025河南安阳林州红旗渠医院招聘临床医生5人历年真题汇编附答案解析
- 2025年天津中煤进出口有限公司招聘第五批电力人才55名参考题库带答案解析
- 2025广州银行人才招聘6人历年真题库带答案解析
- 2025年上海市春考语文真题作文7篇范文:我们的劳动使大地改变了模样
- 个人求职简历模版(三页)带封面(可编辑)含实践经历下载
- 河北开放大学2025年《大众传播学》形考作业1-5答案
- 招投标开标评标相关表格及应用范例
- 产科新技术球囊放置临床应用汇报
- 冬天双壁波纹管施工方案
- 高中化学学习方法分享
- (2025年)一级建筑师继续教育试题及答案
- 2025水果供货合同范本
- cnas文件管理培训
- 2025年安徽省蚌埠市辅警人员招聘考试题库及答案
评论
0/150
提交评论