首先声明:本文是从博客园博友的文章转载过来的,感觉说的不错。在此附上地址: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. hdu 4634 Swipe Bo bfs+状态压缩

    题目链接 状态压缩记录当前拿到了哪些钥匙, 然后暴力搜索. 搞了好几个小时, 一开始也不知道哪里错了, 最后A了也不知道一开始哪里有问题. #include <iostream> #inc ...

  2. Java判断字符串是否为空的三种方法

    方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低.1: if(s == null || s.equals("")); 方法二: 比较字符串长度, 效率高, 是我知道的最 ...

  3. OSG中的视角 eye up center

    这三个值都是vec3变量,其中eye和center确定视角         eye就相当于人的眼睛,我们观察场景,是从这个坐标去看的,然后有了眼睛,我们观察得有一个方向,那么久需要另外一个坐标,就是c ...

  4. JDBC笔记

    简介 JDBC是Java规定的访问数据库的API,目前主流的数据库都支持JDBC.使用JDBC访问不同的数据库时需要安装不同的驱动. JDBC定义了数据库的链接,SQL语句的执行以及查询结果集的遍历等 ...

  5. 今天在发布IIS站点的时候遇到了一些问题

    1.HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置. 分析:一般5XX的错误都是服务器的问题,这里把应用程序池 ...

  6. [原]容器学习(一):动手模拟spring的IoC

    介绍 学习经典框架的实现原理以及设计模式在其实际中的运用,是非常有必要的,可以让我们更好进行面向对象. 本篇文章就来模拟Spring的IOC功能,明白原理后,可以更好的使用它,进而为进行面向对象提供一 ...

  7. 删除select中所有option选项

    这样写 <select id="search"> <option>baidu</option> <option>sogou</ ...

  8. 链表-Reverse Linked List

    /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * } ...

  9. mysql 权限控制具体解释

    概述 mysql权限控制在不同的上下文和不同的操作水平上都能够进行控制,他们包括例如以下几个 ** 管理权限能够同意用户管理mysql server的操作. 这些权限控制是全局的,不是针对某个特定的数 ...

  10. SDOTOJ2088 refresh的停车场(栈和队列)

     refresh的停车场 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit S ...