Java-EE框架整合開發(fā)入門到實(shí)戰(zhàn) 第10章-Spring MVC的Controller_第1頁
Java-EE框架整合開發(fā)入門到實(shí)戰(zhàn) 第10章-Spring MVC的Controller_第2頁
Java-EE框架整合開發(fā)入門到實(shí)戰(zhàn) 第10章-Spring MVC的Controller_第3頁
Java-EE框架整合開發(fā)入門到實(shí)戰(zhàn) 第10章-Spring MVC的Controller_第4頁
Java-EE框架整合開發(fā)入門到實(shí)戰(zhàn) 第10章-Spring MVC的Controller_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第10章

Spring

MVC的Controller主要內(nèi)容基于注解的控制器編寫請(qǐng)求處理方法Controller接收請(qǐng)求參數(shù)的方式重定向和轉(zhuǎn)發(fā)應(yīng)用@Autowired和@Service進(jìn)行依賴注入@ModelAttributeJava

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)Java

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)10.1

基于注解的控制器使用基于注解的控制器,具有如下兩個(gè)優(yōu)點(diǎn):在基于注解的控制器類中,可以編寫多個(gè)處理方法,進(jìn)而可以處理多個(gè)請(qǐng)求(動(dòng)作)。這就允許將相關(guān)的操作編寫在同一個(gè)控制器類中,從而減少控制器類的數(shù)量,方便以后的維護(hù)?;谧⒔獾目刂破鞑恍枰谂渲梦募胁渴鹩成?,僅需要使用RequestMapping注釋類型注解一個(gè)方法進(jìn)行請(qǐng)求處理。在Spring

MVC中,最重要的兩個(gè)注解類型是Controller和RequestMapping,本章將重點(diǎn)介紹它們。Java

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)10.1.1

Controller注解類型在Spring

MVC中,使用org.springframework.stereotype.Controller注解類型聲明某類的實(shí)例是一個(gè)控制器。package

controller;import

org.springframework.stereotype.Controller;/**“@Controller”表示IndexController的實(shí)例是一個(gè)控制器@Controller相當(dāng)于@Controller("indexController")或@Controller(value="indexController")*/@Controllerpublic

class

IndexController

{//處理請(qǐng)求的方法}Java

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)在SpringMVC中,使用掃描機(jī)制找到應(yīng)用中所有基于注解的控制器類。所以,為了讓控制器類被Spring

MVC框架掃描到,需要在配置文件中聲明spring-context,并使用<context:component-scan/>元素指定控制器類的基本包(請(qǐng)確保所有控制器類都在基本包及其子包下)。<!--使用掃描機(jī)制,掃描控制器類,控制器類都在controller包及其子包下--><context:component-scan

base-package="controller"/>Java

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)10.1.2

RequestMapping注解類型在基于注解的控制器類中,可以為每個(gè)請(qǐng)求編寫對(duì)應(yīng)的處理方法。如何將請(qǐng)求與處理方法一一對(duì)應(yīng)呢?需要使用

org.springframework.web.bind.annotation.RequestMapping注解類型將請(qǐng)求與處理方法一一對(duì)應(yīng)。方法級(jí)別注解類級(jí)別注解Java

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)1.方法級(jí)別注解@Controllerpublic

class

IndexController

{@RequestMapping(value

="/index/login")public

String

login()

{/**login代表邏輯視圖名稱,需要根據(jù)Spring

MVC配置*文件中internalResourceViewResolver的前綴和后綴找到對(duì)應(yīng)的物理視圖*/return

"login";}@RequestMapping(value

=

"/index/register")public

String

register()

{return

"register";}}http://localhost:8080/ch10/index/loginJava

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)2.類級(jí)別注解@Controller@RequestMapping("/index")public

class

IndexController

{@RequestMapping("/login")public

String

login()

{return

"login";}@RequestMapping("/register")public

String

register()

{return

"register";}}http://localhost:8080/ch10/index/loginJava

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)10.1.3

編寫請(qǐng)求處理方法在控制類中每個(gè)請(qǐng)求處理方法可以有多個(gè)不同類型的參數(shù),以及一個(gè)多種類型的返回結(jié)果。除了Servlet

API參數(shù)類型外,還有輸入輸出流、表單實(shí)體類、注解類型、與Spring框架相關(guān)的類型等等,這些類型在后續(xù)章節(jié)中使用時(shí)再詳細(xì)介紹。但特別重要的類型是org.springframework.ui.Model類型,該類型是一個(gè)包含Map的Spring框架類型。每次調(diào)用請(qǐng)求處理方法時(shí),Spring

MVC都將創(chuàng)建org.springframework.ui.Model對(duì)象。最常見的返回類型,就是代表邏輯視圖名稱的String類型,如前面章節(jié)中的請(qǐng)求處理方法。Java

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)10.2

Controller接收請(qǐng)求參數(shù)的常見方式通過實(shí)體bean接收請(qǐng)求參數(shù)通過處理方法的形參接收請(qǐng)求參數(shù)通過HttpServletRequest接收請(qǐng)求參數(shù)通過@PathVariable接收URL中的請(qǐng)求參數(shù)通過@RequestParam接收請(qǐng)求參數(shù)通過@ModelAttribute接收請(qǐng)求參數(shù)Java

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)10.2.1 通過實(shí)體bean接收請(qǐng)求參數(shù)通過一個(gè)實(shí)體bean來接收請(qǐng)求參數(shù),適用于get和post提交請(qǐng)求方式。需要注意的是,bean的屬性名稱必須與請(qǐng)求參數(shù)名稱相同。Java

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)10.2.2

