1. Struts2架构图

请求首先通过Filter chain,Filter主要包括ActionContextCleanUp,它主要清理当前线程的ActionContext和Dispatcher;FilterDispatcher主要通过AcionMapper来决定需要调用哪个Action。 
        ActionMapper取得了ActionMapping后,在Dispatcher的serviceAction方法里创建ActionProxy,ActionProxy创建ActionInvocation,然后ActionInvocation调用Interceptors,执行Action本身,创建Result并返回,当然,如果要在返回之前做些什么,可以实现PreResultListener。

2. Struts2部分类介绍 
这部分从Struts2参考文档中翻译就可以了。 
ActionMapper 
        ActionMapper其实是HttpServletRequest和Action调用请求的一个映射,它屏蔽了Action对于Request等java Servlet类的依赖。Struts2中它的默认实现类是DefaultActionMapper,ActionMapper很大的用处可以根据自己的需要来设计url格式,它自己也有Restful的实现,具体可以参考文档的docs/actionmapper.html。 
ActionProxy&ActionInvocation 
        Action的一个代理,由ActionProxyFactory创建,它本身不包括Action实例,默认实现DefaultActionProxy是由ActionInvocation持有Action实例。ActionProxy作用是如何取得Action,无论是本地还是远程。而ActionInvocation的作用是如何执行Action,拦截器的功能就是在ActionInvocation中实现的。 
ConfigurationProvider&Configuration 
        ConfigurationProvider就是Struts2中配置文件的解析器,Struts2中的配置文件主要是尤其实现类XmlConfigurationProvider及其子类StrutsXmlConfigurationProvider来解析。

3. Struts2请求流程 
1、客户端发送请求 
2、请求先通过ActionContextCleanUp-->FilterDispatcher 
3、FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action 
4、如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy,这儿已经转到它的Delegate--Dispatcher来执行 
5、ActionProxy根据ActionMapping和ConfigurationManager找到需要调用的Action类 
6、ActionProxy创建一个ActionInvocation的实例 
7、ActionInvocation调用真正的Action,当然这涉及到相关拦截器的调用 
8、Action执行完毕,ActionInvocation创建Result并返回,当然,如果要在返回之前做些什么,可以实现PreResultListener。添加PreResultListener可以在Interceptor中实现。

Struts2源码阅读(一)_Struts2框架流程概述相关推荐

  1. 12.源码阅读(app启动流程-android api 26)

    activity的启动流程之前已经通过源码了解了,那么app的启动流程是怎样的,从我们按下app的图标,到应用启动起来显示出画面,中间都经历了什么? 安卓是基于java的,所以和java有一定的相似性 ...

  2. struts2源码阅读

    Struts2的工作机制分析及实例 一.概述 本章讲述Struts2的工作原理. 读者如果曾经学习过Struts1.x或者有过Struts1.x的开发经验,那么千万不要想当然地以为这一章可以跳过.实际 ...

  3. Spring 源码阅读 之 Spring框架加载

    说起第一次阅读Spring Framework源码,大概还是2010年吧,那个时候还不懂技巧和方法,一头扎在代码的汪洋大海里,出不来了.后面几年偶尔断断续续的也看过几次,都是不得要领,最后都是无疾而终 ...

  4. Scrapy源码阅读分析_2_启动流程

    From:https://blog.csdn.net/weixin_37947156/article/details/74436333 使用 PyCharm 打开下载好的 Scrapy 源码(gith ...

  5. [源码阅读]——Sylar服务器框架:配置模块

    配置模块 配置模块概述 配置模块相关类 YAML配置文件 类型转换的偏特化 配置模块与日志模块的整合 还需进一步理解问题 配置模块概述   在sylar的配置模块设计中,采用约定优于配置的思想,其常规 ...

  6. Struts2源码阅读(三)_DispatcherConfigurationProvider

    首先强调一下struts2的线程程安全,在Struts2中大量采用ThreadLocal线程局部变量的方法来保证线程的安全,像Dispatcher等都是通过ThreadLocal来保存变量值,使得每个 ...

  7. Struts2源码阅读(六)_ActionProxyActionInvocation

    下面开始讲一下主菜ActionProxy了.在这之前最好先去了解一下动态Proxy的基本知识. ActionProxy是Action的一个代理类,也就是说Action的调用是通过ActionProxy ...

  8. Struts2源码阅读(五)_FilterDispatcher核心控制器

    Dispatcher已经在之前讲过,这就好办了.FilterDispatcher是Struts2的核心控制器,首先看一下init()方法. public void init(FilterConfig ...

  9. Struts2源码阅读(四)_DispatcherConfigurationProvider续

    接下来第三步:init_LegacyStrutsProperties() 调用的是调用的是LegacyPropertiesConfigurationProvider 通过比较前面DefaultProp ...

最新文章

  1. Scalaz(7)- typeclass:Applicative-idomatic function application
  2. curl提示不支持https协议解决方法
  3. 老子不想考试了!英国计算机系学生黑掉校长邮箱:倒闭学校,取消考试
  4. python好学吗1001python好学吗-怎样才能写出 Pythonic 的代码 #P1001#
  5. 【组合数学】生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常用的生成函数 | 与常数相关 | 与二项式系数相关 | 与多项式系数相关 )
  6. mysql 日期查询_Mysql日期查询list
  7. 对象工厂PHP,php – 有一个工厂用于创建对象的好处?
  8. eclipse修改项目访问前缀
  9. android软件获取系统签名
  10. centos7 rabbitmq安装/配置
  11. jax-rs jax-ws_创建一个简单的JAX-RS MessageBodyWriter
  12. Linux下串口ttyS2,ttyS3不能用的问题解决办法
  13. wsdl2java生成服务端_根据wsdl,apache cxf的wsdl2java工具生成客户端、服务端代码
  14. FAT32 R0.12b f_mkfs应用实例
  15. 如何将WORD中的公式转为图片
  16. 百度网盘不限速——pandownlode与BaiduPCS-Go
  17. (附源码)ssm校园拼车服务系统 毕业设计211633
  18. C++类重载 operator()
  19. python对象、类
  20. FreeBSD安装(虚拟机)version:13.1

热门文章

  1. 论文浅尝 | 通过知识到文本的转换进行知识增强的常识问答
  2. Android官方开发文档Training系列课程中文版:APP的内存管理
  3. Android官方开发文档Training系列课程中文版:添加ActionBar之添加Action按钮
  4. 事件抽取与事理图谱的N个问题
  5. 知识图谱发展的三个时期以及事理图谱概念辨析
  6. 人工智能支撑马赛克战机理研究
  7. 知识图谱最新权威综述论文解读:知识表示学习部分
  8. svn 修改文件的可执行权限
  9. 洛谷 P1091 合唱队形
  10. Scala模式匹配和类型系统