Struts2源码阅读(一)_Struts2框架流程概述
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框架流程概述相关推荐
- 12.源码阅读(app启动流程-android api 26)
activity的启动流程之前已经通过源码了解了,那么app的启动流程是怎样的,从我们按下app的图标,到应用启动起来显示出画面,中间都经历了什么? 安卓是基于java的,所以和java有一定的相似性 ...
- struts2源码阅读
Struts2的工作机制分析及实例 一.概述 本章讲述Struts2的工作原理. 读者如果曾经学习过Struts1.x或者有过Struts1.x的开发经验,那么千万不要想当然地以为这一章可以跳过.实际 ...
- Spring 源码阅读 之 Spring框架加载
说起第一次阅读Spring Framework源码,大概还是2010年吧,那个时候还不懂技巧和方法,一头扎在代码的汪洋大海里,出不来了.后面几年偶尔断断续续的也看过几次,都是不得要领,最后都是无疾而终 ...
- Scrapy源码阅读分析_2_启动流程
From:https://blog.csdn.net/weixin_37947156/article/details/74436333 使用 PyCharm 打开下载好的 Scrapy 源码(gith ...
- [源码阅读]——Sylar服务器框架:配置模块
配置模块 配置模块概述 配置模块相关类 YAML配置文件 类型转换的偏特化 配置模块与日志模块的整合 还需进一步理解问题 配置模块概述 在sylar的配置模块设计中,采用约定优于配置的思想,其常规 ...
- Struts2源码阅读(三)_DispatcherConfigurationProvider
首先强调一下struts2的线程程安全,在Struts2中大量采用ThreadLocal线程局部变量的方法来保证线程的安全,像Dispatcher等都是通过ThreadLocal来保存变量值,使得每个 ...
- Struts2源码阅读(六)_ActionProxyActionInvocation
下面开始讲一下主菜ActionProxy了.在这之前最好先去了解一下动态Proxy的基本知识. ActionProxy是Action的一个代理类,也就是说Action的调用是通过ActionProxy ...
- Struts2源码阅读(五)_FilterDispatcher核心控制器
Dispatcher已经在之前讲过,这就好办了.FilterDispatcher是Struts2的核心控制器,首先看一下init()方法. public void init(FilterConfig ...
- Struts2源码阅读(四)_DispatcherConfigurationProvider续
接下来第三步:init_LegacyStrutsProperties() 调用的是调用的是LegacyPropertiesConfigurationProvider 通过比较前面DefaultProp ...
最新文章
- Scalaz(7)- typeclass:Applicative-idomatic function application
- curl提示不支持https协议解决方法
- 老子不想考试了!英国计算机系学生黑掉校长邮箱:倒闭学校,取消考试
- python好学吗1001python好学吗-怎样才能写出 Pythonic 的代码 #P1001#
- 【组合数学】生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常用的生成函数 | 与常数相关 | 与二项式系数相关 | 与多项式系数相关 )
- mysql 日期查询_Mysql日期查询list
- 对象工厂PHP,php – 有一个工厂用于创建对象的好处?
- eclipse修改项目访问前缀
- android软件获取系统签名
- centos7 rabbitmq安装/配置
- jax-rs jax-ws_创建一个简单的JAX-RS MessageBodyWriter
- Linux下串口ttyS2,ttyS3不能用的问题解决办法
- wsdl2java生成服务端_根据wsdl,apache cxf的wsdl2java工具生成客户端、服务端代码
- FAT32 R0.12b f_mkfs应用实例
- 如何将WORD中的公式转为图片
- 百度网盘不限速——pandownlode与BaiduPCS-Go
- (附源码)ssm校园拼车服务系统 毕业设计211633
- C++类重载 operator()
- python对象、类
- FreeBSD安装(虚拟机)version:13.1