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,我们查看下面的图片,可以让我们更好的理解值栈的内部结构。
相关推荐
在"struts2源码解析.pdf"文档中,主要探讨了以下几个关键组件及其功能: 1. **ActionContext**: - `ActionContext`是Struts2的核心上下文,它存储了与当前Action执行相关的所有信息,如请求参数、session数据等。...
在深入理解Struts2框架的源码之前,我们需要先对它的基本架构和核心概念有所了解。 1. **Struts2的核心组件**: - **FilterDispatcher**:这是Struts2的前端控制器,负责接收HTTP请求并分发到相应的Action。 - **...
本资源包含的是《Struts2权威指南》一书所配套的源码,但不包括JAR文件。了解并学习这些源码,可以帮助开发者深入理解Struts2的工作原理和内部机制。 Struts2的核心组件包括: 1. **Action**:Action是业务逻辑的...
Struts2的源码解析文档通常会涵盖以下几个核心部分: 1. **FilterDispatcher**:这是Struts2框架的入口点,负责拦截HTTP请求并根据配置将请求转发到相应的Action。源码分析会解释其如何处理请求、如何查找Action及...
这份"struts2源码解析[归纳].pdf"文档显然深入探讨了Struts2的核心组件和工作原理。以下是对其中提到的关键概念的详细解释: 1. **ActionContext**: ActionContext是Struts2中一个非常重要的类,它封装了当前请求...
《Struts2权威指南》是李刚先生撰写的一本深入解析Struts2框架的专业书籍,其源码的提供对于学习和理解Struts2的工作原理非常有帮助。 源码分析: 1. **Action与结果类型**:在Struts2中,Action是业务逻辑的载体...
本文将深入探讨XWork的源码,解析其设计理念和关键实现,帮助开发者更好地理解和使用Struts2。 1. **ActionInvocation**:XWork的核心是ActionInvocation,它是执行动作的实际载体。ActionInvocation维护了动作执行...
本资源“Struts 2权威指南源码”包含了该框架的详细学习材料,总共21章,覆盖了从基础到高级的全方位内容。以下是对这些章节可能涵盖的知识点的详细解析: 1. **Struts 2概述**:介绍Struts 2的核心概念,发展历程...
"TestStruts2JSON"程序源码很显然是一个用于测试Struts2框架如何处理和返回JSON数据的示例。 在Struts2中,JSON支持是通过Struts2的插件系统实现的,主要涉及到以下几个关键知识点: 1. **Struts2 JSON插件**:...
通过尚硅谷的源码分析,我们可以看到Struts2的内部工作机制,如ActionInvocation的调用流程、Interceptor的执行顺序、以及RequestProcessor如何解析HTTP请求。PPT课件则可能涵盖了Struts2的安装配置、基本使用、高级...
- **`struts2struts1`** 模块:这部分源码可能包含了如何在Struts2应用中使用Struts1的Action、Form Bean和配置信息。Struts2提供了`Struts1Plugin`来支持这种集成,使得现有的Struts1应用可以无缝迁移到Struts2,...
这个压缩包包含的"src_java_xwork"和"src_java_struts2"是Struts2的核心源码,分别对应XWork框架和Struts2框架的主要部分。 XWork是Struts2的基础,它提供了一套行动调度、类型转换、拦截器等基础服务。在"src_java...
7. **OgnlValueStack**:Struts2使用OGNL(Object-Graph Navigation Language)作为默认的表达式语言,OgnlValueStack是ValueStack的实现,提供OGNL表达式的解析和操作。 8. **ResultTypes**:Struts2支持多种...
- **ValueStack**: Struts2中的ValueStack是一个对象栈,用于存储ActionContext中的数据。它可以简化视图层的数据访问,只需通过OGNL表达式即可访问栈中的对象。 - **OGNL(Object-Graph Navigation Language)**: ...
以下是一些从Struts2源码中可以学习到的重要知识点: 1. **Action Mapping**:在Struts2中,Action类是处理用户请求的核心组件。源码揭示了Action是如何通过ActionMapping进行配置和映射的,如何根据不同的URL或...
在这个主题中,我们将深入探讨Struts2 OGNL2.6.11的源码,了解其内部工作原理和关键功能。 首先,OGNL作为一个强大的表达式语言,它的主要功能包括属性访问、方法调用、集合操作以及动态对象创建。在Struts2中,...
在深入理解Struts2的源码之前,我们需要对它的主要组件有一个基础的认识。 1. **FilterDispatcher**:这是Struts2的核心控制器,它是Struts2框架的入口点。当一个HTTP请求到达时,FilterDispatcher会根据配置信息...
XWork的许多组件被Struts 2直接使用,如ActionContext、ValueStack和Interceptor等。 - **ActionContext**:ActionContext是Struts 2中保存当前线程上下文信息的对象,它包含请求、响应、session、application等Web...
总之,这两个Struts 2版本的源码提供了丰富的学习资源,帮助开发者提升对MVC框架的理解,提高开发效率,并能更好地应对实际项目中的挑战。通过阅读源码,我们可以学习到框架设计的最佳实践,为自己的项目开发提供...