org.apache.struts2.component 视图组件,如tokent,tree
org.apache.struts2.config 与配置相关的接口和类
org.apahce.struts2.dispatcher struts2的核心包
org.apache.struts.impl 只定义了三个类:StrutsActionProxy StrutsActionProxyFactory StrutsObjectFactory,这三个类是对xwork的扩展
org.apache.struts2.interceptor 定义内置的拦截器
org.apache.struts2.util 工具包
org.apache.struts2.validators 定义类:DWRValidator
org.apache.struts2.views 执行freemarker、jsp、velocy等不同的页面呈现
对各种配置信息xml或者properties统一转化为java对象处理
名称 |
javaPackage |
描述 |
Container |
xwork2.inject |
容器定义接口,对象管理基础构建 |
ContainerImpl |
xwork2.inject |
实现类,提供对象声明周期管理和依赖注入功能 |
PackageConfig |
xwork2.config.entities |
定义 xml package 节点 对应的数据结构 |
ConfigurationProvider |
xwork2.config |
配置加载的统一接口,加载Container和PackageConfig |
ContainerProvider |
Xwork2.config |
Container的配置加载接口,实现类需要初始化容器内所有对象 |
PackageProvider |
Xowrk2.config |
PackageConfig的配置加载接口 |
ContainerBuilder |
Xowrk2.inject |
初始化时构造容器 |
PackageConfigProvidier |
PackageConfig内部类 |
初始化时构造PackageProvider |
ConfigurationManager |
Xwork2.config |
操作代理类,包含了所有ContainerProvider和PackageProvider的实现 |
Configurations |
Xwork2.config |
配置数据的管理类,运行时获取配置的基本接口 |
FilterDispatcher
实现了FIlter接口和StrutsStatics接口
当容器启动时调用FilterDispatcher.init(FilterConfig filterConfig)方法。该方法创建Dispatcher对象,并根据FilterConfig初始化该对象。
名称 |
javaPackage |
描述 |
FilterDispatcher |
Struts2.dispatcher |
过滤器,执行Action,清理ActionContext避免内存泄露, 处理静态内容,为请求启动xwork的拦截器 |
Dispatcher |
Struts2.dispatcher |
核心分发器,http请求处理的实际场所 |
PrepareOperations |
Struts2.dispatcher.ng |
http请求预处理 |
ExecuteOperations |
Struts2.dispatcher.ng |
http请求逻辑处理 |
ActionProxy |
Xwork2 |
Xwork的入口 |
ActionInvocation |
Xwork2 |
负责Action 和拦截器的调用 |
ActionContext |
Xwork2 |
提供xwork处理请求的数据环境 |
ValueStack |
Xowrk2.util |
数据环境中提供表达式运算的工具类,也是xwork中进行数据访问的基础 |
Result |
Xwork2 |
负责输出到视图 |
1. 浏览器提交请求
2. 请求经过一系列的filter(其中的ActionContextCleanUp 可选过滤器,当需要strtus2和其他框架集成时很有帮助,如SiteMesh)
3.FilterDispatcher 询问ActionMapper来决定调用某个Action,将请求交给 ActionProxy处理
调用FilterDispatcher.doFilter()对 request对象进行封装,调用ActionMapper.getMapping得到 ActionMapping对象,该对象包括三个参数:Action的name namespace method。 如果返回的ActionMapping对象为null,则认为用户请求不是Action,如果该请求已struts开头,会查找在web.xml中 FilterDispatcher中 package参数配置的路径,将其中内容直接在页面上显示,如txt文件。
FilterDispatcher.findStatcisResource()查找静态资源
如果返回ActionMapping对象,则调用Dispatcher.serviceAction()
Dispatcher.serviceAction() 加载struts的配置文件,如struts-default.xml struts-plugin.xml struts.xml,并保存在xwork2.config.entities.XxxxConfig类中。
4.ActionProxy通过 ConfigurationManager访问配置文件,找到Action对应的类和方法。
类 XmlConfigurationProvider负 责配置文件的读取和解析, addAction 负责读取 action 标签,并把数据保存在ActionConfig中; addResultType() 将result-type标签转换为ResultTypeConfig对象;拦截器, addPackage等。
配置信息加载完后,通过ActionProxyFactory 创建Action的代理对象 ActionProxy。
ActionProxy 是Action的执行起始点,它的实现是DefaultActionProxy和DefaultActionProxyFactory
5.ActionProxy创建ActionInvocation的实例
ActionInvocation标示Action的执行状态,它的实现是DefaultActionInvocation。 该类的invoke() 方法实现了拦截器的递归调用和执行Action的execute() 方法
6. ActionInvocation使用命令模式来调用,在调用Action前后调用Interceptor
自定义Interceptor继承 AbstractInterceptor
ActionProxy————》ActionInvocation——》Action
7. 当action执行完毕,ActionInvocation根据配置文件找到对应的返回结果