现在的位置: 首页 > 综合 > 正文

struts1 和 struts2流程之间的区别

2013年02月12日 ⁄ 综合 ⁄ 共 1246字 ⁄ 字号 评论关闭

struts1的处理流程:
 1、根据浏览器是post还是get请求调用doPost()、doGet()方法,在其中调用ActionServlet的process()方法。

2、Process()获取RequestProcessor对象,调用RequestProcessor对象的process()方法

3、 Process()读取struts-config.xml,在其中查找<action>子元素,查找的条件是:用户请求的URI与 action元素的path属性值一样,找到后确定name属性,根据name找到<form-bean>元素,再根据action元素的 name匹配值找到相应的ActionForm bean。

4、 调用ActionForm bean的setter方法填充FormBean的属性,然后调用FormBean的validate()方法,对表单数据的有效性进行验证。

5、 RequestProcessor的process()方法根据3中找到的<action>中的type属性寻找Action bean对象(有则使用,无则创建),然后将FormBean对象,封装的请求对象等信息发给找到的Action对象,Action bean调用自己的execute()方法处理。

6、Action bean的execute()方法执行完璧后,返回一个ActionForward对象,又回到RequestProcessor对象的process()方法,process方法将根据ActionForward请求重新定向到指定的页面。

一个请求在Struts 2框架中的处理大概分为以下几个步骤。 

 客户端提交一个(HttpServletRequest)请求。 
 请求被提交到一系列(主要是3层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、 FilterDispatcher)。 

  FilterDispatcher是控制器的核心,就是MVC的Struts 2实现中控制层(Controller)的核心。 

  FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。 

  ActionProxy通过Configuration Manager询问框架的配置文件struts.xml,找到需要调用的Action类。

  ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action。但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)。 

 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result。

抱歉!评论已关闭.