值栈的定义:
对应每一个请求对象的轻量级的内存数据中心
统一管理数据,供action,result,interceptor使用,数据被集中起来,提供了很大的便利性
值栈的作用:
线程安全的为每个请求提供公共的数据存取服务
值栈的具体分析
值栈有广义和狭义之分
广义:
通常指的是ActionContext对象,它是action运行的上下文,是一个基本的容器,包含action运行需要的数据,如请求参数,会话等
ActionContext是线程安全的,会为每个线程分配一个ActionContext
ActionContext里面存放很多的值
如Request的parameters,请求的参数,他是从请求对象里面拷贝出来的,因此在这边变化不会影响请求对象的参数
Request,Session,Application的attribute属性,和会话对象的属性是联动的
狭义值栈
指的就是ognlvaluestack对象,主要用来支持ognl运算
里面存放一些ognl可以访问的数据
Action的实例
OGNL表达式产生的中间变量,比如在后面使用Struts2的标签的时候,使用循环标签,自然会有循环的变量,这些都存放在值栈中
Actioncontext里面包含狭义值栈
值栈一般值得是广义值栈,页面获取的数据是狭义值栈里面的数据也就是valuestack
值栈的使用
ActionContext的获取方法
ActionContext ctx= ActionContext.getContext()
如果在能够获取到actionInvocation的地方可以通过actionInvocation获取
ActionContext ctx=actionInvocation.getinvocationContext();