2023SpringBoot教學(xué)課件 第10章 Spring MVC的Controller_第1頁
2023SpringBoot教學(xué)課件 第10章 Spring MVC的Controller_第2頁
2023SpringBoot教學(xué)課件 第10章 Spring MVC的Controller_第3頁
2023SpringBoot教學(xué)課件 第10章 Spring MVC的Controller_第4頁
2023SpringBoot教學(xué)課件 第10章 Spring MVC的Controller_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論