Java中Struts2的值棧ValueStack詳解
值棧
值棧(ValueStack)就是 OGNL 表達式存取數(shù)據(jù)的地方。
在一個值棧中,封裝了一次請求所需要的所有數(shù)據(jù)。
在使用 Struts2 的項目中,Struts2 會為每個請求創(chuàng)建一個新的值棧,也就是說,值棧和請求是一一對應(yīng)的關(guān)系,這種一一對應(yīng)的關(guān)系使值棧能夠線程安全地為每個請求提供公共的數(shù)據(jù)存取服務(wù)。
1.值棧的作用
值??梢宰鳛橐粋€數(shù)據(jù)中轉(zhuǎn)站在前臺與后臺之間傳遞數(shù)據(jù),最常見的就是將 Struts2 的標(biāo)簽與 OGNL 表達式結(jié)合使用。
值棧實際上是一個接口,在 Struts2 中利用 OGNL 時,實際上使用的就是實現(xiàn)了該接口的 OgnlValueStack 類,這個類是 OGNL 的基礎(chǔ)。
2.值棧的聲明周期
值棧貫穿整個 Action 的生命周期,每個 Action 類的對象實例都擁有一個 ValueStack 對象,在 ValueStack 對象中保存了當(dāng)前 Action 對象和其他相關(guān)對象。
Struts2 框架把 ValueStack 對象保存在一個名為 struts.valueStack 的 request 屬性中,也就是說,值棧與 Action 的生命周期一致。值棧的生命周期隨著 request 的創(chuàng)建而創(chuàng)建,隨著 request 的銷毀而銷毀。
3.值棧的獲取方式
要獲取值棧中存儲的數(shù)據(jù),首先應(yīng)該獲取值棧。
值棧的獲取有兩種方式,具體如下。
1) 在request中獲取值棧
ValueStack 對象在 request 范圍內(nèi)的存儲方式為 request.setAttribute(“struts.valueStack”,valuestack),可以通過如下方式從 request 中取出值棧的信息。
//獲取 ValueStack 對象,通過 request 對象獲取
ValueStack valueStack = (ValueStack)ServletActionContext.getRequest()
.getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY);ServletActionContext.STRUTS_VALUESTACK_KEY 是 ServletActionContext 類中的常量,它的值為 struts.valueStack。
2)在ActionContext中獲取值棧
在使用 Struts2 框架時,可以使用 OGNL 操作 Context 對象從 ValueStack 中存取數(shù)據(jù),也就是說,可以從 Context 對象中獲取 ValueStack 對象。實際上,Struts2 框架中的 Context 對象就是 ActionContext。
ActionContext 獲取 ValueStack 對象的方式如下所示:
//通過 ActionContext 獲取 valueStack 對象 ValueStack valueStack = ActionContext.getContext().getValueStack();
ActionContext 對象是在 StrutsPrepareAndExcuteFilter 的 doFilter() 方法中被創(chuàng)建的,在源碼中用于創(chuàng)建 ActionContext 對象的 createActionContext() 方法內(nèi)可以找到獲取的 ValueStack 對象的信息。
方法中還有這樣一段代碼:
ctx=new ActionContext(stack.getContext());
從上述代碼中可以看出,ValueStack 對象中的 Context 對象被作為參數(shù)傳遞給了 ActionContext 對象,這也就說明 ActionContext 對象中持有了 ValueStack 對象的引用,因此可以通過 ActionContext 對象獲取 ValueStack 對象。
到此這篇關(guān)于Java中Struts2的值棧ValueStack詳解的文章就介紹到這了,更多相關(guān)Struts2的值棧ValueStack內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決maven?maven.compiler.source和maven.compiler.target的坑
這篇文章主要介紹了解決maven?maven.compiler.source和maven.compiler.target的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
Java 實戰(zhàn)項目之教材管理系統(tǒng)的實現(xiàn)流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實現(xiàn)教材管理系統(tǒng),大家可以在過程中查缺補漏,提升水平2021-11-11

