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

首頁 > 開發 > Java > 正文

淺談Strut2如何對請求參數的封裝

2024-07-13 10:15:30
字體:
來源:轉載
供稿:網友

眾所周知,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如何對請求參數的封裝的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 师宗县| 六盘水市| 彭州市| 太康县| 宁明县| 阿克陶县| 平罗县| 金阳县| 茌平县| 米泉市| 焦作市| 佛学| 手游| 阳春市| 长葛市| 庆云县| 黄浦区| 股票| 伊吾县| 开远市| 泰来县| 南宫市| 绥滨县| 新巴尔虎右旗| 漯河市| 陇川县| 遵义县| 蓝田县| 中西区| 乐业县| 华蓥市| 隆昌县| 德格县| 富宁县| 安福县| 太湖县| 蒙自县| 碌曲县| 涿鹿县| 镶黄旗| 南阳市|