Struts学习总结(二)---Struts2的架构和运行流程
2016-08-28 22:27
495 查看
日期: 2016-8-28
内容: Struts2的架构和运行流程
![](https://img-blog.csdn.net/20160828223819767?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
以下以简单的文字对这张图片作为一个初级的介绍,虽然这张图片基本涵盖了struts2的所有内容。
浅蓝色的部分是Struts Core,即Struts2的核心部分,是Struts2已经做好的功能模块,在我们实际开发的过程中通常不需要去改动的。
浅绿色的是Intercepters,即Struts2的拦截器。Struts2为我们提供了很多的拦截器,可以用于完成我们日常开发的绝大部分功能,当然,我们也可以根据自己的需求去定义自己的拦截器,这个需要根据我们自己开发模块的复杂程度去自己定义。
浅黄色的是User Created,即由开发人员创建的,包括的内容有struts.xml,Action,Template这些部分是每一个使用kStruts2开发的人员都必须会的。我们再开发的过程中基本上只涉及到这些地方的修改和配置。
接下来,FilterDispatcher将控制权委派给ActionProxy,ActionProxy调用配置管理器(Coniguration Manager)从配置文件中读取配置信息,然后创建ActionInvocation对象实际上ActionInvocation处理过程就是Struts2处理请求的过程。在ActionInvocation被创建的同时,填充了需要的所有对象和信息,他在调用Action之前会调用所有的配置的拦截器。
一旦Action执行完成返回结果字符串,ActionInvocation负责查找结果字符串所对应的Result。一般Result会调用一些模板(JSP,HTML等)来呈现页面信息。
之后拦截器会被再次执行,执行的顺序与执行Action之前的顺序刚好相反,最后相应被返回给在web.xml中配置的那些过滤器(FilterDispatcher等)。
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,可以在不同的视图技术中,几乎没有差别的使用这些标签。
内容: 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,可以在不同的视图技术中,几乎没有差别的使用这些标签。
相关文章推荐
- Struts2学习笔记之struts.xml配置常量和Action处理流程
- 《研磨struts2》第三章 Struts2的架构和运行流程 之 3.2 Struts2的运行流程
- Struts2平凡之路(三)Struts2架构和运行流程
- Struts学习总结(九)---使用Struts2实现用户信息的CRUD操作(四:删除操作)
- Struts学习总结(六)---使用Struts2实现文件下载
- 《研磨struts2》第三章 Struts2的架构和运行流程 之 3.1 Struts2的系统架构
- 【转载】struts 学习总结----开发流程
- struts2学习之运行流程及源码第一篇
- 【转载】Struts2学习总结----struts.xml 配置
- Struts学习总结(九)---使用Struts2实现用户信息的CRUD操作(三:修改操作)
- 学习struts2建bbs总结五:使用jquery+ajax验证用户名是否存在以及struts效验信息不断重复的问题
- struts2 学习总结 ---- Struts-tags
- struts1 struts2 spring 各自的运行机制,工作流程(整理)
- Struts2学习总结(3)--值栈,Ognl表达式,Struts标签库,国际化,数据校验,拦截器
- Struts2学习日志(3)编写Struts简单流程
- 《研磨struts2》第三章 Struts2的架构和运行流程 之 3.1 Struts2的系统架构
- 系统学习SSH_Day_001_Struts2——Struts背后运行机制
- Struts 2的架构和运行流程
- Struts学习总结(七)---使用Struts2实现用户信息的CRUD操作(一:查询操作)
- Struts学习总结(五)---使用Struts2实现单个文件上传