001——struts 2的架构以及运行流程

来源:互联网 发布:单片机开发系统有哪些 编辑:程序博客网 时间:2024/04/28 21:45

Struts 2的架构图如下:(FilterDispatcher是struts2.0.x到2.1.2版本核心过滤器. 从2.1.3版本开始, 就用StrutsPrepareAndExecuteFilter代替FilterDispatcher


橙色是Servlet Filters,过滤器链,所有的请求都要经过Filter链的处理。

浅蓝色是Struts Core,Struts2的核心部分,Struts2中已经做好的功能,在实际开发中不需要动它们。

浅绿色是Interceptors,Struts2的拦截器。Struts2提供了很多默认的拦截器,可以完成日常开发的绝大部分工作;当然,也可以自定义拦截器,用来实现具体业务需要的功能。

浅黄色是User Created,由开发人员创建的,包括struts.xml、Action、Template,是每个使用Struts2来进行开发的人员都必须会的。

各模块说明:

FilterDispatcher是整个Struts2的调度中心,根据ActionMapper的结果来决定是否处理请求,如果ActionMapper指出该URL应该被Struts2处理,那么它将会执行Action处理,并停止过滤器链上还没有执行的过滤器。

ActionMapper提供了HTTP请求与action执行之间的映射,简单点说,ActionMapper会判断这个请求是否应该被Struts2处理,如果需要Struts2处理,ActionMapper会返回一个对象来描述请求对应的ActionInvocation的信息。

ActionProxy是一个特别的中间层,位于Action和xwork之间,使得我们在将来有机会引入更多的实现方式,比如通过WebService来实现等。

ConfigurationManager是xwork配置的管理中心,通俗的讲,可以把它看做struts.xml这个配置文件在内存中的对应。

struts.xml是Stuts2的应用配置文件,负责诸如URL与Action之间映射的配置、以及执行后页面跳转的Result配置等。

ActionInvocation:真正调用并执行Action,它拥有一个Action实例和这个Action所依赖的拦截器实例。ActionInvocation会执行这些拦截器、Action以及相应的Result。

Interceptor(拦截器):拦截器是一些无状态的类,拦截器可以自动拦截Action,它们给开发者提供了在Action运行之前或Result运行之后来执行一些功能代码的机会。类似于我们熟悉的javax.servlet.Filter。

Action:动作类是Struts2中的动作执行单元。用来处理用户请求,并封装业务所需要的数据。

Result:Result就是不同视图类型的抽象封装模型,不同的视图类型会对应不同的Result实现,Struts2中支持多种视图类型,比如Jsp,FreeMarker等。

Templates:各种视图类型的页面模板,比如JSP就是一种模板页面技术。

Tag Subsystem:Struts2的标签库,它抽象了三种不同的视图技术JSP、velocity、freemarker,可以在不同的视图技术中,几乎没有差别的使用这些标签。

Struts 2的运行流程:

(1)用户通过HttpServletRequest向servlet容器(tomcat)提交一个请求,请求通过一系列的过滤器,最后到Struts 2的核心控制器控制到


(2)FilterDispatcher将请求转发给ActionMapper。ActionMapper负责识别当前请求是否需要Struts 2做出处理(即是否要调用哪个action)。


(3)ActionMapper告诉FilterDispatcher需要处理这个请求,FilterDispatcher会停止过滤器以后的部分,所以一般把FilterDispatcher放在过滤器链的最后。然后建立一个ActionProxy对象,这个对象作为Action与xwork之间的中间层,会代理Action的运行过程。


(4)ActionProxy获得控制权之后通过ConfigurationManager对象加载核心配置文件struts.xml


(5)ActionProxy拿到了运行哪个Action、相关的拦截器以及所有可能使用的result信息,就可以着手建立ActionInvocation对象了,ActionInvocation对象描述了Action运行的整个过程。


(6)首先按照拦截器的引用顺序依次执行各个拦截器的前置部分,然后执行action的execute方法,根据execute方法返回的结果,也就是result,在struts.xml中匹配选择下一个页面,找到页面后,由于现在的页面一般都是模版页面,在页面上,可以通过Struts 2自带的标签来访问需要的数据,并生成最终页面


(7)ActionInvocation对象执行完毕后,实际上就已经得到响应对象了,也就是HttpServletResponse对象,最后按与过滤器配置定义相反的顺序依次经过过滤器,向用户展示响应的结果。




1 1
原创粉丝点击