struts Value Stack 值栈
首先声明:本文是从博客园博友的文章转载过来的,感觉说的不错。在此附上地址: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 值栈的更多相关文章
- Struts学习之值栈的理解
转自:http://blog.csdn.net/hanxuemin12345/article/details/38559979 页面一个请求发送过来,依次经过一系列拦截器(处理公共部分,如:往数据中心 ...
- Struts2学习记录-Value Stack(值栈)和OGNL表达式
仅仅是学习记录.把我知道的都说出来 一.值栈的作用 记录处理当前请求的action的数据. 二,小样例 有两个action:Action1和Action2 Action1有两个属性:name和pass ...
- Ognl值栈对象及struts标签
用户每次访问struts的action,都会创建一个Action对象.值栈对象.ActionContext对象:然后把Action对象放入值栈中: 最后再把值栈对象放入request中,传入jsp页面 ...
- Struts2 (三) — OGNL与值栈
一.OGNL表达式 1.概述 1.1什么是OGNL OGNL是Object-Graph Navigation Language的缩写,俗称对象图导航语言. 它是一种功能强大的表达式语言,通过它简单 ...
- 10.Struts2值栈
1.什么是值栈 * 值栈就相当于Struts2框架的数据的中转站,向值栈存入一些数据.从值栈中获取到数据. * ValueStack 是 struts2 提供一个接口,实现类 OgnlValueSta ...
- struts2中的值栈对象ValueStack
ValueStack, 即值栈对象. 值栈对象: 是整个struts数据存储的核心,或者叫中转站. 用户每次访问struts的action,都会创建一个Action对象.值栈对象.ActionCont ...
- Struts2 值栈总结(ValueStack)
1.获取值栈 //获取值栈的第一种方式 ValueStack valueStack1 = (ValueStack) ServletActionContext.getRequest().getAttri ...
- 请描述一下Struts2的值栈结构,以及它是如何工作的?
值栈 Value Stack 值栈是Struts2框架的核心概念.所有的核心组件都以某种方式与之进行交互,它提供对上下文信息和执行环境中元素的访问机制.值栈的内容由如下4个层级组成. 1.临时对象 这 ...
- Struts(九):值栈(OGNL)
引言 在我们开发过程中,往往会使用一个对像传递到一个具体的action中,之后到跳转页面中访问对应对象的具体的参数. 比如:我们搭建一个struts2项目: 回顾下如何搭建strut2: 1.下载的s ...
随机推荐
- myeclipse 环境配置优化,不断跟新整理中
myeclipse 环境配置,不断跟新整理中1.General --->Workspace ---> UTF-8 工作环境编码2.General --->Editors --> ...
- otl库(以前不知道有这个库,并且还可以在Unix下使用)
OTL介绍:OTL 是 Oracle, Odbc and DB2-CLI Template Library 的缩写,是一个C++编译中操控关系数据库的模板库,它目前几乎支持所有的当前各种主流数据库,例 ...
- WEKA,一个开源java的数据挖掘工具
开始研究WEKA,一个开源java的数据挖掘工具. HS沉寂这么多天,谁知道偏偏在我申请离职的时候给我安排了个任务,哎,无语. 于是,今天看了一天的Weka. 主要是看了HS提供的三个文章(E文,在g ...
- android:configChanges 屏幕横竖屏切换
出处:http://blog.csdn.net/djy1992/article/details/9378195 ---> android:screenOrientation="por ...
- Android之Service与IntentService的比较
Android之Service与IntentService的比较 不知道大家有没有和我一样,以前做项目或者练习的时候一直都是用Service来处理后台耗时操作,却很少注意到还有个IntentServ ...
- saiku导出excel单元格格式与中文列宽自动适应
在saiku导出excel后打开发现单元格的整数也显示为小数,并且含有中文的列宽没有自动适应,解决办法如下: 打开ExcelWorksheetBuilder.java文件,找到applyCellFor ...
- linux 获取文件系统信息(磁盘信息)
源代码例如以下: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <s ...
- Nodejs解析HTML网页模块 jsdom
工作需要抓取某些网页,所以今天试用下了node下的jsdom模块.同样功能的还有jquery jsdom https://npmjs.org/package/jsdom API很简单. jsdom.e ...
- pl sql项目演练--B2C商城项目
项目学习视频下载地址:点击下载 1.注册会员及找回密码模块 }该模块主要功能有注册会员和找回密码 }注册会员:所需信息主要有:登录号.密码.真实姓名.性别.密码问题.密码答案.Email.地址.电 ...
- java学习之异常笔记
异常处理使用try catch finally throw throws 如果try中有执行到return后, 也会执行finally中的语句之后再跳出方法. 异常是对于某种错误情况的描述,是告诉方法 ...