通過處理方法的形參接收請(qǐng)求參數(shù)通過處理方法的形參接收請(qǐng)求參數(shù),也就是直接把表單參數(shù)寫在控制器類相應(yīng)方法的形參中,即形參名稱與請(qǐng)求參數(shù)名稱完全相同。該接收參數(shù)方式適用于get和post提交請(qǐng)求方式。Java

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)10.2.3 通過HttpServletRequest接收請(qǐng)求參數(shù)通過HttpServletRequest接收請(qǐng)求參數(shù),適用于get和post提交請(qǐng)求方式。public

String

register(HttpServletRequest

request,

Model

model)

{String

uname

=

request.getParameter("uname");String

upass

=

request.getParameter("upass");Java

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)10.2.4 通過@PathVariable接收URL中的請(qǐng)求參數(shù)@RequestMapping(value="/register/{uname}/{upass}",method=RequestMethod.GET)//必須加method屬性/***通過@PathVariable獲取URL中的參數(shù)*/public

String

register(@PathVariable

String

uname,@PathVariable

Stringupass,

Model

model)

{Java

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)10.2.5 通過@RequestParam接收請(qǐng)求參數(shù)通過@RequestParam接收請(qǐng)求參數(shù),適用于get和post提交請(qǐng)求方式。通過@RequestParam接收請(qǐng)求參數(shù)與10.2.2節(jié)“通過處理方法的形參接收請(qǐng)求參數(shù)”的區(qū)別是:當(dāng)請(qǐng)求參數(shù)與接收參數(shù)名不一致時(shí),“通過處理方法的形參接收請(qǐng)求參數(shù)”不會(huì)報(bào)404錯(cuò)誤,而“通過@RequestParam接收請(qǐng)求參數(shù)”會(huì)404錯(cuò)誤。Java

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)10.2.6 通過@ModelAttribute接收請(qǐng)求參數(shù)@ModelAttribute注解放在處理方法的形參上時(shí),用于將多個(gè)請(qǐng)求參數(shù)封裝到一個(gè)實(shí)體對(duì)象,從而簡(jiǎn)化數(shù)據(jù)綁定流程,而且自動(dòng)暴露為模型數(shù)據(jù)用于視圖頁面展示時(shí)使用。而10.2.1節(jié)中只是將多個(gè)請(qǐng)求參數(shù)封裝到一個(gè)實(shí)體對(duì)象,并不能暴露為模型數(shù)據(jù)(需要使用model.addAttribute語句才能暴露為模型數(shù)據(jù),數(shù)據(jù)綁定與模型數(shù)據(jù)展示,可參考第12章的內(nèi)容)。通過@ModelAttribute注解接收請(qǐng)求參數(shù),適用于get和post提交請(qǐng)求方式。Java

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)@RequestMapping("/register")public

String

register(@ModelAttribute("user")

UserForm

user)

{if("zhangsan".equals(user.getUname())&&

"123456".equals(user.getUpass())){("成功");return

"login";//注冊(cè)成功,跳轉(zhuǎn)到login.jsp}else{("失敗");//使用@ModelAttribute("user")與model.addAttribute("user",user)功能相同//在register.jsp頁面上可以使用EL表達(dá)式${user.uname}取出ModelAttribute的uname值return

"register";//返回register.jsp}}Java

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)10.3

重定向與轉(zhuǎn)發(fā)在Spring

MVC框架中,控制器類中處理方法的return語句默認(rèn)就是轉(zhuǎn)發(fā)實(shí)現(xiàn),只不過實(shí)現(xiàn)的是轉(zhuǎn)發(fā)到視圖。//轉(zhuǎn)發(fā)到一個(gè)請(qǐng)求方法(同一個(gè)控制器類里,可省略/index/)return"forward:/index/isLogin";//重定向到一個(gè)請(qǐng)求方法return

"redirect:/index/isRegister";//轉(zhuǎn)發(fā)到一個(gè)視圖return"register";Java

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)10.4 應(yīng)用@Autowired進(jìn)行依賴注入在前面學(xué)習(xí)的控制器中,并沒有體現(xiàn)MVC的M層,這是因?yàn)榭刂破骷闯洚?dāng)C層,又充當(dāng)M層。這樣設(shè)計(jì)程序的系統(tǒng)結(jié)構(gòu)很不合理,應(yīng)該將M層從控制器中分離出來。Spring

MVC框架本身就是一個(gè)非常優(yōu)秀的MVC框架,它具有一個(gè)依賴注入的優(yōu)點(diǎn)??梢酝ㄟ^org.springframework.beans.factory.annotation.Autowired注解類型將依賴注入到一個(gè)屬性(成員變量)或方法,如:@Autowiredpublic

UserService

userService;在Spring

MVC中,為了能被作為依賴注入,類必須使用org.springframework.stereotype.Service注解類型注明為@Service(一個(gè)服務(wù))。另外,還需要在配置文件中使用<context:component-scan

base-package="基本包"/>元素來掃描依賴基本包。Java

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)10.5

@ModelAttribute綁定請(qǐng)求參數(shù)到實(shí)體對(duì)象(表單的命令對(duì)象)注解一個(gè)非請(qǐng)求處理方法Java

EE框架整合開發(fā)入門到實(shí)戰(zhàn)——Spring+Spring

MVC+MyBatis(微課版)1.綁定請(qǐng)求參數(shù)到實(shí)體對(duì)象(表單的命令對(duì)象)該用法如10.2.6節(jié)內(nèi)容:@RequestMapping("/register")public

String

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論