Struts2框架源码分析:概况
Struts2和Struts1.x有什么区别? 他们各自发展轨迹又如何?
- Struts1是Apache社区在2000年3月31号发布的一款javaweb框架.
- 随着时代进步,Struts1的不足显而易见,此时Opensymphony开源了一款优秀的web框架,名为Webwork2.
- Apache社区在2005年12月14日宣布Struts项目和Webwork2项目合并,推出名为Struts2的Web框架.
- Strus2框架开始进入辉煌时代.
Struts2依赖于那些核心技术?
- 表示层技术, Struts2表示层主要是整合, 如整合Freemarker或Velocity为核心的模板技术、构建Flash应用的Flex技术、ajax技术等,以plugin形式进行整合.
- 设计模式, Struts2源码中统分使用了设计模式,如 Command、ThreadLocal、Decorator、Strategy、Builder、Chain Of Responsibility、Proxy等设计模式.
- OGNL表达式引擎, 表达式引擎是通过特定的语法进行操作java对象(读、写), OGNL在Struts2中主要用来解决不同形式的数据之间的转化和通信.
- Xwork框架, 一个基于Command设计模式的事件请求执行框架, Struts2负责与Web容器打交道部分,剩余的工作由Xwork来完成.
Struts2可以分为那两条逻辑运行主线?
Struts2严格遵守Servlet标准,通过Filter接口处理HTTP请求,通过配置web.xml引入Struts2框架:
|
|
- 第一条主线是Struts2初始化, 初始化通过init方法进行完成, 初始化主要包括: 框架元素的初始化, 如框架内置对象的创建和缓存, 如 容器的创建.
- 第二条主线是HTTP请求处理主线, 该主线是Struts2核心主线, 划分为2个阶段:
- 第一阶段: HTTP 请求预处理, 为业务逻辑执行做必要的数据环境和运行环境, 主要是和web容器打交道. (此阶段由Struts2完成, struts2-core.2.x.jar )
- 第二阶段: XWork执行业务逻辑, 该阶段不依赖web容器,主要用来处理业务逻辑,与第一阶段完全解耦. (此阶段由Xwork框架完成, xwork-core.2.x.jar)
Struts2通过哪些元素的相互配合来完成初始化运行主线?
Struts2中的容器及其实现类
- Container, 容器定义接口,是Struts2内部进行对象管理的基础构建.
- ContainerImpl, 容器的实现类, 内部实现了Struts2进行对象生命周期的管理和依赖注入的基本功能.
- PackageConfig, 其中定义了事件响应模型的完整数据结构.
Struts2中容器的加载接口(Provider)和容器的构造器(Buider)
- ConfigurationProvider, 配置加载结构的统一接口。 Struts2将初始化元素分为Container和PackageConfig两类, 这里使用了多重继承将两类配置加载接口进行统一.
- ContainerProvider, Container的配置加载接口, 其实现类需要负责初始化容器中的所有对象.
- PackageProvider, PackageConfig的配置加载接口, 其实现类需要负责初始化用于处理事件请求的配置对象.
- ContainerBuilder, Container的构造器,用于在初始化是构造容器.
- PackageConfigBuilder, PackageConfig的构造器,用在初始化是构造PackageConfig.
Struts2初始化主线的辅助元素
- ConfigurationManager, 配置行为操作代理类,包含所有ContainerProvider、PackageProvider 的实现及所有配置的机构化数据.
- Configurationm, Struts2配置数据的管理类,作为运行时获取配置的基本接口, 承载所有配置的结构化数据和操作方法.
Struts2通过哪些元素的相互配合来完成HTTP请求处理主线?
- Struts2 进行HTTP请求预处理阶段的主要微观元素
- Dispatcher, Struts2的核心分发器,是Struts2进行HTTP请求处理的实际场所
- PrepareOperations, Struts2进行HTTP请求预处理操作集合
- ExecuteOperations, Struts2进行HTTP请求逻辑处理的操作集合.
- Xwork 执行业务逻辑阶段的主要微观元素 (7大元素贯穿XWork事件执行的生命周期)
- ActionProxy, XWork生产线中的执行环境, 整合生产线的入口, 包含所有执行的细节.
- ActionInvocation, 生产线中的调度者, 负责调度生产线各元素的执行顺序.
- Interceptor, 生产线中的工序序列, 用来丰富生产线的功能
- Action, 生产线中的核心工序, 负载核心逻辑调用和实现.
- ActionContext, 生产线的辅助设备, 提供生产线运行的必备的数据环境.
- ValueStack, 数据环境中提供表达式运算的工具类,也是Xwork进行数据访问的基础.
- Result, 生产线中的末端设备, 负责输出生产线的生产结果.
XWork中7大元素的调用关系
Struts2中有哪些配置表现形式 ?
- web.xml, Struts2入口程序定义、运行参数定义. (应用级)
- struts2-default.xml, 框架级别的定义, 包含Struts2所有的基本构成元素定义. (框架级)
- struts.xml, 应用级别定义, 包含应用级别覆盖框架级别的默认行为定义. (应用级)
- default.properties, 框架级别定义, Struts2默认的运行参数配置. (框架级)
- struts.proeperties, 应用级别定义, 用于覆盖框架级运行参数覆盖定义.(应用级)
- struts-plugin.xml, 应用级别定义, struts.xml的扩展, strtus2所支持的插件形式的配置文件. (应用级)
Struts2中的配置元素可以分为哪两个大类 ?
- 容器配置元素: 节点分为bean、constant
- 事件映射关系配置元素: 节点为 package