版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第10章SpringMVC的Controller主要內(nèi)容
基于注解的控制器
編寫請求處理方法Controller接收請求參數(shù)的方式
重定向和轉(zhuǎn)發(fā)
應(yīng)用@Autowired和@Service進(jìn)行依賴注入@ModelAttribute10.1基于注解的控制器
使用基于注解的控制器,具有如下兩個優(yōu)點(diǎn):1.在基于注解的控制器類中,可以編寫多個處理方法,進(jìn)而可以處理多個請求(動作)。這就允許將相關(guān)的操作編寫在同一個控制器類中,從而減少控制器類的數(shù)量,方便以后的維護(hù)。2.基于注解的控制器不需要在配置文件中部署映射,僅需要使用RequestMapping注釋類型注解一個方法進(jìn)行請求處理。
在SpringMVC中,最重要的兩個注解類型是Controller和RequestMapping,本章將重點(diǎn)介紹它們。10.1.1Controller注解類型
在SpringMVC中,使用org.springframework.stereotype.Controller注解類型聲明某類的實例是一個控制器。packagecontroller;importorg.springframework.stereotype.Controller;/**“@Controller”表示IndexController的實例是一個控制器*@Controller相當(dāng)于@Controller("indexController")*或@Controller(value="indexController")*/@ControllerpublicclassIndexController{ //處理請求的方法}
在SpringMVC中,使用掃描機(jī)制找到應(yīng)用中所有基于注解的控制器類。所以,為了讓控制器類被SpringMVC框架掃描到,需要在配置文件中聲明spring-context,并使用<context:component-scan/>元素指定控制器類的基本包(請確保所有控制器類都在基本包及其子包下)。
<!--使用掃描機(jī)制,掃描控制器類,控制器類都在controller包及其子包下--><context:component-scanbase-package="controller"/>10.1.2RequestMapping注解類型
在基于注解的控制器類中,可以為每個請求編寫對應(yīng)的處理方法。如何將請求與處理方法一一對應(yīng)呢?需要使用org.springframework.web.bind.annotation.RequestMapping注解類型將請求與處理方法一一對應(yīng)。1.方法級別注解2.類級別注解1.方法級別注解@ControllerpublicclassIndexController{
@RequestMapping(value="/index/login") publicStringlogin(){ /**login代表邏輯視圖名稱,需要根據(jù)SpringMVC配置 *文件中internalResourceViewResolver的前綴和后綴找到對應(yīng)的物理視圖 */ return"login"; }
@RequestMapping(value="/index/register") publicStringregister(){ return"register"; }}http://localhost:8080/ch10/index/login2.類級別注解@Controller@RequestMapping("/index")publicclassIndexController{
@RequestMapping("/login") publicStringlogin(){ return"login"; }
@RequestMapping("/register") publicStringregister(){ return"register"; }}http://localhost:8080/ch10/index/login10.1.3編寫請求處理方法
在控制類中每個請求處理方法可以有多個不同類型的參數(shù),以及一個多種類型的返回結(jié)果。
除了ServletAPI參數(shù)類型外,還有輸入輸出流、表單實體類、注解類型、與Spring框架相關(guān)的類型等等,這些類型在后續(xù)章節(jié)中使用時再詳細(xì)介紹。但特別重要的類型是org.springframework.ui.Model類型,該類型是一個包含Map的Spring框架類型。每次調(diào)用請求處理方法時,SpringMVC都將創(chuàng)建org.springframework.ui.Model對象。
最常見的返回類型,就是代表邏輯視圖名稱的String類型,如前面章節(jié)中的請求處理方法。10.2Controller接收請求參數(shù)的常見方式10.2.1通過實體bean接收請求參數(shù)10.2.2通過處理方法的形參接收請求參數(shù)10.2.3通過HttpServletRequest接收請求參數(shù)10.2.4通過@PathVariable接收URL中的請求參數(shù)10.2.5通過@RequestParam接收請求參數(shù)10.2.6通過@ModelAttribute接收請求參數(shù)10.2.1通過實體bean接收請求參數(shù)
通過一個實體bean來接收請求參數(shù),適用于get和post提交請求方式。需要注意的是,bean的屬性名稱必須與請求參數(shù)名稱相同。10.2.2通過處理方法的形參接收請求參數(shù)
通過處理方法的形參接收請求參數(shù),也就是直接把表單參數(shù)寫在控制器類相應(yīng)方法的形參中,即形參名稱與請求參數(shù)名稱完全相同。該接收參數(shù)方式適用于get和post提交請求方式。10.2.3通過HttpServletRequest接收請求參數(shù)
通過HttpServletRequest接收請求參數(shù),適用于get和post提交請求方式。publicStringregister(HttpServletRequestrequest,Modelmodel){ Stringuname=request.getParameter("uname"); Stringupass=request.getParameter("upass");10.2.4通過@PathVariable接收URL中的請求參數(shù) @RequestMapping(value="/register/{uname}/{upass}",method=RequestMethod.GET)//必須加method屬性 /** *通過@PathVariable獲取URL中的參數(shù) */ publicStringregister(@PathVariableStringuname,@PathVariableStringupass,Modelmodel){10.2.5通過@RequestParam接收請求參數(shù)
通過@RequestParam接收請求參數(shù),適用于get和post提交請求方式。
通過@RequestParam接收請求參數(shù)與10.2.2節(jié)“通過處理方法的形參接收請求參數(shù)”的區(qū)別是:當(dāng)請求參數(shù)與接收參數(shù)名不一致時,“通過處理方法的形參接收請求參數(shù)”不會報404錯誤,而“通過@RequestParam接收請求參數(shù)”會404錯誤。10.2.6通過@ModelAttribute接收請求參數(shù)@ModelAttribute注解放在處理方法的形參上時,用于將多個請求參數(shù)封裝到一個實體對象,從而簡化數(shù)據(jù)綁定流程,而且自動暴露為模型數(shù)據(jù)用于視圖頁面展示時使用。而10.2.1節(jié)中只是將多個請求參數(shù)封裝到一個實體對象,并不能暴露為模型數(shù)據(jù)(需要使用model.addAttribute語句才能暴露為模型數(shù)據(jù),數(shù)據(jù)綁定與模型數(shù)據(jù)展示,可參考第12章的內(nèi)容)。
通過@ModelAttribute注解接收請求參數(shù),適用于get和post提交請求方式。@RequestMapping("/register") publicStringregister(@ModelAttribute("user")UserFormuser){ if("zhangsan".equals(user.getUname()) &&"123456".equals(user.getUpass())){ ("成功"); return"login";//注冊成功,跳轉(zhuǎn)到login.jsp }else{ ("失敗"); //使用@ModelAttribute("user")與
model.addAttribute("user",user)功能相同 //在register.jsp頁面上可以使用EL表達(dá)式${user.uname}取
出ModelAttribute的uname值 return"register";//返回register.jsp } }10.3重定向與轉(zhuǎn)發(fā)
在SpringMVC框架中,控制器類中處理方法的return語句默認(rèn)就是轉(zhuǎn)發(fā)實現(xiàn),只不過實現(xiàn)的是轉(zhuǎn)發(fā)到視圖。//轉(zhuǎn)發(fā)到一個請求方法(同一個控制器類里,可省略/index/)return"forward:/index/isLogin";//重定向到一個請求方法return"redirect:/index/isRegister";//轉(zhuǎn)發(fā)到一個視圖return"register";10.4應(yīng)用@Autowired進(jìn)行依賴注入
在前面學(xué)習(xí)的控制器中,并沒有體現(xiàn)MVC的M層,這是因為控制器即充當(dāng)C層,又充當(dāng)M層。這樣設(shè)計程序的系統(tǒng)結(jié)構(gòu)很不合理,應(yīng)該將M層從控制器中分離出來。SpringMVC框架本身就是一個非常優(yōu)秀的MVC框架,它具有一個依賴注入的優(yōu)點(diǎn)??梢酝ㄟ^org.springframework.beans.factory.annotation.Autowired注解類型將依賴注入到一個屬性(成員變量)或方法,如:
@AutowiredpublicUserServiceuserService;
在SpringMVC中,為了能被作為依賴注入,類必須使用org.springframework.stereotype.Service注解類型注明為@Service(一個服務(wù))。另外,還需要在配置文件中使用<context:component-scanbase-package="基本包"/>元素來掃描依賴基本包。10.5@ModelAttribute1.綁定請求參數(shù)到實體對象(表單的命令對象)2.注解一個非請求處理方法1.綁定請求參數(shù)到實體對象(表單的命令對象)該用法如10.2.6節(jié)內(nèi)容:@RequestMapping("/register")publicStringregister(@ModelAttribute("user")UserFormuser){ if("zhangsan".equals(user.getUname()) &&"123456".equals(user.getUpass())){ return"login"; }else{return"register"; }}
上述代碼中“@ModelAttribute("user")UserFormuser”語句的功能有兩個,一是將請求參數(shù)的輸入封裝到user對象中;一是創(chuàng)建UserForm實例,以“user”為鍵值存儲在Model對象中,與“mode
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《GB-T 40831-2021資產(chǎn)管理 財務(wù)與非財務(wù)職能在資產(chǎn)管理活動中的一致性指南》專題研究報告
- 《GBT 15307-2008可轉(zhuǎn)位鉆頭用削平直柄》專題研究報告
- 《GBT 15543-2008電能質(zhì)量 三相電壓不平衡》專題研究報告
- 道路安全交通法培訓(xùn)小結(jié)課件
- 2025年病理科工作總結(jié)及下一年工作計劃
- 道路交通培訓(xùn)課件教學(xué)
- 道岔知識大全課件
- 逼單技巧和方法培訓(xùn)課件
- 達(dá)運(yùn)安全培訓(xùn)課件
- 邊境網(wǎng)絡(luò)通信安全培訓(xùn)課件
- 2026年初二物理寒假作業(yè)(1.31-3.1)
- 2025秋人教版七年級上冊音樂期末測試卷(三套含答案)
- 2025福建德化閩投抽水蓄能有限公司招聘4人(公共基礎(chǔ)知識)綜合能力測試題附答案
- “十五五規(guī)劃綱要”解讀:和美鄉(xiāng)村宜居宜業(yè)
- 廣東省廣州市2026屆高三年級上學(xué)期12月調(diào)研測試數(shù)學(xué)(廣州零模)(含答案)
- 2025-2030中國工業(yè)硅行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 手機(jī)供貨協(xié)議書
- GJB3243A-2021電子元器件表面安裝要求
- 國開大學(xué)2022年01月2136《管理會計》期末考試參考答案
- 狼瘡性腎炎中醫(yī)診療方案
- 健康相關(guān)生存質(zhì)量及其測量和評價課件
評論
0/150
提交評論