流程说明:
- 一个初始的请求到达Servlet容器后,经过ActionContextCleanUp过滤器,标准的过滤器,和FilterDispatcher(2.1.3版本之后是StrutsPrepareAndExecuteFilter )。
- FilterDispatcher轮询ActionMapper是否调用一个Action。
- 如果ActionMapper确定有Action被调用,返回ActionMapping对象。
- FilterDispatcher将控制权委派给ActionProxy。
- ActionProxy询问框架的配置文件(struts.xml)并创建ActionInvocation,设置ActionInvocation上下文,调用invoke方法。
- 然后ActionInvocation先依次调用配置的拦截器的intercept方法,再去调用Action实例的execute方法。
- action执行返回后,ActionInvocation根据结果码去配置文件寻找对应的result。
- ActionInvocation的invoke()方法将控制权返回给拦截器(拦截器执行顺序与之前相反)。
- 拦截器全部执行完毕后,ActionInvocation向ActionProxy返回一个String类型的结果码,ActionProxy清除状态并返回。
ActionContextCleanUp作用
延长Action属性的生命周期,包括自定义属性,以便在jsp访问,若无该过滤器,jsp无法访问。
ActionMapper和ActionMapping
ActionMapper是在HTTP和action请求之间提供一个映射,当请求到达时,ActionMapper会寻找对应的Action,若有则返回一个描述Action的ActionMapping,否则返回null。
ActionMapping本质是数据传输对象,将Action类和执行的方法收集在一起。
ActionContext
ActionContext是Action执行的上下文,包含session,application,local,parameters等。ActionContext是线程本地的,所以是线程安全的。