Struts执行流程解析

Struts2 处理用户请求的流程如下图所示:
具体的处理流程为:
1 ,客户端提交一个( HttpServletRequest )请求的请求到达 servlet 容器;
 
2 ,这个请求要通过一系列的过滤器( Filter ),包括: ActionContextCleanUp 过滤器、 Othter   Filters SiteMesh ,etc )。注意:这里是有顺序的,先经过 ActionContextCleanUp ,再其他过滤器 Othter  Filters SiteMesh 等),最后到 FilterDispatcher 过滤器;
 
3 FilterDispatcher 按顺序查询这个 ActionMapper ,去决定是否需要调用某个 Action 来处理这个( HttpServlet Request )请求,如果 ActionMapper 决定需要调用某个 Action FilterDispatcher 就委托控制给 ActionProxy
 
4 ,这个 ActionProxy 就会查询框架的配置文件 struts.xml Configuration 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
 

你可能感兴趣的:(struts,执行过程,Struts执行流程)