首先声明:本文是从博客园博友的文章转载过来的,感觉说的不错。在此附上地址:http://www.cnblogs.com/jerryxing/archive/2012/04/23/2467299.html

通过对struts2的一段时间的接触,将自己对OGNL的核心值栈说说。值栈:简单的说,就是存放action的堆栈,当我们提交一个请求道server端 action时,就有个堆栈,假设action在server端进行跳转,全部action共用一个堆栈,当须要保存在action中的数据时,首先从栈顶開始
搜索。若找到同样的属性名(与要获得的数据的属性名同样)时,即将值取出。但这样的情况可能出现找到的值不是我们想要的值。那么解决此问题须要用TOP语法 和N语法来进行解决。

当在客服端进行跳转时。当有请求提交到server的action时,仅仅有一个堆栈存在,堆栈中存放的是当前的请求的action。而原来那么则销毁了(本人观 点,感觉如同request请求一样)。 



  众所周知。Struts2的Action类通过属性能够获得全部相关的值,如请求參数、Action配置參数、向其它Action传递属性值(通过chain结果)等等。要获得 这些參数值,我们要做的唯一一件事就是在Action类中声明与參数同名的属性,在Struts 2调用Action类的Action方法(默认是execute方法)之前,就会为对应的Action属性赋值。

  要完毕这个功能,有非常大程度上。Struts 2要依赖于ValueStack对象。这个对象贯穿整个Action的生命周期(每一个Action类的对象实例会拥有一个ValueStack对象)。当 Struts 2接收到一个.action的请求后,会先建立Action类的对象实例。但并不会调用Action方法。而是先将Action类的对应属性放到
ValueStack对象的顶层节点(ValueStack对象相当于一个栈)。仅仅是全部的属性值都是默认的值。如String类型的属性值为 null,int类型的属性值为0等。

  在处理完上述工作后。Struts 2就会调用拦截器链中的拦截器。当调用全然部的拦截器后,最后会调用Action类的Action方法,在调用Action方法之前,会将 ValueStack对象顶层节点中的属性值赋给Action类中对应的属性。大家要注意,在这里就给我们带来了非常大的灵活性。也就是说。在Struts 2调用拦截器的过程中,能够改变ValueStack对象中属性的值。当改变某个属性值后。Action类的对应属性值就会变成在拦截器中最后改变该属性
的这个值。 



  从上面的描写叙述非常easy知道。在Struts 2的的Action类能够获得与属性同名的參数值就是通过不同的拦截器来处理的。如获得请求參数的拦截器是params,获得Action的配置參数的拦 截器是staticParams等。在这些拦截器内部读取对应的值,并更新ValueStack对象顶层节点的对应属性的值。而ValueStack对象
就象一个传送带,将属性值从一个拦截器传到了还有一个拦截器(当然。在这其间。属性值可能改变),最后会传到Action对象,并将ValueStack对 象中的属性的值终值赋给Action类的对应属性 



 众所周知,Strut 2的Action类通过属性能够获得全部相关的值,如请求參数、Action配置參数、向其它Action传递属性值(通过chain结果)等等。

要获得 这些參数值,我们要做的唯一一件事就是在Action类中声明与參数同名的属性,在Struts 2调用Action类的Action方法(默认是execute方法)之前,就会为对应的Action属性赋值。 



  要完毕这个功能。有非常大程度上,Struts 2要依赖于ValueStack对象。

这个对象贯穿整个Action的生命周期(每一个Action类的对象实例会拥有一个ValueStack对象)。当 Struts 2接收到一个.action的请求后,会先建立Action类的对象实例,但并不会调用Action方法,而是先将Action类的对应属性放到
ValueStack对象的顶层节点(ValueStack对象相当于一个栈)。仅仅是全部的属性值都是默认的值,如String类型的属性值为 null,int类型的属性值为0等。 



  在处理完上述工作后,Struts 2就会调用拦截器链中的拦截器,当调用全然部的拦截器后,最后会调用Action类的Action方法。在调用Action方法之前,会将 ValueStack对象顶层节点中的属性值赋给Action类中对应的属性。大家要注意,在这里就给我们带来了非常大的灵活性。也就是说。在Struts 2调用拦截器的过程中。能够改变ValueStack对象中属性的值,当改变某个属性值后。Action类的对应属性值就会变成在拦截器中最后改变该属性
的这个值。 



  从上面的描写叙述非常easy知道,在Struts 2的的Action类能够获得与属性同名的參数值就是通过不同的拦截器来处理的。如获得请求參数的拦截器是params,获得Action的配置參数的拦 截器是staticParams等。在这些拦截器内部读取对应的值,并更新ValueStack对象顶层节点的对应属性的值。而ValueStack对象
就象一个传送带。将属性值从一个拦截器传到了还有一个拦截器(当然,在这其间,属性值可能改变),最后会传到Action对象。并将ValueStack对 象中的属性的值终值赋给Action类的对应属性.

