国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

struts2值棧分析

2019-11-14 11:46:22
字體:
來源:轉載
供稿:網友

struts2值棧分析

前段日子對ognl表達式不是很理解,看了幾本書上關于ognl表達式的描述后還是感覺很難,前幾天學習了struts2中值棧的內容,現在感覺ognl表達式其實很容易。

struts2中利用值棧來存儲數據,在struts2中,把數據存在值棧中,然后在jsp頁面用ognl表達式取出。

在struts2中的action有三種方法獲取值棧

ValueStack valueStack=ActionContext.getContext().getValueStack();ValueStack valueStack=(ValueStack) ServletActionContext.getRequest().getAttribute("struts.valueStack");ValueStack valueStack=ServletActionContext.getValueStack(ServletActionContext.getRequest());

 

可以看到我們可以利用request來獲取值棧,而request的生命周期為一次請求,所以值棧的生命周期也為一次請求。

ValueStack 是一個接口,它的實現類是ognlvalueStack。

在valueStack中有兩個數據結構,一個名字為context,另一個為root。

context的類型是OgnlContext,OnglContext實現了Map接口,所以context本質上是一個Map。

valueStack中的另一個數據結構root,它的類型是CompoundRoot,CompoundRoot繼承了ArrayList類,所以它本質上是一個ArrayList,我們稱它為對象棧。

map棧中有一個名稱為_values的對象,它是一個HashMap,在這里存放了request,response,session,application等servlet容器的內容,我們稱它為map棧。

map棧中還有一個名稱為_root的對象,它和我們上面說的valueStack中的另一個數據結構root相同,都是對象棧,為什么valueStack中會有兩個對象棧呢,這是因為struts2繼承了以前一些框架的內容導致的。

對象棧中保存了兩個對象,一個是ValueStackAction,它代表的是當前請求的Action,

另一個是DefaultTextPRovider,它是用于struts2國際化的。

我手動用一個粗糙的涂鴉圖解下:

 

所以在jsp頁面中,如果要輸出的內容在對象棧中,直接指定屬性名字,如果在map棧中,要用#來指定

例如

1234String name="aaa";String Bname="bbb";ActionContext.getContext().getValueStack().push(name);  //把字符串放入對象棧中ActionContext.getContext().put("Bname", Bname);    //把字符串放入map棧中

 在jsp頁面中取出的對應的值:

<s:property value="name"/><s:property value="#Bname"/>

 

有錯誤請指出

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 天气| 藁城市| 含山县| 平果县| 庆元县| 马尔康县| 乌什县| 西吉县| 永清县| 双鸭山市| 浦北县| 永宁县| 安庆市| 新乡市| 长顺县| 乌鲁木齐县| 炉霍县| 贵港市| 枣庄市| 南城县| 滨海县| 巴里| 华宁县| 微博| 鄯善县| 铁岭市| 富蕴县| 朝阳区| 海伦市| 新泰市| 江川县| 石阡县| 勐海县| 梓潼县| 延长县| 渝北区| 南昌市| 马关县| 西安市| 南宫市| 临清市|