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返回一
个实例进行显示。