![2023SpringBoot教學(xué)課件 第10章 Spring MVC的Controller_第1頁](http://file4.renrendoc.com/view12/M04/21/0F/wKhkGWbzZvaAJbD2AAEpuh9jWok837.jpg)
![2023SpringBoot教學(xué)課件 第10章 Spring MVC的Controller_第2頁](http://file4.renrendoc.com/view12/M04/21/0F/wKhkGWbzZvaAJbD2AAEpuh9jWok8372.jpg)
![2023SpringBoot教學(xué)課件 第10章 Spring MVC的Controller_第3頁](http://file4.renrendoc.com/view12/M04/21/0F/wKhkGWbzZvaAJbD2AAEpuh9jWok8373.jpg)
![2023SpringBoot教學(xué)課件 第10章 Spring MVC的Controller_第4頁](http://file4.renrendoc.com/view12/M04/21/0F/wKhkGWbzZvaAJbD2AAEpuh9jWok8374.jpg)
![2023SpringBoot教學(xué)課件 第10章 Spring MVC的Controller_第5頁](http://file4.renrendoc.com/view12/M04/21/0F/wKhkGWbzZvaAJbD2AAEpuh9jWok8375.jpg)
版權(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)點:1.在基于注解的控制器類中,可以編寫多個處理方法,進(jìn)而可以處理多個請求(動作)。這就允許將相關(guān)的操作編寫在同一個控制器類中,從而減少控制器類的數(shù)量,方便以后的維護(hù)。2.基于注解的控制器不需要在配置文件中部署映射,僅需要使用RequestMapping注釋類型注解一個方法進(jìn)行請求處理。
在SpringMVC中,最重要的兩個注解類型是Controller和RequestMapping,本章將重點介紹它們。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)點??梢酝ㄟ^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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- PB-22-N-4-Hydroxypentyl-3-carboxyindole-metabolite-生命科學(xué)試劑-MCE-7583
- EMPO-生命科學(xué)試劑-MCE-2695
- 二零二五年度自動駕駛車輛測試與示范運(yùn)營合同
- 二零二五年度健康產(chǎn)品銷售折扣與會員管理系統(tǒng)合同
- 2025年度體育設(shè)施建設(shè)與運(yùn)營簽合同授權(quán)委托書
- 2025年度董事薪酬體系設(shè)計與聘任合同
- 2025年度荒山開發(fā)使用權(quán)出讓合同
- 2025年度林業(yè)保護(hù)駕駛員聘用與巡護(hù)服務(wù)合同
- 二零二五年度船舶船員勞動合同及船舶事故應(yīng)急處理合同
- 二零二五年度2025年度離婚協(xié)議版:婚姻解除后財產(chǎn)分配及子女監(jiān)護(hù)權(quán)及撫養(yǎng)協(xié)議
- 2025年度廚師職業(yè)培訓(xùn)學(xué)院合作辦學(xué)合同4篇
- 《組織行為學(xué)》第1章-組織行為學(xué)概述
- 25版六年級寒假特色作業(yè)
- 浙江省杭州市9+1高中聯(lián)盟2025屆高三一診考試英語試卷含解析
- 市場營銷試題(含參考答案)
- 2024年山東省泰安市高考物理一模試卷(含詳細(xì)答案解析)
- 護(hù)理指南手術(shù)器械臺擺放
- 腫瘤患者管理
- 四川省成都市高新區(qū)2024年七年級上學(xué)期語文期末試卷【含答案】
- 2025年中國航空部附件維修行業(yè)市場競爭格局、行業(yè)政策及需求規(guī)模預(yù)測報告
- 《應(yīng)收培訓(xùn)》課件
評論
0/150
提交評論