Struts2执行流程
StrutsPrepareAndExecuteFilter是struts2框架的核心控制器,它负责拦截所有的用户请求,当用户请求到达时,该Filter会过滤用户请求,如果用户请求以action结尾,该请求就会被转入struts2框架来处理。
1) 客户端发起一个请求(*.action)
2) 主控器StrutsPrepareAndExecuteFilter拦截请求
3) 主控器通过ActionMapper判断请求是否交给action处理.如果是,那么判断请求的action是否存在,如果不存在,报404错误.如果不是交给action处理,那么将请求转发给对应的web组件.
4) 主控器创建ActionProxy,这个对象全权负责action的执行.
5) ActionProxy通过ConfigurationManager对象获得当前访问的action的相关配置信息.
6) ActionProxy根据获得的action的配置信息,创建ActionInvocation对象.
7) ActionInvocation对象负责执行action前面的拦截器以及action对象,并且处理action执行后的结果.
8) action前面的拦截器被执行,最后执行action.(Struts2,多实例单线程)
9) ActionInvocation得到action执行后的逻辑视图,根据逻辑视图找到物理视图, 然后转发请求.
客户端发起一个请求(*.action或无结尾),经过web.xml过滤器,走StrutsPrepareAndExecuteFilter核心控制器,进入struts2一系列的拦截器Interceptor (实现代码功能),根据struts-default.xml加载拦截器,通过action的名称来分发请求到对应的action类,执行action类的execute方法,通过execute方法中返回的字符串,在struts.xml中找到对应的结果页面(result)[在action执行之前,执行了defaultStack拦截器栈(在sruts2-core-xxx.jar目录下的struts-default.xml中定义]。