首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

Struts怎么实现MVC

2012-08-31 
Struts如何实现MVC?struts是java?web目前最常用的实现框架。他采用mvc结构,将页面展现,流程控制和业务处理

Struts如何实现MVC

?

struts是java?web目前最常用的实现框架。他采用mvc结构,将页面展现,流程控制和业务处理强有力的分开,结构清晰,思路明确,是进行java?web的最好选择。
java?web组件间的关系基本有三类:

页面跳转(javax.servlet.RequestDispatcher.forward()方法)

页面重定向(javax.servlet.response.sendRedirect()方法)

页面包含(javax.servlet.RequestDispatcher.include()方法).

其中,页面跳转只是在同一个web应用中进行的,传递的是request和response对象;重定向和包含则可以是不同的url内容。
??????java?web组件间的数据共享有四类:page,request,session和application,共享范围有单个页面到整个web应用,依次变大。
?????struts的页面展示用jsp技术实现,按严格的mvc讲,jsp只是负责显示,不负责流程控制和数据处理;流程控制用action实现,在action的execute()里面通过return?actionMapping.findForward()进行跳转,具体的业务处理是有各种java?bean或者ejb来实现的。actionForm也是struts里面的一部分,目的是存储jsp页面提交的内容,供对应的action使用。

struts1.2?的工作流程

Web应用启动时加载并初始化ActionServlet。ActionServlet从struts-config.xml中读取配置信息,把它们存放到各种配置对象中。当ActionServlet接收到一个请求时,流程如下:

1.检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信 息。

2.如果ActionForm实例不存在,就创建一个ActionForm对象,把提交的表单数据保存到 ActionForm中。

3.根据配置,决定是否需表单验证,若需要,则调用ActionForm的validate方法。

4.如果ActionForm的validate方法返回null或返回不包含ActionMessage的ActionErrors 对象,则表示验证成功。

5.ActionServlet根据ActionMapping实例包含的映射信息决定将请求转发给哪个Action, 如果Action不存在则先创建这个实例,然后调用Action的execute方法。

6.Action的execute方法返回一个ActionForward对象,ActionServlet再把请求转发给 ActionForward对象指向的JSP组件。

7.ActionForward指向的JSP组件生成动态网页,返回给用户。


Struts2的工作流程

?

1?客户端初始化一个指向Servlet容器(例如Tomcat)的请求;

2?这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做 ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh?Plugin)

3?接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是 否需要调用某个Action

4?如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给 ActionProxy

5?ActionProxy通过Configuration?Manager询问框架的配置文件,找到需要调用的Action 类

6?ActionProxy创建一个ActionInvocation的实例。

7?ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦 截器(Intercepter)的调用。

8?一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返 回结果。返回结果通常是(但不总是,也可?能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2?框架中继承的标签。在这个过程中需要涉及到ActionMapper

?

在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。

热点排行