值棧(valuestack),是
struts2
的資料中轉站
,棧中自動儲存了當前action物件和其他相關物件(包括常用的
web物件的引用,如
request
、session
、等),也可以手動儲存自己的資料物件,同時也可以
隨時隨地
將物件從值棧取出或操作(通過ognl表示式)
值棧(valuestack),實際是乙個介面的物件的稱呼
,介面是
valuestack
類,實現類是
ognlvaluestack
類,該物件是
struts2
利用ognl
的基礎,或者說
struts2
中ognl
使用都是基於值棧完成的。
如何理解資料中轉站?
其實可以將它看成是乙個容器,是乙個臨時的資料庫,為什麼是臨時的呢?因為它只存在於記憶體中
作為乙個資料庫倉庫,存放的是那些資料呢?
答:比如request、
session
、這些物件以及這些物件中的資料,都存在於值棧中
存放的目的:取值(頁面中取值)
struts2
框架將valuestack
物件儲存在request域中,鍵為「
struts.valuestack
」,即值棧是
request
域中的乙個物件,乙個請求對應乙個
action
例項和乙個值棧物件。
在值棧的內部有兩個邏輯部分:
l objectstack(物件棧)
:又稱為root棧,儲存了
action
的相關物件和動作,
資料儲存結構是list。
l contextmap(上下文棧)
:又稱為map棧,儲存了各種對映關係,如常用的
web物件的引用,
資料儲存結構是map。
【示例1】
值棧的獲取方式:
1) request.getattribute(「struts.valuestack」):用的較少
2) actioncontext.getcontext().getvaluestack():用的非常多
:底層使用的還是第一種方式獲取
actioncontext(
action
上下文,工具類)
【值棧小結】:
值棧包括兩部分:
物件棧(
root棧,
compoundroot,
繼承了arraylist集合
)和ognl上下文棧(
map棧,
ognlcontext,實現
map介面)
而ognl上下文棧(map棧)內部又分為兩部分:物件棧(
root
)的引用和乙個hashmap
,這個hashmap存放了常用web物件的引用和其他對映關係。
值棧的主要作用就是資料的儲存和獲取(可以在任何地方獲取)。
注意要點
:怎麼存,就怎麼取
存進root棧
,就不通過#獲取;
存進map棧,就通過#獲取
1. 如何向值棧儲存資料
1) valuestack.push(obj)
:儲存資料到root
棧頂-壓棧頂(物件本身)-匿名
2) actioncontext.getcontext().put(key,value)
:儲存資料到
map棧
中3) valuestack.set(key,value):將資料儲存到
root棧頂
(資料物件自動被封裝為map來儲存,棧頂是個
map,
map裡面有個屬性是物件)
--有名字
4) 提供action成員變數,提供
getter
方法(action
就在root
棧中,action
屬性可以被搜尋)
Struts2 入門概述
struts2 入門概述 struts2 主要是通過匯入struts2的jar包,通過struts2的struts.xml配置 和struts的 執行視 件,到客戶端。struts2部署 基本步驟 1 新建web project 單擊 finish 完成。2 匯入struts2 jar包 3 配置p...
struts2概述與框架搭建
一開始學習struts2比較好奇的應該是為什麼會叫 2吧,查了一下,之前有大神寫了乙個struts1,但是是基於servlet的,我們知道servlet有他的限制,而另乙個小組開發了乙個叫webwork的框架,兩個人商量一下把對方的整合在一起,但畢竟struts的作者名聲大,所以沿用了struts的...
Struts2字尾 深入Struts2
一 將action字尾變成html字尾 xmlversion 1.0 encoding utf 8 doctype struts public apache software foundation dtd struts configuration 2.1 en struts include file...