总结下来,可以是十步,这十步缩写成:客容容控控,代代调调客。
客(1)客户端发出请求Request到Action(Action其实就在Container里);
容(2)容器Container从web.xml的配置中获取对应的Controller名称;
容(3)容器Container通过过滤器(Struts2.1-使用FilterDispatcher,Strut2.1+使用StrutsPrepareAndExecuteFilter)找到该Controller方法;
控(4)控制器Controller找到ActionMapper,再次找到对应Action的方法;
控(5)控制器Controller调用动态代理,即ActionProxy;
代(6)执行动态代理ActionProxy通过struts2.xml文件,获取到action、interceptor拦截器和stack;
代(7)执行动态代理ActionProxy将request请求转发至执行调度器ActionInvocation;
调(8)执行调度器ActionInvocation调用action和interceptor拦截器;
调(9)执行调度器ActionInvocation根据Action配置信息获取到最终结果result;
客(10)客户端接收到来自执行调度器返还的result。
注:拦截器和过滤器的区别可参考 https://www.cnblogs.com/panxuejun/p/7715917.html