码迷,mamicode.com
首页 > 其他好文 > 详细

Struts2--ActionContext&ValueStack

时间:2017-11-26 22:59:52      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:表达式   --   调用   intercept   top   arraylist   执行   val   实现类   

1. valueStack内部结构

ValueStack的组成:

就是一个ArrayList 和 context

在struts2框架中我们通过ognl表达式来获取valueStack中数据,没有使用#就会从CompoundRoot中获取数据,

如果使用#来获取,这时就会从context中来获取

CompoundRoot主要存储的是action的相关数据;其实就是一个ArrayList

context 其实就是一个Map集合

主要存储了一些引用,这个引用主要是关于web开发中相关信息

pameters :请求 参数

request:请求对象中所有属性

session:会话对象中所有属性

application:application对象中的所有发展

其中的context对象是OGNLContext,它实现了map接口,在valueStack的默认实现类中,OgnlValueStack中调用OGNL方法,返回一个OgnlContext对象。

valueStack组织结构::

 

2. ActionContext是什么

ActionContext它是action上下文,strtus2框架它使用actionContext来保存Action在执行过程中所需要的一些对象,例如 session, application…

意思就是:

 Struts2会根据每一次的http请求来创建对应的ActionContext,它是与当前线程绑定的。

每一次请求,就是一个线程,对应着一个request,每一次请求,会创建一个Action,每一个action对应一个ActionContext.每一次请求也对应着一个valueStack.

request---ActionContext----Action-----ValueStack它们都对应着一次请求(一个线程).

只有存在了action才会存在action上下文(也就是ActionContext)

 

在ActionContext中持有valuestack中context的引用,而在context中持有root的引用

 

ValueStack存储数据:

如果通过valueStack.set(name,value)存储的,可以在页面是使用<s:property value=”name”>获取

如果通过valuestack.push(value)存储的,可以根据它在root中的序号来获取.例如

<s:property value=”[1].top”>

 

ActionContext就是ValueStack中的context,(就是一个容器)属于Map集合,存储session,request,response等对象,只有有了action才会有ActionContext;所在它持有对root的引用,也就是持有对valuestack中compoundRoot(对象栈)的引用,里面主要存储action的相关数据;

 

                                    

Valuestack中获取数据:

如上图所示:在执行setUsername/setPassword之前:user对象被压倒valuestack(getModel中创建的对象,)中,这时候Action和ValueStack都指向一个对象,但紧接着,Action中的user被新的user对象覆盖,这时候action和valuestack不再指向同一个对象,valuestack中是旧的对象,而action中是新的对象;

 

(在最新的struts2版本中,ModelDrivenInterceptor提供了一个配置参数:refreshModelBeforeResult,只要将它定义为true,上述问题就被解决了!struts2的解决方案就是:先把旧的model对象从ValueStack中移除,然后再把新的model对象压入ValueStack!)

Struts2--ActionContext&ValueStack

标签:表达式   --   调用   intercept   top   arraylist   执行   val   实现类   

原文地址:http://www.cnblogs.com/Tendo-pein/p/7900643.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!