Struts2架构分析和执行机制
实例分析
1.在浏览器中输入url地址后,会通过http协议发送给tomcat,tomacat收到请求后查看訪问的是哪个
webapplication(例如以下图的Struts2_0100_Introduction),tomcat把Struts2_0100_Introduction交给相应的
webapplication程序去处理。
2.之后会參考Struts2_0100_Introduction下的相应的web.xml文件,将请求交给Struts2Filter去处理
Struts2执行机制
从图中能够看出一个请求在Struts2中的处理步骤例如以下:
1、client初始化一个指向Servlet容器(比如Tomcat)的请求;
2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器。
这个过滤器对于Struts2和其它框架的集成非常有帮助,比如:SiteMesh Plugin)。
3、接着FilterDispatcher被调用。FilterDispatcher询问ActionMapper来决定这个请求是否须要调用某个
Action;
4、假设ActionMapper决定须要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;
5、ActionProxy通过Configuration Manager询问框架的配置文件,找到须要调用的Action类;
6、ActionProxy创建一个ActionInvocation的实例。
7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)
的调用。
8、一旦Action运行完成,ActionInvocation负责依据struts.xml中的配置找到相应的返回结果。返回结果通常
是(但不总是,也可能是另外的一个Action链)一个须要被表示的JSP或者FreeMarker的模版。在表示的过程中能够
使用Struts2框架中继承的标签。在这个过程中须要涉及到ActionMapper。
核心控制器
FilterDispatcher是早期struts2的过滤器,后期的都用StrutsPrepareAndExecuteFilter了,如 2.1.6、
2.1.8。StrutsPrepareAndExecuteFilter名字已经非常能说明问题了,prepare与execute,前者表示准备,能够说是指
filter中的init方法,即配制的导入;后者表示进行过滤,指doFilter方法。即将request请求,转发给相应的
action去处理。能够把他拆分成StrutsPrepareFilter和StrutsExecuteFilter,能够在这两个过滤器之间加上我们自
己的过滤器.!StrutsPrepareAndExecuteFilter是控制器的核心。就是MVC的Struts 2实现中控制层(Controller)的
核心。
三个初始化參数:
1、config參数:指定要载入的配置文件。逗号切割。
2、actionPackages參数:指定Action类所在的包空间。逗号切割。
3、configProviders參数:自己定义配置文件提供者,须要实现ConfigurationProvider接口类。
逗号切割。
想想为什么这么麻烦。中间要经过一次中转?
将请求和拿到的结果(视图)分开,要想换成别的视图直接配一下result就能够了。更灵活。和我MVC非常像。