十八、ValueStack&ActionContext(非常重点:值栈)
ValueStack&ActionContext(非常重点:值栈)
1、针对用户的每次动作访问,都会创建属于自己的ValueStack对象

2、ValueStack中的的常用方法:功能一定要知道干什么的。实现类OgnlValueStack

- getContext():返回的是一个Map<String,Object>
- *getRoot():返回的是一个CompoundRoot。
CompoundRoot就是一个ArrayList的子类(就是一个List)。实现了一个栈结构

CompoundRoot():默认的构造方法。实际就是创建一个List集合
CompoundRoot(List):用一个集合来初始化一个CompoundRoot对象
cutStack(int):按照集合中的索引,剪出一个新的List集合
peek():取集合中的第一个元素。get(0)
pop():从集合中删除第一个元素
- push(Object):向集合中的第一个元素位置插入数据
peek():CompoundRoot中的第一个元素。get(0) - pop():从CompoundRoot集合中删除第一个元素
- push(Object):向CompoundRoot集合中的第一个元素位置插入数据
- size():获取 CompoundRoot这个集合的大小
- setValue(String,Object):第一个参数,是OGNL表达式。向自己(getContext())得到那个Map中尝试放东西。
- setParameter(String,Object):第一个参数,是OGNL表达式。向自己(getContext())得到那个Map中尝试放东西。
- findString(String expr):返回的是一个String类型的,否则报错.第一个参数,是OGNL表达式。
- findValue():返回的是一个Object。第一个参数,是OGNL表达式。
3、ActionContext
static ThreadLocal<ActionContext> actionContext = new ThreadLocal<ActionContext>();
每个线程都会有唯一的ActionContext,且一个线程中只有一个ActionContext。

getApplication():返回的是一个Map
getContext():放回的当前线程上的ActionContext对象
getContextMap():返回ActionCOntext中的那一个Map
getParameters():返回的是一个Map
getSession():返回的是一个Map
getValueStack():返回的是当前线程中的ValueStack实例
get(String):从ActionContext的Map中获取数据
最终总结:

4、ServletActionContext决定contextMap中会存哪些数据

总结:都是从ActionContext的那个大Map中获取的。
5、在执行动作方法前,contextMap中放了以下东西
contextMap中
key
value
备注
request
ServletRequest中的那个Map
session
HttpSession中的那个Map
application
ServletContext中的那个Map
parameters
请求参数Map<String,String[]>
attr
也是一个AttributeMap
获取数据依次从contextMap中的requestMap、sessionMap、applicationMap中搜索
- push(Object):向集合中的第一个元素位置插入数据
十八、ValueStack&ActionContext(非常重点:值栈)的更多相关文章
- java并发编程(十八)阻塞队列和阻塞栈
阻塞队列 阻塞队列是Java 5并发新特性中的内容,阻塞队列的接口是java.util.concurrent.BlockingQueue,它有多个实现类:ArrayBlockingQueue.Dela ...
- Struts2 - 值栈(ValueStack)
1. 关于值栈: 1). helloWorld 时, ${productName} 读取 productName 值, 实际上该属性并不在 request 等域对象中, 而是从值栈中获取的. 2). ...
- valueStack(值栈)
值栈 值栈(ValueStack)就是 OGNL 表达式存取数据的地方.在一个值栈中,封装了一次请求所需要的所有数据. 在使用 Struts2 的项目中,Struts2 会为每个请求创建一个新的值栈, ...
- OGNL表示式使用和值栈
另外值得参考博客:http://blog.csdn.net/resigshy/article/details/7560573 OGNL是Object Graphic Navigation Langua ...
- Java中的值栈
OGNL表示式使用 和 值栈 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作为默认的表达式 ...
- Struts2知识点小结(三)--值栈与ognl表达式
1.问题一 : 什么是值栈 ValueStack 回顾web阶段 数据交互问题? 客户端提交数据 到 服务器端 request接受数据+BeanUtils实体封装 ...
- 值栈(Structs2)
1. 关于值栈: 1). 登陆 时, ${userName} 读取 userName 值, 实际上该属性并不在 request 等域对象中, 而是从值栈中获取的. 2). ValueStack: I. ...
- [原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 关于Struts2中的值栈与OGNL表达式
1.1.1 OGNL概述: Object Graphic Navigation Language(对象图导航语言)的缩写 * EL :OGNL比EL功能强大很多倍. 它是一个开源项目. ...
- 值栈和OGNL 之 7.1 值栈
7.1 值栈 7.1.1 值栈是什么 简单的说:值栈是对应每一个请求对象的轻量级的内存数据中心. Struts2中一个很激动人心的特性就是引入了值栈,在这里统一管理着数据,供Action.Resu ...
随机推荐
- Cassandra在Windows上安装及使用方法
http://archive.apache.org/dist/cassandra/2.1.2/ http://docs.datastax.com/en/landing_page/doc/landing ...
- 深入ThreadLocal之二
概述 相信读者在网上也看了很多关于ThreadLocal的资料,很多博客都这样说:ThreadLocal为解决多线程程序的并发问题提供了一种新的思路:ThreadLocal的目的是为了解决多线程访问资 ...
- AutoResetEvent和ManualResetEvent理解 z
AutoResetEvent和ManualResetEvent用于多线程之间代码执行顺序的控制,它们继承自WaitHandle,API相同,但在使用中还是有区别的. 每次使用时虽然理解了,但由于没有去 ...
- Java:过去、未来的互联网编程之王
Java对你而言是什么?一门你大学里学过的语言?一个IT行业的通用语言?你相信Java已经为下一次互联网爆炸做好了准备么?Java 一方面为嵌入式计算做了增强,而另一方面为实时应用做了精简,本文将介绍 ...
- 协处理器CP15
在基于ARM的嵌入式应用系统中,存储系统通常是通过系统控制协处理器CP15完成的.ARM处理器使用协处理器15(CP15)的寄存器来控制cache.TCM和存储器管理.CP15包含16个32位的寄存器 ...
- 【收藏用】--切勿转载JAVA 使用Dom4j 解析XML
原帖地址 : http://blog.csdn.NET/yyywyr/article/details/38359049 解析XML的方式有很多,本文介绍使用dom4j解析xml. 1.环境准备 (1) ...
- C++学习43 输入输出有关的类和对象
输入和输出是数据传送的过程,数据如流水一样从一处流向另一处.C++形象地将此过程称为流(Stream).C++的输入输出流是指由若干字节组成的宇节序列,这些宇节中的数据按顺序从一个对象传送到另一对象. ...
- Need help with design ReadOnlyListBase (Insert, Update, Delete from ReadOnlyListBase)
原文地址:http://forums.lhotka.net/forums/p/3166/21214.aspx My task is: For select client, I have a modal ...
- Reactor模式与观察者模式
多线程编程常见模式 观察者模式: 单一的观察点,事件单一 反应器模式: 多个观察点,事件不单一(NIO里面的Selector选择器,基于Channel的事件进行多路的IO复用机制) 图-网上都是这张, ...
- FZU Problem 2136 取糖果
Problem 2136 取糖果 Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description 有N个袋子放成一排,每个 ...