您的位置:首页 > 编程语言 > Java开发

Struts学习总结(二)---Struts2的架构和运行流程

2016-08-28 22:27 495 查看
日期: 2016-8-28

内容: Struts2的架构和运行流程

一、Struts2的系统架构

什么叫做Struts2的架构?在Struts2的官方文档里面有一张特别显眼的图片,这就是struts2的狗狗图,图片如下:



以下以简单的文字对这张图片作为一个初级的介绍,虽然这张图片基本涵盖了struts2的所有内容。

1、在这种系统架构图中一共分了几大块,彼此之间相互联系,图片中分四中颜色标注:

橙色的部分是Servlet Filters,就是我们通常说的过滤器,在使用Struts2的过程中的所有请求都必须经过过滤器的处理。
浅蓝色的部分是Struts Core,即Struts2的核心部分,是Struts2已经做好的功能模块,在我们实际开发的过程中通常不需要去改动的。
浅绿色的是Intercepters,即Struts2的拦截器。Struts2为我们提供了很多的拦截器,可以用于完成我们日常开发的绝大部分功能,当然,我们也可以根据自己的需求去定义自己的拦截器,这个需要根据我们自己开发模块的复杂程度去自己定义。
浅黄色的是User Created,即由开发人员创建的,包括的内容有struts.xml,Action,Template这些部分是每一个使用kStruts2开发的人员都必须会的。我们再开发的过程中基本上只涉及到这些地方的修改和配置。

2、Struts2的体系结构:

当web容器接收到一个请求的时候,它会将请求传递给一个标准的过滤器,其中包括ActionContextCleanUp过滤器和其他的过滤器(如集成SiteMesh的插件),这是非常有用的技术。接下来就需要调用FilterDispatcher,他将调用ActionMapper,来确定请求调用哪个Action,ActionMapper返回了一个收集了Action详细信息的ActionMapping对象。
接下来,FilterDispatcher将控制权委派给ActionProxy,ActionProxy调用配置管理器(Coniguration Manager)从配置文件中读取配置信息,然后创建ActionInvocation对象实际上ActionInvocation处理过程就是Struts2处理请求的过程。在ActionInvocation被创建的同时,填充了需要的所有对象和信息,他在调用Action之前会调用所有的配置的拦截器。
一旦Action执行完成返回结果字符串,ActionInvocation负责查找结果字符串所对应的Result。一般Result会调用一些模板(JSP,HTML等)来呈现页面信息。
之后拦截器会被再次执行,执行的顺序与执行Action之前的顺序刚好相反,最后相应被返回给在web.xml中配置的那些过滤器(FilterDispatcher等)。

3、Struts2的各个模块的说明

Struts2中的各个模块各自是做什么的?有什么样的功能?都处于什么样的地位?下面跟着系统架构图的箭头一个一个的来查看。

FilterDispatcher:是整个Struts2的调度中心,根据ActionMapper的结果来决定是否处理请求,如果ActionMapper指出该URL应该被Struts2处理,那么他将会执行Action处理,并停止过滤器上还未执行的过滤器。
ActionMapper:提供HTTP请求与Action执行之间的映射,简单的说ActionMapper会判断这个请求是否应该被Struts2来处理,如果该请求应该被Struts2来处理,ActionMapper会返回一个对象来描述请求对应的ActionInvocation的信息。
ActionProxy:是一个特别的中间层,位于Action和xwork之间,使得我们有机会在将来引入更多的实现方式,比如通过WebService来实现。
Configuration Manager:是xwork配置的管理中心,简单说来就是可以把它看做struts.xml配置文件在内存中的对应;
struts.xml:是struts2的配置文件,主要负责URL和Action之间的映射关系配置等,以及执行Result页面跳转的基本信息。
ActionInvocation:真正调用并且执行Action,他拥有一个Action实例和这个Action所依赖的拦截器的实例,ActionInvocation会执行这些拦截器,Action以及相对应的Result。
Intercepter:拦截器是一些无状态的类,拦截器可以自动拦截Action,他们给开发者提供了再Action执行之前或者result执行之后执行一些功能代码的机会。类似于大家熟悉的javax.servlet.Filter。
Action:动作类是Struts2中的动作执行单元。用来处理用户请求并封装用户需要的数据返回给画面显示。
Result:就是不同视图类型的抽象封装模型,不同的视图类型会对应不同的result实现。Struts2支持多种视图模型,比如常用的jsp,FreeMaker等。
Template:各种视图类型的页面模板,例如,JSP就是一种模板页面视图。
Tag Subsystem:Struts2的标签库他抽象了三种不同的视图技术:JSP,Volecity,FreeMaker,可以在不同的视图技术中,几乎没有差别的使用这些标签。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: