Struts2值棧隨筆

2022-09-12 10:51:20 字數 2175 閱讀 3352

一、值棧(valuestack)是什麼?

值棧(valuestack),是struts2的資料中轉站,其中自動儲存了當前action物件和其他相關物件(包括常用的web物件的引用,如request),也可以手動儲存自己是資料物件,同時也可以隨時隨地將物件從值棧取出或操作(通過ognl表示式)

值棧,實際是乙個介面物件的稱呼,介面是value類,實現類是ognlvaluestack類。struts2框架將valuestack物件儲存在名為"struts.valuestack"的請求(request)屬性中,即值棧是request中的乙個物件,乙個請求對應乙個action例項和乙個值棧物件。

二、值棧的資料儲存結構的分析

在值棧的內部有兩個邏輯部分:

objectstack(物件棧):儲存了action的相關物件和動作,資料儲存結構是list.

contextmap(上下文棧):儲存了各種對映關係,資料儲存結構是map.

值棧物件的獲取,兩種方式獲取的物件是同一物件:

1)request.getattribute("struts.valuestack");

2)actioncontext.getcontext().getvaluestack();

[值棧小結]:

值棧是在請求物件引用了一塊儲存空間。

值棧包括兩部分:物件棧(compoundroot,繼承list介面)和ognl上下文棧(ognlcontext,實現map介面)

三、值棧的獲取資料的機制

ognlvaluestack類包含兩個重要的屬性,乙個root(compoundroot)和乙個context(ognlcontext).

在這個ognlcontext物件中,有乙個預設的頂層物件

root

(引用),俗稱

root

棧,下面乙個物件稱之為

map棧.

ognl表示式的操作都基於ognlcontext物件,訪問的規則如下:

1) 如果訪問 root棧內容(

compoundroot

物件棧內容), 不需要#,

直接通過元素的名稱來訪問

。2) 如果訪問 map棧內容 (如

request

、response

、session

、servletcontext

、attr

、parameters

), 需要

#key

來引用訪問,例如

#request.name  

相當於

request.getattribute("name" ) 

值棧的主要作用就是資料的儲存和獲取(可以在任何地方獲取)。

使用值棧的時候要思考:用什麼**存進去,然後再用什麼**取出來。 

1. 如何向值棧儲存資料

1) valuestack.push(obj) :儲存資料到root棧頂-壓棧頂(物件本身)-匿名

2) actioncontext.getcontext().put(key,value) :儲存資料到map棧

中3) valuestack.set(key,value):將資料儲存到root棧頂

(資料物件自動被封裝為map來儲存,棧頂是個

map,

map裡面有個屬性是物件)

--有名字

提供action成員變數,提供

getter

方法(action

就在root

棧中,action

屬性可以被搜尋)

2.ognl

表示式如何獲取值棧的資料

1) name

」/>

先搜尋root

棧物件屬性(getter方法

:get***-->***),

再搜尋map的key

2) 搜尋map的key

3) 通過 [index].top 指定訪問

root

棧某個物件 ,例如

[0].top

棧頂物件

valuestack.findvalue(ognl表示式

) ; 獲取值棧資料

Struts2中的值棧

眾所周知,strut 2的action類通過屬性可以獲得所有相關的值,如請求引數 action配置引數 向其他action傳遞屬性值 通過chain結果 等等。要獲得這些引數值,我們要做的唯一一件事就是在action類中宣告與引數同名的屬性,在struts 2呼叫action類的action方法 預...

struts2中的值棧

一丶關於值棧 valuestack 二丶值棧中值得訪問方式 向值棧中訪問值有三種方式 先用actioncontext獲得值棧的物件 actioncontext context actioncontext.getcontext valuestack stack context.getvaluestac...

struts2 值棧的理解

之前工作中當遇到jsp在struts2取值的時候,對於 什麼的使用一直處於不太明白的狀態 雖然之前學習struts2的時候有學到過 今天再次遇到,整理一下。struts2上下文如上圖所示。其中值棧裡的內容我們經常用到的主要就是當前action的屬性值。可以用s debug標籤看到。對於在jsp裡取值...