91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Strut2怎么封裝請求參數

發布時間:2021-02-18 14:21:57 來源:億速云 閱讀:113 作者:小新 欄目:編程語言

這篇文章主要介紹了Strut2怎么封裝請求參數,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

眾所周知,Strut2的Action類通過屬性可以獲得所有相關的值,如請求參數、Action配置參數、向其他Action傳遞屬性值(通過chain結果)等等。要獲得這些參數值,我們要做的唯一一件事就是在Action類中聲明與參數同名的屬性,在Struts2調用Action類的Action方法(默認是execute方法)之前,就會為相應的Action屬性賦值。

要完成這個功能,有很大程度上,Struts2要依賴于ValueStack對象。這個對象貫穿整個Action的生命周期(每個Action類的對象實例會擁有一個ValueStack對象)。當Struts2接收到一個.action的請求后,會先建立Action類的對象實例,但并不會調用Action方法,而是先將Action類的相應屬性放到ValueStack對象的頂層節點(ValueStack對象相當于一個棧)。只是所有的屬性值都是默認的值,如String類型的屬性值為null,int類型的屬性值為0等。

在處理完上述工作后,Struts2就會調用攔截器鏈中的攔截器,當調用完所有的攔截器后,最后會調用Action類的Action方法,在調用Action方法之前,會將ValueStack對象頂層節點中的屬性值賦給Action類中相應的屬性。大家要注意,在這里就給我們帶來了很大的靈活性。也就是說,在Struts2調用攔截器的過程中,可以改變ValueStack對象中屬性的值,當改變某個屬性值后,Action類的相應屬性值就會變成在攔截器中最后改變該屬性的這個值。

從上面的描述很容易知道,在Struts2的的Action類可以獲得與屬性同名的參數值就是通過不同的攔截器來處理的,如獲得請求參數的攔截器是params,獲得Action的配置參數的攔截器是staticParams等。在這些攔截器內部讀取相應的值,并更新ValueStack對象頂層節點的相應屬性的值。而ValueStack對象就象一個傳送帶,將屬性值從一個攔截器傳到了另一個攔截器(當然,在這其間,屬性值可能改變),最后會傳到Action對象,并將ValueStack對象中的屬性的值終值賦給Action類的相應屬性。

當我們在顯示層使用EL表達式,不僅可以訪問到EL表達式中11個隱藏對象里的屬性,也能夠訪問到valueStack中的對象屬性值,是因為struts2對HttpServletRequest做了進一步的封裝.

public class StrutsRequestWrapper extends HttpServletRequestWrapper {
	public StrutsRequestWrapper(HttpServletRequest req) {
		super(req);
	}
	public Object getAttribute(String s) {
		...... 
		ActionContext ctx = ActionContext.getContext();
		Object attribute = super.getAttribute(s);
		//先從request范圍獲取屬性值 
		if (ctx != null) {
			if (attribute == null) {
				//如果從request范圍沒有找到屬性值,即從ValueStack中查找對象的屬性值 
				...... 
				ValueStack stack = ctx.getValueStack();
				//獲取valueStack對象 
				attribute = stack.findValue(s);
				//從valueStack中的對象中查找指定的屬性值 
				......
			}
		}
		return attribute;
	}
}

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Strut2怎么封裝請求參數”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汉阴县| 松江区| 西乌珠穆沁旗| 襄垣县| 莱芜市| 北流市| 竹北市| 平陆县| 朝阳县| 香河县| 徐汇区| 深水埗区| 白河县| 衡阳市| 滦平县| 嘉义县| 伊吾县| 漳州市| 广河县| 响水县| 巴里| 福安市| 遵义市| 迁安市| 平潭县| 宜州市| 景泰县| 红安县| 吴忠市| 家居| 陈巴尔虎旗| 富源县| 左贡县| 湟源县| 通江县| 梅州市| 乐山市| 池州市| 宁城县| 八宿县| 衡阳市|