Chinaunix首页 | 论坛 | 博客
  • 博客访问: 594700
  • 博文数量: 68
  • 博客积分: 5070
  • 博客等级: 大校
  • 技术积分: 1312
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-11 14:20
文章分类

全部博文(68)

文章存档

2011年(3)

2010年(30)

2009年(17)

2008年(18)

我的朋友

分类: Java

2010-01-08 21:12:27

MVC设计模式概述

   MVCModelViewControler的简称。即模型—视图—控制器。最近几年被业界推荐为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模式的主流  框架。后来webworkstruts合并成为struts2.0版本。也即是最高版本。struts的体系结构的实现如图:

   ActionServlet是一个FrontController,是struts的核心控制器。它是一个标准的Servlet,继承自HttpServlet类,该控制器负责拦截所有Http请求,然后把拦截的用户请求根据用户需要,它将request转发给 RequestProcessor来处理, ActionMappingActionConfig的子类,实质上是对struts-config.xml的一个映射,从中可以取得所有的配置信息 ,转发给相应的Action类进行处理。
  RequestProcessor根据提交过来的url,如*.do,从ActionMapping 中得到相应的ActionFornAction。然后将request的参数对应到ActionForm中,进行form验证。如果验证通过则调用 Actionexecute()方法来执行Action,最终返回ActionFoward

   ActionFoward是对mapping中一个foward的包装,对应于一个url

   ActionForm使用了ViewHelper模式,是对HTMLform的一个封装。其中包含有validate方法,用于验证form数据的有 效性。ActionForm是一个符合JavaBean规范的类,所有的属性都应满足getset对应。对于一些复杂的系统,还可以采用 DynaActionForm来构造动态的Form,即通过预制参数来生成Form。这样可以更灵活的扩展程序。

   ActionErrors是对错误信息的包装,一旦在执行action或者form.validate中出现异常,即可产生一个ActionError 最终加入到ActionErrors。在Form验证的过程中,如果有Error发生,则会将页面重新导向至输入页,并提示错误。
   Action
是用于执行业务逻辑的RequsestHandler。这个类通常由用户来提供,该控制器负责接收来自于ActionServlet的请求,并根据该请求调模式的业务逻辑方法处理请求,并将处理的结果返回给jsp页面显示。每个Action都只建立一个instanceAction不是线程安全的,所以 不应该在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部分:ActionFormJavaBean组成。其中ActionFrom用于封装用户在jsp页面中所填写的数据。所有的用户填写的数据由系统自动封装成ActionFrom对像。该对像被ActionServlet转发给ctionAction根据从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这个配置文件就是用来实现以上配置的

阅读(3263) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~