关闭

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

206人阅读 评论(0) 收藏 举报
分类:

日期: 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的体系结构:

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






1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:71694次
    • 积分:1426
    • 等级:
    • 排名:千里之外
    • 原创:67篇
    • 转载:36篇
    • 译文:0篇
    • 评论:9条
    最新评论