這篇文章主要介紹了Strut2怎么封裝請(qǐng)求參數(shù),具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)主要從事網(wǎng)頁(yè)設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、響應(yīng)式網(wǎng)站建設(shè)、程序開(kāi)發(fā)、網(wǎng)站優(yōu)化、微網(wǎng)站、小程序設(shè)計(jì)等,憑借多年來(lái)在互聯(lián)網(wǎng)的打拼,我們?cè)诨ヂ?lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的網(wǎng)站制作、網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷(xiāo)經(jīng)驗(yàn),集策劃、開(kāi)發(fā)、設(shè)計(jì)、營(yíng)銷(xiāo)、管理等多方位專(zhuān)業(yè)化運(yùn)作于一體。
眾所周知,Strut2的Action類(lèi)通過(guò)屬性可以獲得所有相關(guān)的值,如請(qǐng)求參數(shù)、Action配置參數(shù)、向其他Action傳遞屬性值(通過(guò)chain結(jié)果)等等。要獲得這些參數(shù)值,我們要做的唯一一件事就是在Action類(lèi)中聲明與參數(shù)同名的屬性,在Struts2調(diào)用Action類(lèi)的Action方法(默認(rèn)是execute方法)之前,就會(huì)為相應(yīng)的Action屬性賦值。
要完成這個(gè)功能,有很大程度上,Struts2要依賴(lài)于ValueStack對(duì)象。這個(gè)對(duì)象貫穿整個(gè)Action的生命周期(每個(gè)Action類(lèi)的對(duì)象實(shí)例會(huì)擁有一個(gè)ValueStack對(duì)象)。當(dāng)Struts2接收到一個(gè).action的請(qǐng)求后,會(huì)先建立Action類(lèi)的對(duì)象實(shí)例,但并不會(huì)調(diào)用Action方法,而是先將Action類(lèi)的相應(yīng)屬性放到ValueStack對(duì)象的頂層節(jié)點(diǎn)(ValueStack對(duì)象相當(dāng)于一個(gè)棧)。只是所有的屬性值都是默認(rèn)的值,如String類(lèi)型的屬性值為null,int類(lèi)型的屬性值為0等。
在處理完上述工作后,Struts2就會(huì)調(diào)用攔截器鏈中的攔截器,當(dāng)調(diào)用完所有的攔截器后,最后會(huì)調(diào)用Action類(lèi)的Action方法,在調(diào)用Action方法之前,會(huì)將ValueStack對(duì)象頂層節(jié)點(diǎn)中的屬性值賦給Action類(lèi)中相應(yīng)的屬性。大家要注意,在這里就給我們帶來(lái)了很大的靈活性。也就是說(shuō),在Struts2調(diào)用攔截器的過(guò)程中,可以改變ValueStack對(duì)象中屬性的值,當(dāng)改變某個(gè)屬性值后,Action類(lèi)的相應(yīng)屬性值就會(huì)變成在攔截器中最后改變?cè)搶傩缘倪@個(gè)值。
從上面的描述很容易知道,在Struts2的的Action類(lèi)可以獲得與屬性同名的參數(shù)值就是通過(guò)不同的攔截器來(lái)處理的,如獲得請(qǐng)求參數(shù)的攔截器是params,獲得Action的配置參數(shù)的攔截器是staticParams等。在這些攔截器內(nèi)部讀取相應(yīng)的值,并更新ValueStack對(duì)象頂層節(jié)點(diǎn)的相應(yīng)屬性的值。而ValueStack對(duì)象就象一個(gè)傳送帶,將屬性值從一個(gè)攔截器傳到了另一個(gè)攔截器(當(dāng)然,在這其間,屬性值可能改變),最后會(huì)傳到Action對(duì)象,并將ValueStack對(duì)象中的屬性的值終值賦給Action類(lèi)的相應(yīng)屬性。
當(dāng)我們?cè)陲@示層使用EL表達(dá)式,不僅可以訪問(wèn)到EL表達(dá)式中11個(gè)隱藏對(duì)象里的屬性,也能夠訪問(wèn)到valueStack中的對(duì)象屬性值,是因?yàn)閟truts2對(duì)HttpServletRequest做了進(jìn)一步的封裝.
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范圍沒(méi)有找到屬性值,即從ValueStack中查找對(duì)象的屬性值 ...... ValueStack stack = ctx.getValueStack(); //獲取valueStack對(duì)象 attribute = stack.findValue(s); //從valueStack中的對(duì)象中查找指定的屬性值 ...... } } return attribute; } }
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Strut2怎么封裝請(qǐng)求參數(shù)”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!