struts2 原理介绍 笔记

主要的包

   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

负责输出到视图

 

调用图

 struts2 原理介绍 笔记_第1张图片

结构图

 

说明

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根据配置文件找到对应的返回结果


你可能感兴趣的:(struts2 原理介绍 笔记)