Struts2 架构与运行流程

“Struts2是一个基于MVC(Model View Controller)设计模式的Web应用框架,它本质上至关于一个Servlet,在MVC设计模式中,Struts2做为控制器(Controller)来创建模型(Model)与视图(View)的数据交互”。

先来看一张Struts2官方文档提供的Struts2架构图:
设计模式

  • Servlet Filters(橙色):过滤链,全部的请求都要通过Filter处理。
  • Struts Core(浅蓝色):Struts2的核心部分,Struts2已经作好的功能,开发中不须要动它们。
  • Interceptors(浅绿色):Struts2的拦截器。Struts2提供了不少默认的拦截器,帮助开发者完成绝大部分工做。开发者也能够自定义拦截器,来实现具体的功能。
  • User Created(浅黄色):这一部分须要由开发人员完成,包括struts.xml、Action、Template等。

1. FilterDispatcher

_FilterDispatcher_是任何一个Struts2应用都须要配置的,通常出如今过滤器的最后;若是在FilterDispatcher前出现了如SiteMesh这种特殊的过滤器,还必须在SiteMess前应用Struts2的ActionContextCleanUp过滤器。
FilterDispatcher将请求转发给ActionMapper。缓存

2. ActionMapper

ActionMapper负责识别当前的请求是否须要Struts2作出处理。
当ActionMapper告诉FilterDispatcher须要处理这个请求时,FilterDispatcher会中止过滤链以后的部分,因此一般FilterDispatcher应该出如今过滤链的最后。而后创建一个ActionProxy对象,这个对象做为Action于XWork之间的中间层,会代理Action的运行过程。服务器

3. ActionProxy

ActionProxy对象被建立出来时,并不知道要运行哪一个Action,它手里只有从FilterDispatcher中拿到的请求URL。这时,它去ConfigurationManager询问到底要运行哪一个Action。架构

4. ConfigurationManager

在服务器启动的时候,ConfigurationManager负责将struts.xml文件从配置文件映射到内存中,并缓存起来,以保证ActionProxy拿着来访问的URL向它询问要运行哪个Action的时候,就能够直接匹配,查找并回答出来。
ActionProxy知道了要运行的那个Action,相关的拦截器以及全部可能使用的Result信息,就能够着手创建ActionInvocation对象了,ActionInvocation对象描述了Action运行的整个过程。app

5. ActionInvocation

ActionInvocation对象执行的时候会作不少事情:框架

  • 首先按照拦截器的应用顺序依次执行各个拦截器的前置部分;
  • 而后执行Action的execute()方法;
  • 根据execute()返回的结果,在struts.xml中匹配选择下一个页面
  • ActionInvocation对象再按照拦截器的引用顺序倒序依次执行各个拦截器的后置部分。

ActionInvocation对象执行完毕以后,实际上已经获得了响应对象,也就是HttpServletResponse对象,最终向用户显示响应的结果。
spa

End...设计

相关文章
相关标签/搜索