“Struts2是一个基于MVC(Model View Controller)设计模式的Web应用框架,它本质上至关于一个Servlet,在MVC设计模式中,Struts2做为控制器(Controller)来创建模型(Model)与视图(View)的数据交互”。
先来看一张Struts2官方文档提供的Struts2架构图:设计模式
_FilterDispatcher_是任何一个Struts2应用都须要配置的,通常出如今过滤器的最后;若是在FilterDispatcher前出现了如SiteMesh这种特殊的过滤器,还必须在SiteMess前应用Struts2的ActionContextCleanUp过滤器。
FilterDispatcher将请求转发给ActionMapper。缓存
ActionMapper负责识别当前的请求是否须要Struts2作出处理。
当ActionMapper告诉FilterDispatcher须要处理这个请求时,FilterDispatcher会中止过滤链以后的部分,因此一般FilterDispatcher应该出如今过滤链的最后。而后创建一个ActionProxy对象,这个对象做为Action于XWork之间的中间层,会代理Action的运行过程。服务器
ActionProxy对象被建立出来时,并不知道要运行哪一个Action,它手里只有从FilterDispatcher中拿到的请求URL。这时,它去ConfigurationManager询问到底要运行哪一个Action。架构
在服务器启动的时候,ConfigurationManager负责将struts.xml文件从配置文件映射到内存中,并缓存起来,以保证ActionProxy拿着来访问的URL向它询问要运行哪个Action的时候,就能够直接匹配,查找并回答出来。
ActionProxy知道了要运行的那个Action,相关的拦截器以及全部可能使用的Result信息,就能够着手创建ActionInvocation对象了,ActionInvocation对象描述了Action运行的整个过程。app
ActionInvocation对象执行的时候会作不少事情:框架
ActionInvocation对象执行完毕以后,实际上已经获得了响应对象,也就是HttpServletResponse对象,最终向用户显示响应的结果。spa
End...设计