Spring MVC開發(fā)技術(shù)指南第3章 Spring MVC的Controller_第1頁
Spring MVC開發(fā)技術(shù)指南第3章 Spring MVC的Controller_第2頁
Spring MVC開發(fā)技術(shù)指南第3章 Spring MVC的Controller_第3頁
Spring MVC開發(fā)技術(shù)指南第3章 Spring MVC的Controller_第4頁
Spring MVC開發(fā)技術(shù)指南第3章 Spring MVC的Controller_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章SpringMVC的Controller主要內(nèi)容

基于注解的控制器Controller接收請求參數(shù)的方式

重定向和轉(zhuǎn)發(fā)

應用@Autowired進行依賴注入@ModelAttribute3.1基于注解的控制器3.1.1@Controller注解類型3.1.2@RequestMapping注解類型3.1.3編寫請求處理方法3.1.1@Controller注解類型

在SpringMVC中,使用org.springframework.stereotype.Controller注解類型聲明某類的實例是一個控制器。例如,2.2.4節(jié)中的IndexController控制器類。別忘了在SpringMVC的配置文件中使用<context:component-scan/>元素(見【例2-1】)或在SpringMVC配置類中使用@ComponentScan注解(見【例2-2】)指定控制器類的基本包,進而掃描所有注解的控制器類。3.1.2@RequestMapping注解類型1.方法級別注解2.類級別注解1.方法級別注解@ControllerpublicclassIndexController{

@RequestMapping(value="/index/login") publicStringlogin(){ /**login代表邏輯視圖名稱,需要根據(jù)SpringMVC配置中 *internalResourceViewResolver的前綴和后綴找到對應的物理視圖 */ return"login"; }

@RequestMapping(value="/index/register") publicStringregister(){ return"register"; }}2.類級別注解@Controller@RequestMapping("/index")publicclassIndexController{

@RequestMapping("/login") publicStringlogin(){ return"login"; }

@RequestMapping("/register") publicStringregister(){ return"register"; }}3.1.3編寫請求處理方法1.請求處理方法中常出現(xiàn)的參數(shù)類型2.請求處理方法常見的返回類型1.請求處理方法中常出現(xiàn)的參數(shù)類型

如果需要在請求處理方法中使用ServletAPI類型,那么可以將這些類型作為請求處理方法的參數(shù)類型。除了ServletAPI參數(shù)類型外,還有輸入輸出流、表單實體類、注解類型、與Spring框架相關(guān)的類型等。但特別重要的類型是org.springframework.ui.Model類型,該類型是一個包含Map的Spring框架類型。每次調(diào)用請求處理方法時,SpringMVC都將創(chuàng)建org.springframework.ui.Model對象。publicStringregister(Modelmodel){ /*在視圖中可以使用EL表達式${success}取出model中的值,有關(guān)EL相關(guān)知識,請參考本書有關(guān)內(nèi)容。*/

model.addAttribute("success","注冊成功"); return"register"; }2.請求處理方法常見的返回類型

最常見的返回類型,就是代表邏輯視圖名稱的String類型,如前面章節(jié)中的請求處理方法。除了String類型外,還有Model、View以及其他任意的Java類型。主要內(nèi)容

基于注解的控制器Controller接收請求參數(shù)的方式

重定向和轉(zhuǎn)發(fā)

應用@Autowired進行依賴注入@ModelAttribute3.2Controller接收請求參數(shù)的常見方式3.2.1通過實體Bean接收請求參數(shù)3.2.2通過處理方法的形參接收請求參數(shù)3.2.3通過HttpServletRequest接收請求參數(shù)3.2.4通過@PathVariable接收URL中的請求參數(shù)3.2.5通過@RequestParam接收請求參數(shù)3.2.6通過@ModelAttribute接收請求參數(shù)3.2.1通過實體Bean接收請求參數(shù)Bean的屬性名稱必須與請求參數(shù)名稱相同?!纠?-1】通過實體Bean接收請求參數(shù)。應用ch3_1的具體要求是:通過應用程序的主頁index.jsp的超鏈接,進入注冊頁面register.jsp和登錄頁面login.jsp,注冊成功跳轉(zhuǎn)到登錄頁面,登錄成功跳轉(zhuǎn)到主頁面main.jsp。注冊頁面表單<formaction="user/register"method="post"name="registForm"> <tableborder=1> <tr> <td>姓名:</td> <td>

