`

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中关于ValueStack的一些操作

    2、 EL,全称Express Language,即表达式语言。不要被语言吓倒,它是简单的对象导航语言。有字符串(例如:方法名)和特殊字符组成(例如用.表示调用对应的属性方法)。通过EL,我们可以存、取对象数据,而且还可以...

    xwork-sources

    struts2.0 ValueStack 相关源码

    马士兵Struts2笔记2013

    建立一个Struts2 工程,用Action的属性接收参数,使用Domain Model (实体模型) 接收参数,Struts2_2.1.6版本的中文问题,Struts模块包含,Struts简单数据验证 ,Struts ValueStack(值栈) Debug,Value Stack ...

    Struts中的ognl和valueStack

    深入讲解Struts中的ognl和valueStack

    Struts2入门教程(全新完整版)

    十二、总结 本教程对struts2的基本知识进行了一些说明,关于struts2的更多详细内容应参看struts2的官方文档及提供的app实例。 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图...

    Struts2中的参数传递

    我们知道,Struts2完成参数传递处理工作的基础是OGNL和ValueStack。而在这个 过程中,我也把Struts2所要做的工作大致归纳为两个方面: 1. 对OGNL操作进行封装,完成OGNL表达式所表示的值到Java对象的值传递机制 2. ...

    Struts2 in action中文版

    第1章 Struts 2:现代Web框架 2 1.1 Web应用程序:快速学习 2 1.1.1 构建Web应用程序 2 1.1.2 基础技术简介 3 1.1.3 深入研究 6 1.2 Web应用程序框架 7 1.2.1 什么是框架 7 1.2.2 为什么使用框架 8 1.3 Struts 2框架...

    Struts2 Value Stack Contents 中取值、多个集合数组

    Struts2 Value Stack Contents 中取值、多个集合数组示例

    struts2的深入理解内核解析

    struts2的深入理解内核解析,当请求url时候,struts容器干了什么,action什么时候被创建,valuestack什么时候被创建

    struts2 学习例子

    Struts2标签库提供了主题、模板支持,极大地简化了视图页面的编写,而且,struts2的主题、模板都提供了很好的扩展性。实现了更好的代码复用。Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,...

    struts2 标签库使用文档

    Struts2标签库的组成 Struts2框架的标签库可以分为以下三类: 用户界面标签(UI标签):主要用来生成HTML元素的标签。 表单标签:主要用于生成HTML页面的FORM元素,以及普通表单元素的标签。 非表单标签:主要用于生成...

    Struts用的ognl和valueStack(vs)实例

    Struts用的ognl和valueStack(vs)实例

    Struts2练习Demo以及随笔

    Struts的开发步骤、OGNL、ValueStack、Action核心、Result基本原理、Struts2核心标记库、Struts2拦截器、自定义拦截器、UI标记、非UI标记、资源文件国际化等等实例全面使用。

    Struts2基础教程

    讲解Struts2入门基础,包括Action、Result、ValueStack等,Struts2初学者会有帮助

    Struts2框架基础 二

    OGNL表达式 interceptor拦截器 valuestack的存入 /取出

    在线培训:ValueStack

    培训主要学习以下几个知识点: 1、制作PPT,讲解栈的特点和使用方法 2、编码实现回文对 3、制作PPT,讲解Struts2中的ValueStack 4、编码改变ValueStack中的对象的顺序

    ValueStack使用参考

    ValueStack的使用方法和一些技能

    struts2模拟

    struts2模拟模拟工具,可以实现action访问,我表单属性的自动封装。提供了页面显示和跌带器,利用struts2值栈(valueStack)和对象栈map栈的思想。可以用来了解struts2的执行过程,纯属个人学习

    linjin101#javaStudy#Struts2中的OGNL和值栈ValueStack1

    1、什么是值栈 2、值栈的内部结构 3、ActionContext和ValueStatck的关系 4、如何获取值栈对象 5、向值栈存数据 6、从值栈中获取数据

Global site tag (gtag.js) - Google Analytics