版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 抱团出游安全协议书
- 天津市北辰区第三学区2024-2025学年八年级上学期11月期中数学试卷(含答案)
- 山东省枣庄市台儿庄区2024-2025学年九年级上学期期中考试物理试题
- 辽宁省鞍山市海城市西部集团2024-2025学年七年级上学期11月期中英语试题(含答案)
- 河南省焦作市中站区2024-2025学年七年级上学期期中生物学试题(含答案)
- 《双组分纺粘法非织造布》
- 安徽省安庆市外国语学校2024-2025学年九年级上学期11月期中考试化学试题(含答案)
- 离子风枪行业相关投资计划提议
- 蓝耳病初期的症状
- 高分子合成材料行业相关投资计划提议
- 情感表达 课件 2024-2025学年人教版(2024)初中美术七年级上册
- 印刷包装岗位招聘笔试题与参考答案(某大型国企)
- 2024届湖北省武汉市高三下学期4月调研(二模)英语 试题
- 变电站新建工程三通一平场地平整施工方案
- 结婚函调报告表
- 黑龙江省哈尔滨市第九中学校2023-2024学年高三上学期期中数学试题含答案解析
- 陪护公司运营方案
- 预防高处坠落安全监理细则
- 新能源汽车案例之吉利EV450无法上电的故障诊断与排除
- YS∕T 694.1-2017 变形铝及铝合金单位产品能源消耗限额 第1部分:铸造锭
- 人教版化学九上学案:6.2 二氧化碳制取的研究
评论
0/150
提交评论