第8章MVC设计模式_第1页
第8章MVC设计模式_第2页
第8章MVC设计模式_第3页
第8章MVC设计模式_第4页
第8章MVC设计模式_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

第8章MVC模式目录8.1MVC模式8.2Struts28.3配置详解8.1MVC模式什么是模式?23种设计模式体系结构(架构)模式MVC模式模型-视图-控制器(MVC)是80年代Smalltalk-80出现的一种软件设计模式,现在已经被广泛的使用MVC是一种软件设计模式,不仅仅应用于WEB。在日常生活中处处可以找到类似于MVC的例子。在WEB应用上,J2EE平台最先应用MVC设计模式,并成为一个事实上的标准。数据与显示分离什么是MVC设计模式

1、模型(Model)

业务逻辑层。用于封装业务逻辑和数据模型。

2、视图(View)

表示层。就是与用户实现交互的界面,通常实现数据的输入和输出功能。

3、控制器(controller)

控制层。起到控制整个业务流程的作用,实现View层跟Model层的协同工作。

模型

模型(Model):就是业务流程/状态的处理以及数据模型的制定。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。模型的设计可以说是MVC最主要的核心。Struts2Struts2MVC模式的信息管理系统8.2View组件——视图层作用:实现业务数据的输入和显示,外部对象与系统进行交互和通信要通过视图层。一般视图就是为操作者显示的窗口界面,操作者通过该窗口来进行系统管理。职责:与操作者进行交互功能:

(1)提供数据输入的机制。如表单。

(2)显示业务数据。

1)列表方式

2)详细方式Model组件作用:用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。模型有对数据直接访问的权利,模型不依赖与视图和控制也就是他不关心如何被显示和被操作。职责:业务处理。主要功能:

(1)表达业务数据:表达存储在数据库中的业务数据。(2)业务数据持久化:将业务数据保存到数据库中。(3)业务处理方法:管理系统的核心功能是模拟业务代理,代替人工的处理模式,实现信息管理的高效率和低成本。8.3Control组件职责:协调View和Mode组件,控制整个系统的流程,接收客户端请求,并调用Model组件对其作出响应。主要功能:(1)取得View提交的数据(2)验证View数据的合法性(形式和业务)(3)View数据的类型转换(4)调用Model业务处理方法(5)保存Model业务数据给View组件(6)导航到指定View组件。JavaEE框架下的MVCJavaEE平台MVC实现View:JSP+EL+JSTLControl:ServletModel:JavaBean8.5MVC模式分层结构MVC模式分层结构UIO:视图层CO:控制层BO:业务层实现业务逻辑PO/DAO:持久层向数据库实现数据持久化操作DTO/VO:传输层在各层之间传递数据时,依赖传递层实现,需要实现序列化接口Serializable每层的设计思想面向接口设计原则,通过接口向上层暴露业务方法,每层由接口,接口实现类和工厂类组成。详细的MVC分层架构View设计HTMLJSPELJSTL控制类设计控制类由Servlet充当,具有Servlet中常见方法。Action控制类的设计

类命名:处理功能名称+Action

包名:域名.项目名.模块名.action如:com.city.oa.action.LoginAction,

VO/DTO类设计用于封装表的记录值,每个表1个类。类对应表,对象对应记录,属性对象字段。使用关联关系表达类之间的对应关系,与表的外键对应。每个属性一对get/Set方法。包:jectname.value类名:实体类名+”Value”

如:com.city.oa.value.UserValuecom.city.oa.value.POValuecom.city.oa.value.EmployeeValueBO类(BusinessObject)BO接口:定义BO业务功能命名:OOA实体名称包名:ject.business

如:com.dashang.erp.business.UserBO实现类:实现BO接口的功能命名:OOA实体类Impl

包:ject.business.impl

如:com.dashang.erp.business.impl.UserImplBO工厂:命名:BusinessFactory

包:ject.business.factoryDAO类(DataAccessObject)设计DAO接口:定义CRUD方法命名:OOA实体类名称+DAO

包:ject.daoDAO实现类命名:OOA实体类+DAOImpl

包:ject.dao.impl

如:com.dashang.erp.dao.impl.UserDAOImplDAO工厂命名:DAOFactory

包:ject.dao.factoryMVC模式Model1Model2MVC缺点视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。MVC的几种实现StrutsSpringMVCSpringGuiceHibernateIBatis几种常见的模式

J2EE?SOA?EAI?基于组件基于插件LayersFaçade…人气技术框架市场占有率

没有继承Struts1的血统,而是继承WebWork的血统

