Struts2处理用户请求的流程如下图所示:
具体的处理流程为:
1,客户端提交一个(HttpServletRequest)请求的请求到达servlet容器;
 
2,这个请求要通过一系列的过滤器(Filter),包括:ActionContextCleanUp过滤器、Othter   FiltersSiteMesh ,etc)。注意:这里是有顺序的,先经过ActionContextCleanUp,再其他过滤器Othter  FiltersSiteMesh等),最后到FilterDispatcher过滤器;
 
3FilterDispatcher 按顺序查询这个ActionMapper,去决定是否需要调用某个Action来处理这个(HttpServlet Request)请求,如果ActionMapper决定需要调用某个ActionFilterDispatcher就委托控制给ActionProxy
 
4,这个ActionProxy就会查询框架的配置文件struts.xmlConfiguration Manager),找到需要调用的Action类;
 
5,这个ActionProxy创建了一个ActionInvocation对象,同时ActionInvocation通过代理模式调用Action。但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器);
 
6,一旦这个Action返回结果,这个ActionInvocation就负责在struts.xml文件中查找和Action result code相关联的结果;
 
7,这个结果被执行,通常(但不总是)这个结果会被以jsp或者FreeMarker的形式被返回,当返回的时候,这个模板可以使用框架提供的struts标记;
 
8,其他的一些组件会同ActionMapper协同工作,以返回合适的URL作为额外的请求;
 
9,拦截器会再次被执行,最后,这个响应将会通过web.xml中的过滤配置被返回,如果这个ActionContextCleanUp过滤器存在的话,这个FilterDispatcher将不会清除这个ThreadLocal "ActionContext",如果这个ActionContextCleanUp过滤器不存在,这个FilterDispatcher将不会清除所有的ThreadLocal