struts2工作原理

 一、配置说明

Struts2是在我们web.xml中进行配置一个过滤器,当web项目启动时,过滤器就会生效。

  下面是web.xml中的配置,所有请求都会经过struts2过滤器,而struts2会过滤出自己相关的请求,比如说.action后缀的一个请

求struts2会进行过滤和处理,如果是.jsp、.htmlstruts2就不会进行处理了,直接放行

1   <filter>
2       <filter-name>struts2</filter-name>
3       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
4   </filter>
5   <filter-mapping>
6       <filter-name>struts2</filter-name>
7       <url-pattern>/*</url-pattern>
8   </filter-mapping>

二、工作原理图:

三、工作原理详解

1、 首先我们用户通过HttpServletRequest请求发送过来,经过一系列核心过滤器(如上图的ActionContextCleanUp、Other filters都

是可选的过滤器,主要用于和一些框架的集成)往下执行,然后到达FilterDispatcher;

2、 FilterDispatcher(2.0---2.1.2)是struts2最核心的一个过滤器,该过滤器是struts2 2.0---2.1.2版本的一个核心过滤器,然后再2.1.2

版本以后都是使用的StrutsPrepareAndExecuteFilter这个过滤器。

为什么FilterDispatcher会被StrutsPrepareAndExecuteFilter所取代呢?

       比如我们想写一个自己的过滤器,我们往往会再struts2过滤器的顶端来写,但是我们想在struts2拦截之后,即执行action之前再来

定义我们自己的过滤器,通过FilterDispatcher是做不到的,在我们新版的struts2中使用StrutsPrepareAndExecuteFilter就可以实现了。

3、 用户经过一系列的请求之后会到的我们的ActionMapper,这里强调一下只有是.action后缀的请求才会到达ActionMapper,ActionM

-apper进行查找当前的.action请求有没有一个对应action处理,如果有会返回到StrutsPrepareAndExecuteFilter。

4、 StrutsPrepareAndExecuteFilter将请求转发到ActionProxy,ActionProxy通过ConfigurationManager来读取项目中配置的struts.xml

配置文件,来找到具体的action类。

5、 然后通过ActionProxy代理来创建ActionInvocation(action的反向实例),经过一系列拦截器执行到我们的Action返回Result。

6、 Result是一个字符串对象,它对应着我们的一个视图,返回视图然后再经过一系列拦截器,然后通过HttpServletResponse返回一

个实例进行显示。

猜你喜欢

转载自www.cnblogs.com/wangchengb/p/9022576.html