即:Struts2是在WebWork2的基础上开发的

8.2strutsStruts2Struts1WebWorkStruts1的MVC结构1struts1简介2Webwork简介Webwork是由OpenSymphony组织开发的基于MVC架构模式的J2EEWeb框架。从2.0版本开始拆分为XWork和WebWorkXwork完全脱离Web层,提供了很多核心功能:前端拦截器(interceptor),表单验证,数据类型转换,强大的表达式语言(OGNL),IoC(控制反转)容器等。WebWork2建立在Xwork之上,处理HTTP的请求和响应。WebWork解决了Struts1的ActionForm问题,可以使用普通的JavaBean对象,甚至Action本身来接受表单数据。其Action也没有和ServletAPI耦合在一起,单元测试更容易。

3、struts2架构剖析

体系结构

调用流程请求首先通过Filterchain,Filter主要包括ActionContextCleanUp,它主要清理当前线程的ActionContext和Dispatcher;FilterDispatcher主要通过AcionMapper来决定需要调用哪个Action。

ActionMapper取得了ActionMapping后,在Dispatcher的serviceAction方法里创建ActionProxy,ActionProxy创建ActionInvocation,然后ActionInvocation调用Interceptors,执行Action本身,创建Result并返回,当然,如果要在返回之前做些什么,可以实现PreResultListener。4struts2调用流程当Servlet容器接收到一个请求后,将请求交给web.xml文件中配置的过滤器FilterDispatcher,调用它的doFilter()方法。FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。ActionProxy根据ActionMapping和ConfigurationManager找到需要调用的Action类ActionProxy创建一个ActionInvocation的实例ActionInvocation调用真正的Action,当然这涉及到相关拦截器的调用Action执行完毕,ActionInvocation创建Result并返回。8.3配置详解配置文件包的配置名称空间的配置拦截器配置action配置result配置

1配置文件web.xml:配置核心控制器FilterDispatcher,对struts框架进行初始化。perties:struts2的属性配置文件struts.xml:struts2的核心配置文件,主要配置和管理开发人员编写的action。struts-default.xml:struts2的基础配置文件,会被自动的包含到struts.xml中struts-plugin.xml:就是由插件使用的配置文件,如果不开发插件的话,就无需编写这个配置文件2包的配置package元素有一个必需的属性name,指定包的名字,包的名字必需是唯一的package元素的extends属性是可选的,允许一个或多个先前定义的包pageckage元素的abstract属性是可选的,设为true,表明是抽象的。抽象的包不能有action定义,只能被其他包继承。3名称空间的配置struts2框架使用action的名字和它所在的空间来标识一个action。所以多个包可以映射到相同的名称空间,不同的名称空间中也可以使用同名的action。struts2会将一个请求分为namespace和action名字两部分,如果从struts.xml中没有找到namespace/action命名对,就会在默认的名称空间(“”)中搜索相应的action名。4拦截器配置如果你在一个action中定义了其它的拦截器引用,那么这个action将不再使用默认的拦截器。拦截器按照它们在拦截器栈中定义的顺序执行。拦截器都是在包中定义的,一个包中不能引用其他包中定义的拦截器,除非这两个包是继承关系。5action配置action取名时,默认在名字中是不能出现”/”的,要出现需在struts.xml中指定<constantname="struts.enable.SlashesInActionNames"value=“true"/>

action取名时,名字中尽量不要使用.和-如:create.user,my-action,否则会出现一些莫名奇妙的问题。Struts2根据action元素的method属性查找方法时有两种途径:

(1)查找与method属性值完全一致的方法

(2)查找doMethod()形式的方法5action配置可以使用default-action-ref元素来声明默认的action。<packagename=""namespace="/"extends="struts-default">

<default-action-refname="errors"></default-action-ref>

<actionname="errors"><result>/errors.jsp</result></action>

</package>每一个包中都可以有它自己默认的action,但每一个名称空间应该只有一个。如果相同名称空间的多个包中都申明了默认action,那么哪一个action才是默认的将无法保证。

5action配置动态方法调用:

(1).语法格式:actionName!methodName(2).会带来安全隐患,恶意用户会利用这一特性来执行一些敏感方法。所以一般禁止使用。struts.xml文件中配置如下:

<constantname="struts.enable.DynamicMethodInvocation"value="false"/>

当只需要一个请求转发时,可做如下操作:action配置中将class属性省略,此时默认使用ActionSupport类。<actionname=“index”><result>/index.jsp</result></action>5act

温馨提示

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

评论

0/150

提交评论