在Struts2框架中的处理大概分为以下几个步骤:
1、客户端发出一个指向Servlet容器(例如Tomcat)的请求
2、这个请求经过一个过滤器链,这个过滤器链包括ActionContextCleanUp过滤器、其他Web应用过滤器和StrutsPrepareAndExecuteFilter过滤器,其中StrutsPrepareAndExecuteFilter过滤器是必须要配置的
3、当核心控制器StrutsPrepareAndExecuteFilter(Struts2.1以前是FilterDispatcher)被调用时,StrutsPrepareAndExecuteFilter查找ActionMapper,以确定这个请求是否需要调用某个Action
4、ActionMapper查找需要调用的Action,并返回ActionProxy(Action对象的代理),StrutsPrepareAndExecuteFilter把请求的处理交给ActionProxy
5、ActionProxy 依照框架的配置文件(struts.xml),找到需要调用的 Action 类
6、ActionProxy创建一个ActionInvocation的实例,ActionInvocation实例使用命名模式来调用。
7、ActionInvocation 先调用相关的拦截器(Action 调用之前的部分),最后调用 Action
8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果,返回结果通常是(但不总是,也可能是另外的一个 Action 链)JSP 技术或者 FreeMarker 的模版技术的网页呈现。Struts2 的标签和其他视图层组件,帮助呈现我们所需要的显示结果。在此,我想说清楚一些,最终的显示结果一定是 HTML 标签。标签库技术和其他视图层技术只是为了动态生成 HTML 标签。
9、接着按照相反次序执行拦截器链 ( 执行 Action 调用之后的部分 )。最后,响应通过滤器链返回(过滤器技术执行流程与拦截器一样,都是先执行前面部分,后执行后面部)。如果过滤器链中存在 ActionContextCleanUp,FilterDispatcher 不会清理线程局部的 ActionContext。如果不存在 ActionContextCleanUp 过滤器,FilterDispatcher 会清除所有线程局部变量。
Struts2原理图
查找
ActionMapper
,以确定这个请求是否需要调
用某个
Action
。
查找
ActionMapper
,以确定这个请求是否需要调
用某个
Action
。
查找
ActionMapper
,以确定这个请求是否需要调
用某个
Action
。
查找
ActionMapper
,以确定这个请求是否需要调
用某个
Action
。