request setattribute 方法 modeattribute和requestbody直接區(qū)別?
modeattribute和requestbody直接區(qū)別?@modelattribute的用法不同于@requestbody@modelattribute有兩種用法:一種是直接標(biāo)記方法,另一種是標(biāo)記
modeattribute和requestbody直接區(qū)別?
@modelattribute的用法不同于@requestbody
@modelattribute有兩種用法:一種是直接標(biāo)記方法,另一種是標(biāo)記方法的參數(shù),兩種標(biāo)記方法的效果也不一樣
一種。直接標(biāo)記方法
部署后運(yùn)行,點(diǎn)擊頁(yè)面測(cè)試按鈕查看控制臺(tái)輸出,后臺(tái)控制器不直接進(jìn)入模型測(cè)試.do相反,首先執(zhí)行標(biāo)有@modeldattribute的init方法。應(yīng)該理解,當(dāng)同一控制器中的任何方法被標(biāo)記為@modeldattribute annotation時(shí),只要頁(yè)面請(qǐng)求進(jìn)入控制器,無(wú)論請(qǐng)求哪個(gè)方法,都將首先執(zhí)行標(biāo)記為@modeldattribute的方法。因此,我們可以使用@modeldattribute注釋來進(jìn)行一些初始化操作。當(dāng)同一控制器中的多個(gè)方法被標(biāo)記為@modeldattribute annotation時(shí),所有被標(biāo)記為@modeldattribute的方法都將依次執(zhí)行,然后輸入請(qǐng)求的方法。
當(dāng)@requestmapping標(biāo)記和@modelattribute同時(shí)標(biāo)記在同一方法上時(shí)
點(diǎn)擊測(cè)試頁(yè)面,進(jìn)入控制器后返回,頁(yè)面報(bào)告404。這是因?yàn)樵谕环椒ㄉ蠘?biāo)記兩個(gè)注釋時(shí),邏輯視圖名稱不是返回值,而是請(qǐng)求的返回路徑模型測(cè)試.do生成邏輯視圖。在這里,我們修改代碼,刪除控制器上的@requestmapping標(biāo)記,并修改下一個(gè)頁(yè)面的請(qǐng)求路徑,以便生成的視圖路徑與訪問的頁(yè)面路徑相同。
點(diǎn)擊測(cè)試頁(yè)面,發(fā)現(xiàn)當(dāng)一個(gè)方法同時(shí)有兩個(gè)注解時(shí),該方法的返回值將成為模型的返回值,關(guān)鍵是標(biāo)記名
2、@modelattribute參數(shù)前標(biāo)記
點(diǎn)擊頁(yè)面測(cè)試,而URL address傳遞的參數(shù)會(huì)顯示在頁(yè)面的文本框中,因?yàn)閟pring MVC會(huì)自動(dòng)匹配頁(yè)面?zhèn)鬟f的參數(shù)的name屬性和后臺(tái)控制器中方法的參數(shù)名。如果參數(shù)名稱相同,則會(huì)自動(dòng)匹配。如果控制器中的方法是封裝的bean,它會(huì)在bean中自動(dòng)匹配事實(shí)上,這個(gè)value方法不需要@modeldattribute注釋,只要滿足匹配要求,它也可以得到值
(1)HttpServletRequest類有setAttribute()方法,但沒有setparameter()方法
(2)當(dāng)兩個(gè)web組件鏈接時(shí),鏈接的組件通過getparameter()方法獲取請(qǐng)求參數(shù),例如歡迎.jsP和驗(yàn)證.jsp它們之間有聯(lián)系,歡迎.jsp中有以下代碼:
請(qǐng)輸入用戶名:驗(yàn)證.jsp以及您好.jsp他們之間的關(guān)系是向前的。驗(yàn)證.jsp希望您好.jsp傳遞當(dāng)前用戶名請(qǐng)求.setAttribute(“用戶名”,用戶名)%