Struts2源码分析一
来源:互联网 发布:徽商期货什么软件 编辑:程序博客网 时间:2024/05/16 17:49
一、Struts2架构图
请求首先通过Filter chain,Filter主要包括ActionContextCleanUp,它主要清理当前线程的ActionContext和Dispatcher;
FilterDispatcher主要通过AcionMapper来决定需要调用哪个Action。
ActionMapper取得了ActionMapping后,在Dispatcher的serviceAction方法里创建ActionProxy,ActionProxy创建ActionInvocation,然后ActionInvocation调用Interceptors,执行Action本身,创建Result并返回,当然,如果要在返回之前做些什么,可以实现PreResultListener。
二、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来解析。
三、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中实现。
更多文章见:http://www.16boke.com
- Struts2源码分析一
- struts2源码分析(一)(初始化)
- Struts2源码分析(一)
- Struts2源码分析--请求处理(一)
- Struts2源码粗略分析一:开发环境
- Struts2源码分析(一) 一一一 ModelDrivenInterceptor
- Struts2源码粗略分析一:准备开发环境
- Struts2源码分析(二) 一一一 StrutsRequestWrapper
- Struts2之struts2源码分析
- struts2源码分析 serviceAction
- Struts2源码分析
- struts2源码分析
- Struts2源码分析
- Struts2源码分析二
- struts2 源码分析
- struts2源码分析笔记
- Struts2源码分析
- struts2 部分源码分析
- win8mp3下载
- Linux 线程模型的比较:LinuxThreads 和 NPTL
- 算法导论第9章最坏情况为线性时间的选择算法
- c++中new和delete的使用方法
- 关于“网络女主播”
- Struts2源码分析一
- VS2010 建 C++ 工程时出现的 ipch 和 sdf 文件
- ABAP : Check (Ctrl + F2)
- Merge two sorted linked lists
- Linux下安装mysql
- cocos2D中HelloWorldScene.h和HelloWorldScene.cpp
- 使用kxml解析xml
- static_cast<>揭密
- .Net三层架构