valueStack浅析--文档整理

来源:互联网 发布:电子狗升级软件 编辑:程序博客网 时间:2024/06/16 13:15

1.valueStack简介  

我们使用valueStack的主要目的是为我将我们action中产生的数据携带到页面上,也就是说valueStack它就是一个容器

在Struts2框架中将valueStack设计成一个接口。

com.opensymphony.xwork2.util.ValueStack

我们主要使用的是它的实现类

com.opensymphony.xwork2.ognl.OgnlValueStack。

当客户端向我们发送一个请求,服务器就会创建一个Action来处理请求,struts2中的action是一个多例,每一次请求都会有一个新的action对应。所以它不存在线程安全问题。

一个valueStack对应一个action,valueStack贯穿整个action的生命周期。

request-------Action------ValueStack

struts2框架valueStack保存在request

valueStack主要有两部分组成:

CompoundRoot:它就是一个ArrayList

它主要存储的是action的相关数据

Map<String,Object> context:就是一个Map

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

pameters :请求参数

request:请求对象中所有属性

session:会话对象中所有属性

application:application对象中的所有发展

以上都是Map

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

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



2.如何获取valueStack

第一种方式:可以直接通过request对象来获取.

ServletActionContext

 

第二种方式:使用ActionContext来获取

ActionContext(简单推荐)



3.什么是ActionContext

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

ActionContext的获取  是通过它的静态方法getContext()得到。

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

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

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

valueStack与ActionContext本质上是可以获取


4.valueStack的作用

主要用来存储数据,见到那介绍一下存储数据的两种方式

1.手动存储

 (1)push方法:valueStack.push("jack");存储在root中

(2)set方法:valueStack.set("username","jack");存储为一个map,也是存在root中

如何在页面上获取

我们在struts2框架中可以使用ognl+valueStack达到在页面(jsp)上来获取相关的数据。

要想在jsp页面上使用ognl表达式,就需要结合struts2框架的标签,导入标签后如下

<s:property value="[0].top"/>

<s:property value="username"/>


2.自动存储

每次请求,访问action,这个对象会存储到valueStack中。

实现modelDrivern接口后可以封装为指定对象




 





原创粉丝点击