struts Value Stack 值栈的更多相关文章

  1. Struts学习之值栈的理解

    转自:http://blog.csdn.net/hanxuemin12345/article/details/38559979 页面一个请求发送过来,依次经过一系列拦截器(处理公共部分,如:往数据中心 ...

  2. Struts2学习记录-Value Stack(值栈)和OGNL表达式

    仅仅是学习记录.把我知道的都说出来 一.值栈的作用 记录处理当前请求的action的数据. 二,小样例 有两个action:Action1和Action2 Action1有两个属性:name和pass ...

  3. Ognl值栈对象及struts标签

    用户每次访问struts的action,都会创建一个Action对象.值栈对象.ActionContext对象:然后把Action对象放入值栈中: 最后再把值栈对象放入request中,传入jsp页面 ...

  4. Struts2 (三) — OGNL与值栈

    一.OGNL表达式 1.概述 1.1什么是OGNL ​ OGNL是Object-Graph Navigation Language的缩写,俗称对象图导航语言. 它是一种功能强大的表达式语言,通过它简单 ...

  5. 10.Struts2值栈

    1.什么是值栈 * 值栈就相当于Struts2框架的数据的中转站,向值栈存入一些数据.从值栈中获取到数据. * ValueStack 是 struts2 提供一个接口,实现类 OgnlValueSta ...

  6. struts2中的值栈对象ValueStack

    ValueStack, 即值栈对象. 值栈对象: 是整个struts数据存储的核心,或者叫中转站. 用户每次访问struts的action,都会创建一个Action对象.值栈对象.ActionCont ...

  7. Struts2 值栈总结(ValueStack)

    1.获取值栈 //获取值栈的第一种方式 ValueStack valueStack1 = (ValueStack) ServletActionContext.getRequest().getAttri ...

  8. 请描述一下Struts2的值栈结构,以及它是如何工作的?

    值栈 Value Stack 值栈是Struts2框架的核心概念.所有的核心组件都以某种方式与之进行交互,它提供对上下文信息和执行环境中元素的访问机制.值栈的内容由如下4个层级组成. 1.临时对象 这 ...

  9. Struts(九):值栈(OGNL)

    引言 在我们开发过程中,往往会使用一个对像传递到一个具体的action中,之后到跳转页面中访问对应对象的具体的参数. 比如:我们搭建一个struts2项目: 回顾下如何搭建strut2: 1.下载的s ...

随机推荐

  1. 初识JavaScript,感觉整个人都不好了。。。

    学习web前端的开发已经将近一个月了,开发中的三个大兄弟——“html”.“css”.“JavaScript”,小哥我已经深入接触了前两位,并与他俩建立的深厚的友谊.在编写过程中,不能说达到各位大神的 ...

  2. Ajax中send方法的使用

    Ajax中send方法参数的使用 一般情况下,使用Ajax提交的参数多是些简单的字符串,可以直接使用GET方法将要提交的参数写到open方法的url参数中,此时send方法的参数为null. 例如 : ...

  3. Html内容超出标记宽度后自动隐藏

    我们在显示长文本时,往往需要去在C#端去截取字符,但这绝对不是一个好方面,因为我们的长文本往往都是代HTML标记的,你一个载不好,就会出现乱码问题(出现半个HTML标记),而比较好的作法就是通过CSS ...

  4. c++中多态性、dynamic_cast、父类指针、父类对象、子类指针、子类对象

    c++多态性是依靠虚函数和父类指针指向子类对象来实现的.简单来说,父类中定义虚函数,父类指针指向子类对象,父类指针调用函数时调用的就是子类的函数. 父类没有定义虚函数,父类指针指向子类对象时,父类指针 ...

  5. C++静态库与动态库(简介)

    C++静态库与动态库 这次分享的宗旨是——让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一 ...

  6. The Best Coder and Why? (最牛气的程序员)——精彩!

    原文出处我已经找不到了,总之不是原创了,不过,重新看过,挺受震撼的.程序员出身的我们,或许记不住某些算法细节,但记住他们的名字,也许是应该的. MIT BBS上说微软电话面试的一道题就是“Who do ...

  7. HBuilder的几个常用快捷键

    Alt + [ 匹配括号 Alt + ↓跳转到下一个可编辑区 Ctrl + Alt + j 合并下一行 Ctrl + Alt + ←选择助手 Shift + 回车 Shift + 空格   Ctrl ...

  8. poj1862---变形虫(贪心)

    题意:两条虫之间碰在一起,质量变为2*sqrt(m1*m2) 求怎么结合,能使最后的一只虫质量最小 分析:如果让按从大到小的顺序依次结合,可以使大的数被开方的次数最多,得到的结果更小 4 3 2 1 ...

  9. gallery利用代码定位图片并且不丢失动画效果

    安卓中,利用gallery.setSelection(position);可以手动定位图片 但是众所周知会丢失动画效果 即使是用gallery.setSelection(position,true); ...

  10. HDU 3046 Pleasant sheep and big big wolf(最小割)

    HDU 3046 Pleasant sheep and big big wolf 题目链接 题意:一个n * m平面上,1是羊.2是狼,问最少要多少围墙才干把狼所有围住,每有到达羊的路径 思路:有羊和 ...