在Struts2框架中的处理大概分为如下几个步骤 app
1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 框架
2 这个请求通过一系列的过滤器(Filter)(这些过滤器中有一个叫作ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其余框架的集成颇有帮助,例如:SiteMesh Plugin) url
3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否须要调用某个Action spa
说明:1>Dispatcher开始会调用init方法加载一些配置文件,例如default.properties\struts.properties\xwork.xmlxml
2>Dispatcher执行dofilter方法,ActionMapper会根据请求的url获得一个actionMapping,actionMapping包含了url的配置信息继承
4 若是ActionMapper决定须要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 递归
3>Dispatcher执行最重要的方法serviceAction,会建立Actionproxy,在调用方法DefaultActionproxyFactory.createActionProxy建立actionProxy的过程当中,经过proxy.prepare()又建立了ActionInvocation.it
5 ActionProxy经过Configuration Manager询问框架的配置文件,找到须要调用的Action类 io
6 ActionProxy建立一个ActionInvocation的实例。 容器
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程先后,涉及到相关拦截器(Intercepter)的调用。
4>proxy.execute()执行了invocation.invoke(),这个方法会循环调用Intercepter.递归调用,调用完后用invokeAction执行Action
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果一般是(但不老是,也可 能是另外的一个Action链)一个须要被表示的JSP或者FreeMarker的模版。在表示的过程当中能够使用Struts2 框架中继承的标签。在这个过程当中须要涉及到ActionMapper