<inputtype="text"name="uname"value="${uname}"/> </td> </tr> <tr> <td>密碼:</td> <td><inputtype="password"name="upass"/></td> </tr> <tr> <td>確認密碼:</td> <td><inputtype="password"name="reupass"/></td> </tr> <tr> <tdcolspan="2"align="center"> <inputtype="submit"value="注冊"/> </td> </tr> </table> </form>Bean類publicclassUserForm{ privateStringuname;//與請求參數(shù)名稱相同 privateStringupass; privateStringreupass; //省略getter和setter方法}控制器方法 /** *處理注冊 *使用UserForm對象(實體Bean)user接收注冊頁面提交的請求參數(shù) */ @RequestMapping("/register") publicStringregister(UserFormuser,Modelmodel){ if("zhangsan".equals(user.getUname()) &&"123456".equals(user.getUpass())){ ("成功"); return"login";//注冊成功,跳轉(zhuǎn)到login.jsp }else{ ("失敗"); //在register.jsp頁面上可以使用EL表達式取出model的uname值 model.addAttribute("uname",user.getUname()); return"register";//返回register.jsp } }3.2.2通過處理方法的形參接收請求參數(shù) @RequestMapping("/register") /** *通過形參接收請求參數(shù),形參名稱與請求參數(shù)名稱完全相同 */ publicStringregister(Stringuname,Stringupass,Modelmodel){ if("zhangsan".equals(uname) &&"123456".equals(upass)){ ("成功"); return"login";//注冊成功,跳轉(zhuǎn)到login.jsp }else{ ("失敗"); //在register.jsp頁面上可以使用EL表達式取出model的uname值 model.addAttribute("uname",uname); return"register";//返回register.jsp } }3.2.3通過HttpServletRequest接收請求參數(shù)@RequestMapping("/register") /* *通過HttpServletRequest接收請求參數(shù) */ publicStringregister(HttpServletRequest

request,Modelmodel){ Stringuname=request.getParameter("uname"); Stringupass=request.getParameter("upass"); if("zhangsan".equals(uname) &&"123456".equals(upass)){ ("成功"); return"login";//注冊成功,跳轉(zhuǎn)到login.jsp }else{ ("失敗"); //在register.jsp頁面上可以使用EL表達式取出model的uname值 model.addAttribute("uname",uname); return"register";//返回register.jsp } }3.2.4通過@PathVariable接收URL中的請求參數(shù)

@RequestMapping(value="/register/{uname}/{upass}",method=RequestMethod.GET)//必須加method屬性 /** *通過@PathVariable獲取URL中的參數(shù) */ publicStringregister(@PathVariableStringuname,@PathVariableStringupass,Modelmodel){ if("zhangsan".equals(uname) &&"123456".equals(upass)) return"login";//注冊成功,跳轉(zhuǎn)到login.jsp else{ //在register.jsp頁面上可以使用EL表達式取出model的uname值 model.addAttribute("uname",uname); return"register";//返回register.jsp } }http://localhost:8080/ch3_1/user/register/zhangsan/1234563.2.5通過@RequestParam接收請求參數(shù) @RequestMapping("/register") /** *通過@RequestParam接收請求參數(shù) */ publicStringregister(@RequestParamStringuname,@RequestParamStringupass,Modelmodel){ if("zhangsan".equals(uname) &&"123456".equals(upass)){ ("成功"); return"login";//注冊成功,跳轉(zhuǎn)到login.jsp }else{ ("失敗"); //在register.jsp頁面上可以使用EL表達式取出model的uname值 model.addAttribute("uname",uname); return"register";//返回register.jsp } }3.2.6通過@ModelAttribute接收請求參數(shù) @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表達式${user.uname}取出ModelAttribute的uname值 return"register";//返回register.jsp } }主要內(nèi)容

基于注解的控制器

Controller接收請求參數(shù)的方式

重定向和轉(zhuǎn)發(fā)

應用@Autowired進行依賴注入@ModelAttribute3.3重定向與轉(zhuǎn)發(fā)轉(zhuǎn)發(fā)是服務器行為,重定向是客戶端行為。@Controller@RequestMapping("/index")publicclassIndexController{ @RequestMapping("/login") publicStringlogin(){ //轉(zhuǎn)發(fā)到一個請求方法(同一個控制器類里,可省略/index/)

return"forward:/index/isLogin"; } @RequestMapping("/isLogin") publicStringisLogin(){ //重定向到一個請求方法

return"redirect:/index/isRegister"; } @RequestMapping("/isRegister") publicStringisRegister(){ //轉(zhuǎn)發(fā)到一個視圖

return"register"; }}主要內(nèi)容

基于注解的控制器

Controller接收請求參數(shù)的方式

重定向和轉(zhuǎn)發(fā)

應用@Autowired進行依賴注入@ModelAttribute3.4應用@Autowired進行依賴注入SpringMVC框架可以通過org.springframework.beans.factory.annotation.Autowired注解類型將依賴注入到一個屬性(成員變量)或方法,如:

@AutowiredpublicUserServiceuserService;

在SpringMVC中,為了能被作為依賴注入,實現(xiàn)類必須使用org.springframework.stereotype.Service注解類型注明為@Service(一個服務)。另外,還需要在配置文件中使用<context:component-scanbase-package="基本包"/>元素或者在配置類中使用@ComponentScan("基本包")注解來掃描依賴基本包。將【例3-1】的ch3_1應用的“登錄”和“注冊”的業(yè)務邏輯處理分離出來,使用Service層實現(xiàn)。主要內(nèi)容

基于注解的控制器

Controller接收請求參數(shù)的方式

重定向和轉(zhuǎn)發(fā)

應用@Autowired進行依賴注入@ModelAttribute3.5@ModelAttribute1.綁定請求參數(shù)到實體對象(表單的命令對象)2.注解一個非

溫馨提示

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

評論

0/150

提交評論