下面来一起探究下struts2框架的运行流程
在struts2的说明文档下有一张struts2的全景图
橙色部分是Servlet Filters 也就是过滤器链
蓝色部分是struts2的为我们提供的核心组件
浅绿色部分是strtus2提供的一系列拦截器
浅黄色部分是我们平时工作中主要编写的东东
FilterDispatcher是struts2的核心控制器,是整个框架的司令官,会根据ActionMapper的结果来决定是否启动struts2框架来进行处理用户所发出的请求
ActionMapper会判断请求是否需要struts2来处理,如果需要则返回一个对象来描述请求对应的ActionInvocation信息
ActionProxy Action 的代理类,位于Action和框架之间
ConfigruationManager 配置管理中心,用于加载和管理struts.xml
ActionInvocation 真正调用并执行Action,它拥有一个Action实例和这个Action所依赖的拦截器,它会执行Action,拦截器,以及相应的result
Interceptor 拦截器,可以自动的拦截action
result 返回相对应的视图类型
templates 各种视图的模板
tag subsystem struts2标签库
运行流程
1.请求通过一系统的过滤器,最后到达FilterDispatcher这个 核心过滤器
2.该过滤器会将请求转发给ActionMapper并询问该请求是否启动struts2框架来进行处理
3.如需要处理则创建ActionProxy,ActionProxy作为Action和框架的中间层,会代理Action的运行过程
4.ActionProxy被创建出来后并不知道运行哪个Action,这时它只是拿到了FilterDispatcher的请求的url,ActionProxy会去向ConfigurationManager询问要运行哪个Action
5.ConfigurationManager会去struts.xml中查找到底要运行哪个Action,ConfigurationManager会在服务启动时就将struts.xml全部加载到内存中,ConfigurationManager 可以看作是struts.xml在内存中的映像
6.ActionProxy这时会拿到运行哪个Action,相关的拦截器,以及所有的result信息,这时会创建ActionInvocation对象,ActionInvocation描述了Action运行的整个过程
7.ActionInvocation在执行真正的action类之间,会调用一系列的拦截器,这时拦截器是顺序执行的
8.在执行完action并根据action的result返回相应的结果并在struts.xml中进行匹配
9.ActionInvocation会再按照拦截器引用顺序的倒序再次执行各个拦截器的后置部分
10.ActionInvocation执行完毕后,生成响应的httpServletResponse对象,最后按与过虑器相反的顺序,向用户返回响应结果