Struts2 流程原理
一、流程图
(转)
二、流程详解
1、服务器传递来的请求,通过ActionContextClearUp、other filters、最后到达StrutsPrepareAndExecuteFilter
2、StrutsPrepareAndExecuteFilter 向 ActionMapper 询问,来决定这个请求是否需要调用某个Action
3、如果ActionMapper决定需要调用某个Action,StrutsPrepareAndExecuteFilter 把请求的处理交给ActionProxy
4、ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类 ,这里,我们一般是从struts.xml配置中读取(也可以通过注解)
5、ActionProxy创建一个ActionInvocation的实例
6、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用
三、核心类或接口
1、ActionConfig:负责从struts.xml文件中读取配置;
2、ActionSupport:我们自己实现的Action类一般都继承ActionSupport类;
3、ActionContext:是Action运行的环境,为Action类提供一些信息;
4、ActionProxy:是如何获取Action;
5、ActionInvocation:是如何执行Action。
四、ActionInvocation Action调度者
1、对如何执行Action进行了封装
2、ActionInvocation是 Xworks 中Action调度的核心。而对Interceptor 的调度,也正是由ActionInvocation负责
3、ActionInvocation 是一个接口,而DefaultActionInvocation 则是Webwork 对ActionInvocation的默认实现
4、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。
在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper
五、ActionProxy Action代理
1、对如何根据请求中的URL查找Action进行了封装
2、所有指向Action的Http请求,共用一个ActionProxy