mvc设计模式介绍及实例.docx_第1页
mvc设计模式介绍及实例.docx_第2页
mvc设计模式介绍及实例.docx_第3页
mvc设计模式介绍及实例.docx_第4页
mvc设计模式介绍及实例.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MVC设计模式1.1 MVC设计模式介绍1.1.1 MVC模型MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用就被分成三个模块层模型层、视图层、控制层3,如图1-1所示:模型封装应用程序状态相应状态查询应用程序功能通知视图改变视图解释模型模型更新请求发送用户输入给控制器允许控制器选择视图控制器定义应用程序行为用户动作映射成模型更新选择响应的视图状态查询通知改变状态改变视图选择用户请求图1-1MVC的基本分层视图(View):代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML、XML和Applet。随着应用的复杂性和规模性,界面的处理也变得具有挑战性。一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理。模型(Model):是应用程序的主体部分,表示业务数据和业务逻辑。它包含应用程序的核心功能,封装系统的状态。一个模型能为多个视图提供数据,由于同一个模型可以被多个视图重用,所以提高了应用的可重用性。控制(Controller)可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层并不做任何的数据处理,只把用户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给用户。一个模型可能对应多个视图,一个视图可能对应多个模型。1.1.2 Model1和Model2虽然MVC设计模式很早就出现了,但在Web应用的开发中引入MVC却是步履维艰。这是因为Web应用系统的开发具有一些鲜明的特点。其一是客户机与服务器间的无状态连接。另一个特点是,传统的设计方式即页面到页面(page to page)方式将数据显示、业务逻辑、流程控制和数据持久性处理等模块强耦合在一个代码模块中,采用这种模型在开发中容易产生很多问题,而且会随着应用程序规模的不断扩大而加剧系统开发、维护的复杂程度。为了解决以上问题,Sun公司先后制定了两种规范,称为JSP Model1和JSP Model2。虽然Model1在 一定程度上实现了MVC,但是它的运用并不理想:直到基于J2EE的JSP Model2问世才得以改观。图1-2 Model1的结构图数据库系统响应(View)Java Beans(Model)用户提交浏览器Web容器在JSP Model1的体系中,如图所示,JSP页面负责响应用户请求并将处理结果返回用户。JSP既要负责业务流程控制,又要负责提供表示层数据,同时充当视图和控制器,未能实现这两个模块之间的独立和分离。尽管Model1体系十分适合简单应用的需要,它却不适合开发复杂的大型应用程序。不加选择地随意运用Model1, 会导致JSP页内嵌入大量地Java代码,大量的嵌入式代码会使整个页面程序变得异常复杂,会给以后的维护带来困难4。图2-3 Model2的结构图数据库系统响应(View)Web 容器用户提交浏览器Servlet(Controller)重定向InstantiatesJava Beans(Model)JSP Model2体系结构(如图2-3所示)是一种联合使用JSP和Servlet来提供动态内容服务的方法。它吸取了JSP和Servlet两种技术各自的突出优点,用JSP生成表示层的内容,让Servlet完成深层次的处理任务。Servlet充当控制器的角色,负责处理用户请求,创建JSP页需要使用的JavaBean对象,根据用户请求选择合适的JSP页返回给用户5。在JSP页内没有处理逻辑,它仅负责检索原先由Servlet创建的JavaBean对象,从Servlet中提取动态内容插入到静态模块。这是一种有突破性的软件设计方法,它己清晰地分离了表达和内容,明确了角色定义以及开发者与网页设计者的分工。事实上,项目越复杂,使用Model2设计越方便。基于MVC设计模式的Model2 应用框架,完美地解决Model1应用中出现的问题。它不仅实现了系统业务逻辑功能模块、显示模块和数据持久层处理模块的分离,同时还提高了应用系统的可维护性、可扩展性、可移植性以及组件的可复用性6。1.2 MVC实现-Struts体系结构1.2.1 Struts概述事件HTTP请求分派客户端(浏览器)控制器(ActionServlet)业务逻辑(Action)模型(应用状态)视图(JSP)Struts-config.xmlGet更新Forward图2-4 Struts的工作原理图Struts项目最早是由Craig R. McClanahan于2000年5月发布的。它为Java社会提供了一个标准的MVC框架。Struts是基于当前的一些相关标准的开发技术(servlet,xml等)基础之上,提供了一个开发框架的开放源码项目,由于开发Web应用的复杂度随着系统的复杂度的要求越来越复杂。特别是在代码重用、代码移植等问题上出现了许多重复开发、维护困难等。Struts作为一个开放原代码的应用框架,在最近几年得到了飞速的发展,在JSP Web应用开发中应用得非常广泛,Struts已经逐渐成长为一个稳定、成熟的框架,并且占有了MVC框架中最大的市场份额。Struts是MVC的一种实现,特别它继承了Model2的各项特性,并根据J2EE的特点,做了相应的变化与扩展7:视图View:Struts应用中的View部分是通过JSP技术实现的。Struts提供了自定义的标记库可以使用,通过这些自定义标记可以非常好地和系统的Model部分交互,通过使用这些自定义标记创建JSP表单,可以实现和Model部分中的ActionForm 的映射一起完成对用户数据的封装,同时这些自定义标记还提供了像模板定制等多种显示功能。控制器Controller:控制器是servlet实现的一个命令模式,它的作用是从客户端接受请求根据这个请求属性选择执行相应的业务逻辑,然后把响应结果送回到客户端。在Struts中Controller功能由ActionServlet和ActionMapping对象构成:其中ActionServlet用以接受客户端发来的请求。根据这个请求,控制器将请求分派给某个具体的Action类,由struts-config.xml来确定调用哪个类, struts-config.xml的配置信息就被转换成ActionMapping对象,然后ActionServlet将ActionMapping传递给Action类。模型Model:它主要是以JavaBean的形式存在,用于表示系统的状态,有时候也包括业务逻辑。Struts为Model部分提供了Action和ActionForm对象:Action处理器对象封装了具体的业务逻辑并且把响应结果分派到View组件,Action类主要用于控制应用程序的流程而不是控制应用程序的逻辑。ActionForm组件对象定义了属性,以表示客户端表单数据,ActionForm是一个抽象类在应用的时候都是要从它派生子类对象,ActionServlet将参数化的类传递给ActionForm,输入表单的数据能够直接从请求流中提出来并赋值到ActionForm类属性中,没有复杂繁琐的request.getParameter()调用。通过ActionForm组件对象实现了对View 和Model 之间交互的支持8。1.2.2 Struts核心组件Struts的核心组件包括组成:ActionServlet、ActionMapping、Action Bean、ActionForm Bean、Struts标记库。ActionServlet:控制器组件是由org.apache.struts.action.ActionServlet类实现的,这个类是javax.servlet.http.HttpServlet类的扩展,它是这一框架的核心。我们可以把它看作是Struts结构的WEB应用的调度程序,调度的依据由ActionMapping对象提供。它的基本功能是截获用户的Http请求,并将用户请求封装到ActionForm中去进行数据校验,校验成功后,将用户数据ActionForm传送到相应的用户Action中进行业务逻辑处理,并根据处理结果返回个ActionForword对象,此对象连接到相应的(View) jsp页面。ActionMapping:ActionMapping对象是Action映射对象,它帮助控制器进行框架内部的流程控制。ActionServlet是控制器任务的具体执行者,ActionMapping则为ActionServlet指明了具体执行路线,是Struts体系结构的具体体现者。Struts-config.xml是一组响应用户请求的ActionMapping对象集合,每一个用户请求都有一个ActionMapping对象与之相对应。它需要应用开发者配置与用户请求相对应的ActionForm数据属性、是否需要进行数据校验和回写、Action数据处理、输入页面、以及处理完成后可能跳转的页面等一组属性信息,这组属性信息构成一个ActionMapping对象,它决定了该项请求的处理过程11。ActionForm:ActionForm类是org.apache.struts.action.ActionForm扩展类,程序开发人员为每个表单都创建的一个ActionForm Bean,以维护Web应用程序的会话状态,但一个ActionForm可以对应多个表单,具有很好的重用性。它要求为表单中出现的每个字段定义一个属性,是视图与模型进行数据交换的桥梁。使用它的目的是为了存储用户在相关表单中输入的数据,在数据校验通过后,由控制器传送给相应的Action方法进行业务逻辑操作,同时在数据校验失败后,将同一网页进行再生,并提供一组错误信息,这样就可以让用户只修改错误的录入数据。Action:所有Action类都是org.apache.struts.action.Action扩展类,是业务逻辑的一个包装,它是Struts应用程序开发的核心,用途是接收控制器传送的ActionForm类用户请求数据,根据请求数据处理业务逻辑,并根据处理结果指明应用的流向,Action类应该是控制应用程序的流程,而不是控制应用程序的业务逻辑。通常将业务逻辑放在JavaBean或EJB中处理,这样就可以为我们的WEB应用提供更大的灵活性和可重用性。Struts标记库:JSP视图组件所使用struts标记库由四类标记组成,它们分别是:(1) Bean标记:用来在JSP页面中管理bean。(2) 逻辑标记:用来管理根据条件生成的输出文本和其它一些用来控制显示的信息。(3) HTML标记:用来生成动态HTML用户界面和窗体。(4) 模板标记:使用动态模板构造通用格式的页面模板,实现页面的继承性和可重用性

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论