- 浏览: 123266 次
- 性别:
- 来自: 成都
文章分类
MVC设计模式概述
MVC是Model—View—Controler的简称。即模型—视图—控制器。最近几年被业界推荐为SUN公司的J2EE平台的设计模式。受到越来越多的WEB开发者的欢迎。MVC是一种设计模式,它强制性的把应用程序的输入、处理和输出分开。MVC中的模型、视图、控制器它们分别担负着不同的任务。
视图:视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用户的输入。视图不进行任何业务逻辑处理。
模型:模型表示业务数据和业务处理。相当于JavaBean。一个模型能为多个视图提供数据。这提高了应用程序的重用性
控制器:当用户单击Web页面中的提交按钮时,控制器接受请求并调用相应的模型去处理请求。然后根据处理的结果调用相应的视图来显示处理的结果。
MVC的处理过程:首先控制器接受用户的请求,调用相应的模型来进行业务处理,并返回数据给控制器。控制器调用相应的视图来显示处理的结果。并通过视图呈现给用户。可进行以下类比:凶杀案发生了(用户点击提交按钮)视图--->公安部门进行刑事侦察,找出主凶(控制器)---->交给法院案件审理判刑(模型)---->对主凶执行伏法(视图)。
MVC的优点
1:MVC设计模式强制性的把用户的输入、业务逻辑的处理、数据结果的显示分开。提高了Web应用程序的可维护性。比如:改动模型的业务逻辑代码不会影响到视图和控制器。由于MVC三个模块相当于独立,改变 任何一个不会影响其它两个从而实现的程序的松耦合。
2:由于多个视图可以共享同一个模型,所以大大提高了Web应用程序的重用性。
3:MVC设计模式可以与xml配置文件有机的结合在一起。在改变三个模块间的工作方式,不需要修改源代码,直接修改配置文件就行了。从而提高了Web应用程序的灵活性。
struts的体系结构
1:用来实现mvc设计模式的框架有很多,比如:webwork,struts等。struts是在j2ee中用来实现mvc模式的主流 框架。后来webwork与struts合并成为struts2.0版本。也即是最高版本。struts的体系结构的实现如图:
ActionServlet是一个FrontController,是struts的核心控制器。它是一个标准的Servlet,继承自HttpServlet类,该控制器负责拦截所有Http请求,然后把拦截的用户请求根据用户需要,它将request转发给 RequestProcessor来处理, ActionMapping是ActionConfig的子类,实质上是对struts-config.xml的一个映射,从中可以取得所有的配置信息 ,转发给相应的Action类进行处理。
RequestProcessor根据提交过来的url,如*.do,从ActionMapping 中得到相应的ActionForn和Action。然后将request的参数对应到ActionForm中,进行form验证。如果验证通过则调用 Action的execute()方法来执行Action,最终返回ActionFoward。
ActionFoward是对mapping中一个foward的包装,对应于一个url 。
ActionForm使用了ViewHelper模式,是对HTML中form的一个封装。其中包含有validate方法,用于验证form数据的有 效性。ActionForm是一个符合JavaBean规范的类,所有的属性都应满足get和set对应。对于一些复杂的系统,还可以采用 DynaActionForm来构造动态的Form,即通过预制参数来生成Form。这样可以更灵活的扩展程序。
ActionErrors是对错误信息的包装,一旦在执行action或者form.validate中出现异常,即可产生一个ActionError并 最终加入到ActionErrors。在Form验证的过程中,如果有Error发生,则会将页面重新导向至输入页,并提示错误。
Action是用于执行业务逻辑的RequsestHandler。这个类通常由用户来提供,该控制器负责接收来自于ActionServlet的请求,并根据该请求调模式的业务逻辑方法处理请求,并将处理的结果返回给jsp页面显示。每个Action都只建立一个instance。Action不是线程安全的,所以 不应该在Action中访问特定资源。一般来说,应改使用 Business Delegate 模式来对Business tier进行访问以解除耦合。
Struts提供了多种Action供选择使用。普通的Action只能通过调用execute执行一项任务,而DispatchAction可以根据配置参数执行,而不是仅进入execute()函数,这样可以执行多种任务。如insert, update等。LookupDispatchAction可以根据提交表单按钮的名称来执行函数。
struts组件的MVC实现
View部分:由jsp页面实现,并且struts提供了丰富的标签库,通过使用struts标签库可以快速实现view部分,当然也可以不用struts标签库,而用普通的jsp页面
Controler:有两个控制器。
A:核心控制器(ActionSerlvet,只有一个,由struts自动创建)
B:业务逻辑控制器(Action,有多个,由用户自己创建)。业务逻辑控制器负责处理用户请求,它本身不具备处理能力,而是调用Model来完成处理。
Model部分:由ActionForm和JavaBean组成。其中ActionFrom用于封装用户在jsp页面中所填写的数据。所有的用户填写的数据由系统自动封装成ActionFrom对像。该对像被ActionServlet转发给ction。Action根据从ActionFrom中取得用户所填写的数据,交给JavaBean进行处理。ActionFrom实际上也是一个普通的JavaBean。它对应于jsp页面中各个输入数据项 。
struts工作流程
1.客户端填写完jsp页面的数据之后单击提交按钮向服务器发出http请求,客户端所有的请求都被 ActionSerlvet拦截。
2.ActionServlet根据用户的请求在struts-conifg.xml配置文件中查找与之对应的Action,同时把用户的数据填 充给对应的ActionForm,然后把ActionForm一起分发给Action进行处理。
3.Action会自动调用excute方法,在该方法里面Action将从ActionForm里面获取用户填写的数据,并调用模型(javaBean)进行相应的处理,然后把处理的结果显示在其它的视图(jsp页面)
struts-config.xml:struts的配置文件.
上面讲到每一个用户的请求是通过ActionSerlvet来处理和转发的那么ActionSerlvet如何决定把用户请求转发给那一个Action呢?这就需要一个配置文件来保存一个struts中所有的Action。而struts-config.xml这个配置文件就是用来实现以上配置的 。
配置ActionSerlvet拦截用户请求
1:ActionSerlvet是核心控制器,是由struts框架自动产生的,它像过滤器一样会拦截所有用户的请求。但是这个过滤器必须要在web.xml文件中进行配置才能够发挥它的作用。幸运的是这些配置struts已经帮我们自动配置好,但是有必要进行了解.
<servlet-name>action</servlet-name> --ActionServlet的名字对应实例对应的类
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
........
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern> --定义ActionServlet过滤的通配符。必须要以do结尾。当然可以修改
</servlet-mapping>
配置ActionForm接受用户输入的数据
1)ActionForm实际上就是一个非常简单的javaBean。在它里面有许多的get,set方法,它的目的就是为了封装 从用户输入的数据。因此ActionForm通常与表单页面对应,每个表单对应一个ActionForm。表单中的输入项对应ActionForm的一个属性.
2)Struts要求ActionForm必须要继承自org.apache.struts.action.ActionForm基类。
3)必须保证ActionForm中的属性名一定要与表单中元素名一致
4)所有的ActionForm必须要在Struts-config.xml中进行配置。配置节如下:
<form-beans>
<form-bean name="loginActionForm" type="org.chen.struts.loginForm" />
<form-bean name="shopActionForm" type="org.chen.struts.loginForm" />
........
<form-bean name="shopActionForm" type="org.chen.struts.loginForm" />
</form-beans>
5)一个ActionForm必须至少指定两项。
name:该项用于标识ActionForm的Id,以便于传递给Action进行使用
type:ActionForm的实现类
6)在eclipse中添加一个ActionForm的步骤如下:
A:右击--->new--->other--->myeclipse--->webstruts-->struts1.1 form
B:在弹出的对话框中
name中输入ActionForm的标识id
superclass指定ActionForm的父类名。一般选择org.apache.struts.action.ActionForm
formtype指定ActionForm的类名,因为它是一个javaBean。相当于为类取一个名字
formProperty选项卡中输入ActionForm的属性。
Action的创建与配置
1)Action是系统的业务控制器,它用于接收从ActionServlet转发过来的请求,并触发execute方法,我们可以 在execute方法里面调用模型进行数据处理
2)struts要求Action必须继承自org.apache.struts.action.Action基类
3)所有的Action必须要在struts-config.xml中进行配置。配置节如下:
<action name="loginActionForm"
path="/loginAction" scope="request"
type="org.chen.struts.loginAction">
<forward name="scuess" path="/scuess.jsp" />
<forward name="error" path="/error.jsp" />
</action>
说明:
A)name:并不是Action本身的名字,而是与之关联的ActionForm的名称
B)path:非常重要的属性。ActionSerlvet将用户的请求转发与之同名的Action.同名的意思是将请求 的".do"后缀去掉。匹配Action的path属性值
C)struts-config.xml中只要遇到path属性都要加"/"表示相当于WebRoot根目录而言
D)type:Action的类名
E)forward:将Action的转发映射到实际的jsp页面,在实际编程时应该用逻辑名进行转发
F)一个Action可以有ActionForm,也可以没有ActionForm。如果是post提交的一般会有ActionForm。比如:<form id="frm1" action="loginAction.do">,如果是通过get提交则不会有ActionForm,但是Action总是会有的,因为要处理业务逻辑。比如:<a href="shopAddAction.do">
G)关于超链接与Action路径的问题(******************)
[1]对于表单中的Action而言,不存在路径问题,只要Action在classes下都可以定位比如: 1.jsp页面在WebRoot下面,但Action在ht.netBook.Action下面。在表单中提交时
<html:form action="insertTalkAction.do">可以直接指定Action名就可以了。或者2.jsp页面在WebRoot下面的page下面,都可以正确定位。
[2]但对于超链接而言,则不一样。如果 超链接所在的页面1.jsp在WebRoot下面,
则可以<a href="insertTalkAction.do>进入</a>直接指定Action名, 但是如果超链接所在的页面1.jsp在WebRoot下面的page下面的话,则通过"/"表示,项目目录 <a href="/WebRoot/insertTalkAction.do>让struts回到WebRoot下面再去找。
[3]如果是servlet的话,不管是对于表单还是对于超链接,都必须要找到web.xml文
件在它下面有。取出"servlet/loginSer"就行了,注意不是"/servlet/loginSer",即不要加"/"。如果超链接所在的页面就在WebRoot的下面,则可以直接使用<a href="servlet/loginSer"> 如果在超链接所在的页面在WebRoot下面的Page下面,则把则要把路径回退一级<a href="..\servlet\loginSer>让struts回到WebRoot下面再去找
<servlet-mapping>
<servlet-name>loginSer</servlet-name>
<url-pattern>/servlet/loginSer</url-pattern>
</servlet-mapping>
[4]对于forward中的<forward name="error" path="/error.jsp" />中的path而言"/"表示在WebRoot下面去找,但是对于jsp而言"/"表示项目目录。
如果要在WebRoot下面的page文件夹里面的error.jsp则修改成为<forward name="error" path="/page/error.jsp" />
举例:
1)创建一个Action名为loginAction放入ht.OA.Action下面
2)创建一个login.jsp页面放入WebRoot根目录下面
3)创建一个index.jsp与error.jsp放入WebRoot的page文件夹下面
4)创建一个servlet放入ht.OA.servlets下面
5)完成登录页面的struts的测试
Forward的定义转向配置
1)前面说过ActionServlet把请求转发给Action,Action会触发excute方法,在此方法中调用JavaBean进行业务逻辑处理,处理完毕之后,要把处理的结果显示到其它的jsp页面中。而这些经过Action处理之后要进入的jsp页面就是Forward配置节的任务
2)Forward在struts-config.xml中配置格式如下:
<forward name="scuess" path="/scuess.jsp" />
<forward name="error" path="/error.jsp" />
3)每一个Forward相当于一个ActionForward对像,所以struts中的
ActionSerlvet,Action,ActionForwad构成了struts的核心
说明:
A)name:用来指定forward逻辑名,以便在编程中来使用
B)path:实际要转发到的jsp页面。注意要加"/"
Action的excute方法
1)ActionServlet接受到用户的"XXXXX.do"请求,通过struts-config.xml配置文件找到与之匹配的Action配置节,通过Action的name属性找到与之对应的ActionForm然后把用户输入的数据填写到该ActionForm中去,最后把请求连同ActionForm转发给Action,然后触发Action的execute方法。
2) execute方法里面有几个参数:
A)mapping:
1:用来获取与Action对应的forward定义转向。
2:通过mapping.findForward(name)来进行实际页面的转发
B)form:是填充了用户输入数据的ActionForm。在实际编程时,往往需要向子类转换
LoginActionForm loginActionForm=(LoginActionForm)form,得到loginActionForm之后可以通过get方法得到用户填写的数据
C)request:得到用户的请求。事实上要得到用户输入的数据也可以通过request.getParameter方法,但是那样就失去了struts的作用,所以一般都会有ActionForm去得到用户所输入的数据,但是request.getParameter方法却可以得到get方法提交过来的数据,这是非常重要的。
D)response:得到用户的响应
E)execute方法会返回一个ActionForward实例,而mapping.findForward(name)正好可以返回这个实例。
本文主要摘自:
1.《开源web框架-Struts工作流程》http://hi.baidu.com/pursuit_on/blog/item/f8b3ef957ecb534bd0135e6d.html
2.《Struts天下》
http://blog.programfan.com/blog.asp?blogid=3274&columnid=6785
发表评论
-
eclipselink-DDL Schema Generation的四种方式
2016-10-12 00:17 589persistence.xml文件配置: < ... -
Java开发中的23种设计模式
2016-09-28 00:40 569设计模式(Design Patterns) ... -
ManyToOne 双向一对多关系
2016-08-05 01:38 525双向一对多关系,一是关系维护端(owner side),多是 ... -
理解RESTful架构
2016-06-22 00:33 578原文:http://www.ruanyifen ... -
foreach循环
2016-05-31 22:23 495这种有冒号的for循环叫做foreach循环,foreach语 ... -
java几种常用设计模式简单示例
2016-05-19 23:02 538PART A:前言 平常我们都在敲代码,为了要实现一些我们 ... -
iText PdfPCell内容水平垂直居中
2016-01-14 00:13 11909先调用Cell.setUseAscender(true);再调 ... -
深入理解 hash 函数、HashMap
2015-12-15 00:52 651http://www.2cto.com/kf/201409/3 ... -
iText的showTextAligned方法
2015-12-06 16:47 5538java使用itext的showTextAligned方法给 ... -
iText PdfTemplate的使用
2015-12-06 02:32 1439在开发系统时,需要在PDF上写入总页数。于是在网上搜索到 ... -
iText表格 分页
2015-11-30 23:31 5247前言 在上一节中,通过listing 4.16产生的表格拥 ... -
iText生成PDF文档部分页面横置
2015-11-27 02:02 5570整个PDF文档页面设置 Rectangle rect ... -
iText生成PDF格式设置
2015-11-27 00:52 2554import java.io.ByteArrayOutputS ... -
Spring中的IOC和AOP
2015-11-19 00:47 522IOC,依赖倒置的意思,所谓依赖,从程序的角度看,就是比如A要 ... -
【转载】纯Java获得本地MAC地址
2015-07-29 21:18 6071 import java.net.*; 2 3 clas ... -
Java笔试题
2014-05-25 21:53 5781. float型float f=3.4是否正 ... -
单例模式的常见应用场景
2014-05-25 21:30 881单例模式(Singleton)也叫单态模式,是设计模式中最 ... -
深入Java单例模式
2014-05-25 21:29 588在GoF的23种设计模式中,单例模式是比较简单的一种。然而 ... -
java 异常捕捉 ( try catch finally )
2014-05-25 21:15 589前言:java 中的异常处理机制你真的理解了吗?掌握了吗?c ... -
多线程的实现
2014-05-15 02:11 530http://www.cnblogs.com/rollenho ...
相关推荐
总的来说,Struts2通过MVC模式将Web应用的各部分职责划分清晰,提供了一套完整的控制流程和灵活的配置机制,使得开发者能够专注于业务逻辑的实现,提高开发效率。同时,源码的开源性和丰富的开发工具进一步支持了...
Struts框架通过实现MVC模式,大大简化了Web应用的开发过程。它不仅提高了开发效率,还使得应用程序更具可维护性和可扩展性。对于那些希望构建复杂、高性能Web应用的开发者来说,Struts无疑是一个强大的工具。
Struts和Hibernate是Java开发中两个非常重要的框架,它们分别负责Web应用的MVC(Model...通过理解和实践这个项目,开发者可以深入掌握MVC模式、Struts的控制层设计以及Hibernate的数据持久化机制,提升自己的技能水平。
Struts MVC是一个基于Java的开源框架,用于构建企业级Web应用程序。...通过解压和研究这个"strutsmvc.rar"文件,开发者可以学习和理解Struts MVC框架的实现方式,以及如何构建和管理一个基于Struts的Web应用。
本资源“Struts+Hibernate实现MVC_strutsmvc.rar”是一个计算机毕业设计项目,它将帮助学习者理解和实践这两种技术的结合使用。 Struts是一个基于MVC设计模式的Java Web框架,它主要用于处理HTTP请求,并将这些请求...
这个压缩包“[其他类别]Struts+Hibernate实现MVC_strutsmvc.rar”包含了一套使用Struts和Hibernate结合的JSP源码,非常适合初学者学习和实践,或者作为毕业设计或课程设计的基础。 **Struts框架**: Struts是Apache...
MVC模式是一种软件设计模式,用于分离业务逻辑、数据模型和用户界面。在Java Web开发中,模型通常由业务逻辑对象(BO)和持久层对象(POJO)组成,视图负责渲染数据,而控制器则协调模型和视图之间的交互。Struts...
### Struts+Hibernate实现MVC模式详解 #### 一、MVC模式简介 MVC(Model-View-Controller)模式是一种广泛应用于Web开发中的设计模式,它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器...
Struts和Hibernate是Java开发...通过这个项目,开发者可以提升对MVC模式、Struts框架和Hibernate ORM的理解,同时锻炼软件设计和团队协作的能力。在实践中不断探索和优化,能为未来的Java开发职业生涯打下坚实的基础。
Struts 2是一款强大的Java Web开发框架,基于Model-View-Controller(MVC)设计模式,旨在简化企业级应用的开发。它通过提供一个统一的架构来管理控制器、视图和模型,使得开发者能够更专注于业务逻辑,而不是底层...
实践这个例子,你将更深入地理解Struts框架的工作机制,以及如何将MVC模式应用于实际开发中,提高代码的可读性和可维护性。同时,这也会帮助你更好地掌握Java Web开发的基础知识,为进一步学习其他框架和高级技术...
总之,《精通Struts基于MVC的Java Web设计与开发》是一本深入浅出的教程,适合有一定Java基础的开发者进一步提升Web开发技能,通过学习,你可以掌握基于MVC模式的Java Web应用设计思想,以及Struts框架的实际运用,...
* Struts框架是JSP/Servlet规范的实现,提供了一个基于MVC设计模式的Web应用程序开发框架。 * Struts框架的主要组件包括Action、Form Bean、Validation和Tiles等。 知识点5:PHP-MVC框架的改进 * 通过引入标签处理...
Struts 是一个开源的 Java 框架,主要用于构建企业级的 Web 应用程序,尤其在实现 Model-View-Controller(MVC)设计模式方面表现出色。MVC 模式是一种软件设计模式,它将应用程序分为三个核心部分:模型(Model)、...
2. **MVC模式详解**:书中详细解释了MVC模式的概念,阐述了各部分的职责以及它们如何协同工作。Model是业务逻辑的载体,View负责数据的可视化呈现,Controller接收用户请求并调用Model更新数据,再通知View更新显示...
Struts MVC是一个经典的Java Web开发框架,用于构建基于模型-视图-控制器(MVC)设计模式的应用程序。它在2000年代初期非常流行,帮助开发者将业务逻辑、数据展示和用户交互分离,提高了代码的可维护性和可扩展性。...
Struts MVC框架是一款基于Java的...下载并学习Struts MVC框架的源码,不仅能够加深对MVC模式的理解,还能为实际开发工作提供宝贵的参考资料。随着对Struts的深入研究,你将能更好地应对复杂的企业级Web应用开发挑战。