码迷,mamicode.com
首页 > 其他好文 > 详细

struts2核心工作流程与原理

时间:2014-07-27 11:35:54      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:struts 2

Struts2 是一个相当强大的Java Web开源框架,是一个基于POJO的Action的MVC Web框架。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。


 bubuko.com,布布扣

上图来源于Struts2官方站点,是Struts 2 的整体结构。
一个请求在Struts2框架中的处理大概分为以下几个步骤
客户端初始化一个指向Servlet容器(例如Tomcat)的请求
这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin
接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
如果ActionMapper决定需要调用某个ActionFilterDispatcher把请求的处理交给ActionProxy
5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action
6 ActionProxy创建一个ActionInvocation的实例。
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper
 
在上述过程中所有的对象(ActionResultsInterceptors,等)都是通过ObjectFactory来创建的。

在这里说明下拦截器与过滤器的区别:

1、拦截器是基于java反射机制的,而过滤器是基于函数回调的。 
2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器。 
3、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。 
4、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。 
5、在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。





struts2核心工作流程与原理

标签:struts 2

原文地址:http://blog.csdn.net/xingkong22star/article/details/38150329

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!