`

struts2 valueStack 解析(源码解读)

 
阅读更多

1 什么是valueStack

  我们首先看一下struts2核心过滤器的源码。

  我们查看deFilter方法,我们跟进execute.executeAction(request, response, mapping); 再次跟进直到Dispatcher类中

  

 讲解一下上面的源码,我们重点查看蓝色选中的代码,我们就是首先在request里面取出值栈对象,

我们可以查看一下上面的key,跟进发现 public static final String STRUTS_VALUESTACK_KEY = "struts.valueStack";

在我们第一次访问的时候,值栈对象肯定是空的,我们查看上面的第二个if的代码块,也就是ctx.getContext(),

  public ValueStack getValueStack() {
        return (ValueStack) get(VALUE_STACK);
    }

 



 上面的代码就是

 这个也就是获得valueStack的源码。我们获得了valueStack之后,我们就直接把valueStack放进了request域对象里面了

根据上面的分析,我们知道每一次发起请求,valueStack都是从request里面取值,但是每一次请求最开始valueStack

都是空的,所以都是后面的ActionContext中取出valueStack值,所以一个请求一个valueStack,valueStack的生命周期和一个

request的生命周期是相同的,都是从一个请求开始,然后当给出相应的时候,结束。

 

2 valueStack 的内部结构

  在struts中,对ognlContext进行了包装,我们查看valueStack的源码

 

  这个CompoundRoot这个就是valueStack的根节点,我们跟进查看这个compoundRoot,我们发现其实CompoundRoot继承了ArrayList,也就是说valueStack的root就是一个ArrayList集合。而valueStack的context对象其实就是ognlContext, 这个context是一个map集合,在context中,存储的都是一些常见的web元素。例如request,等常见的web元素。 其实struts2在设计的时候,非常有意思,在这个context中,也包含上面的root的,只不过struts2把这个root给抽取出来了,单独的做成了一个结构,然后在context中存储的是root的引用。对于context是ognlcontext我们可以给出证明。



 上面我们给出的是valueStack的实现类,我们在setRoot方法中,我们可以发现这个在最后被强转成了ognlcontext,我们查看下面的图片,可以让我们更好的理解值栈的内部结构。

 

 

 

  • 大小: 23.2 KB
  • 大小: 4.9 KB
  • 大小: 6 KB
  • 大小: 24.9 KB
  • 大小: 25.1 KB
分享到:
评论

相关推荐

    struts2源码解析.pdf

    在"struts2源码解析.pdf"文档中,主要探讨了以下几个关键组件及其功能: 1. **ActionContext**: - `ActionContext`是Struts2的核心上下文,它存储了与当前Action执行相关的所有信息,如请求参数、session数据等。...

    struts2权威指南源码

    在深入理解Struts2框架的源码之前,我们需要先对它的基本架构和核心概念有所了解。 1. **Struts2的核心组件**: - **FilterDispatcher**:这是Struts2的前端控制器,负责接收HTTP请求并分发到相应的Action。 - **...

    Struts2权威指南源码(完整),不含JAR文件

    本资源包含的是《Struts2权威指南》一书所配套的源码,但不包括JAR文件。了解并学习这些源码,可以帮助开发者深入理解Struts2的工作原理和内部机制。 Struts2的核心组件包括: 1. **Action**:Action是业务逻辑的...

    Struts2源代码与源码解析文档

    Struts2的源码解析文档通常会涵盖以下几个核心部分: 1. **FilterDispatcher**:这是Struts2框架的入口点,负责拦截HTTP请求并根据配置将请求转发到相应的Action。源码分析会解释其如何处理请求、如何查找Action及...

    struts2源码解析[归纳].pdf

    这份"struts2源码解析[归纳].pdf"文档显然深入探讨了Struts2的核心组件和工作原理。以下是对其中提到的关键概念的详细解释: 1. **ActionContext**: ActionContext是Struts2中一个非常重要的类,它封装了当前请求...

    struts2 权威指南 源码

    《Struts2权威指南》是李刚先生撰写的一本深入解析Struts2框架的专业书籍,其源码的提供对于学习和理解Struts2的工作原理非常有帮助。 源码分析: 1. **Action与结果类型**:在Struts2中,Action是业务逻辑的载体...

    Struts2中xwork源码

    本文将深入探讨XWork的源码,解析其设计理念和关键实现,帮助开发者更好地理解和使用Struts2。 1. **ActionInvocation**:XWork的核心是ActionInvocation,它是执行动作的实际载体。ActionInvocation维护了动作执行...

    Struts 2权威指南源码

    本资源“Struts 2权威指南源码”包含了该框架的详细学习材料,总共21章,覆盖了从基础到高级的全方位内容。以下是对这些章节可能涵盖的知识点的详细解析: 1. **Struts 2概述**:介绍Struts 2的核心概念,发展历程...

    TestStruts2JSON程序源码

    "TestStruts2JSON"程序源码很显然是一个用于测试Struts2框架如何处理和返回JSON数据的示例。 在Struts2中,JSON支持是通过Struts2的插件系统实现的,主要涉及到以下几个关键知识点: 1. **Struts2 JSON插件**:...

    Struts2源码

    通过尚硅谷的源码分析,我们可以看到Struts2的内部工作机制,如ActionInvocation的调用流程、Interceptor的执行顺序、以及RequestProcessor如何解析HTTP请求。PPT课件则可能涵盖了Struts2的安装配置、基本使用、高级...

    struts2权威指南光盘源码-第18章源码

    - **`struts2struts1`** 模块:这部分源码可能包含了如何在Struts2应用中使用Struts1的Action、Form Bean和配置信息。Struts2提供了`Struts1Plugin`来支持这种集成,使得现有的Struts1应用可以无缝迁移到Struts2,...

    Struts2 src 源码下载

    这个压缩包包含的"src_java_xwork"和"src_java_struts2"是Struts2的核心源码,分别对应XWork框架和Struts2框架的主要部分。 XWork是Struts2的基础,它提供了一套行动调度、类型转换、拦截器等基础服务。在"src_java...

    struts2下的xwork源码

    7. **OgnlValueStack**:Struts2使用OGNL(Object-Graph Navigation Language)作为默认的表达式语言,OgnlValueStack是ValueStack的实现,提供OGNL表达式的解析和操作。 8. **ResultTypes**:Struts2支持多种...

    struts2解析文件

    - **ValueStack**: Struts2中的ValueStack是一个对象栈,用于存储ActionContext中的数据。它可以简化视图层的数据访问,只需通过OGNL表达式即可访问栈中的对象。 - **OGNL(Object-Graph Navigation Language)**: ...

    struts2的源码

    以下是一些从Struts2源码中可以学习到的重要知识点: 1. **Action Mapping**:在Struts2中,Action类是处理用户请求的核心组件。源码揭示了Action是如何通过ActionMapping进行配置和映射的,如何根据不同的URL或...

    struts2 ognl源码

    在这个主题中,我们将深入探讨Struts2 OGNL2.6.11的源码,了解其内部工作原理和关键功能。 首先,OGNL作为一个强大的表达式语言,它的主要功能包括属性访问、方法调用、集合操作以及动态对象创建。在Struts2中,...

    struts-2.3.14.1源码

    在深入理解Struts2的源码之前,我们需要对它的主要组件有一个基础的认识。 1. **FilterDispatcher**:这是Struts2的核心控制器,它是Struts2框架的入口点。当一个HTTP请求到达时,FilterDispatcher会根据配置信息...

    struts-2.1.8.1源码

    XWork的许多组件被Struts 2直接使用,如ActionContext、ValueStack和Interceptor等。 - **ActionContext**:ActionContext是Struts 2中保存当前线程上下文信息的对象,它包含请求、响应、session、application等Web...

    struts-2.1.8.1源码和struts-2.3.15.1源码

    总之,这两个Struts 2版本的源码提供了丰富的学习资源,帮助开发者提升对MVC框架的理解,提高开发效率,并能更好地应对实际项目中的挑战。通过阅读源码,我们可以学习到框架设计的最佳实践,为自己的项目开发提供...

Global site tag (gtag.js) - Google Analytics