《Java EE框架整合開發(fā)入門到實戰(zhàn)(第2版)》 課件 第7章 Spring MVC的Controller_第1頁
《Java EE框架整合開發(fā)入門到實戰(zhàn)(第2版)》 課件 第7章 Spring MVC的Controller_第2頁
《Java EE框架整合開發(fā)入門到實戰(zhàn)(第2版)》 課件 第7章 Spring MVC的Controller_第3頁
《Java EE框架整合開發(fā)入門到實戰(zhàn)(第2版)》 課件 第7章 Spring MVC的Controller_第4頁
《Java EE框架整合開發(fā)入門到實戰(zhàn)(第2版)》 課件 第7章 Spring MVC的Controller_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第7章SpringMVC的Controller學習目的與要求本章重點講解基于注解的控制器、Controller接收請求參數(shù)的方式以及編寫請求處理方法。通過本章的學習,掌握基于注解的控制器的編寫方法,掌握在Controller中如何接收請求參數(shù)以及編寫請求處理方法?!禞avaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社目錄7.1基于注解的控制器7.2Controller接收請求參數(shù)的常見方式7.3重定向與轉發(fā)7.4應用@Autowired進行依賴注入7.5@ModelAttribute注解《JavaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社7.1基于注解的控制器使用基于注解的控制器,具有如下兩個優(yōu)點:1.在基于注解的控制器類中,可以編寫多個處理方法,進而可以處理多個請求(動作)。這就允許將相關的操作編寫在同一個控制器類中,從而減少控制器類的數(shù)量,方便以后的維護。2.基于注解的控制器不需要在配置文件中部署映射,僅需要使用RequestMapping注解類型注解一個方法進行請求處理。在SpringMVC中,最重要的兩個注解類型是Controller和RequestMapping?!禞avaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社7.1.1Controller注解類型在SpringMVC中,使用org.springframework.stereotype.Controller注解類型聲明某類的實例是一個控制器。例如,在應用的src/main/java目錄下,創(chuàng)建controller

包,并在該包中創(chuàng)建Controller注解的控制器類IndexController。/**“@Controller”表示IndexController的實例是一個控制器*@Controller相當于@Controller("indexController")或@Controller(value="indexController")*/@ControllerpublicclassIndexController{ //處理請求的方法}《JavaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社7.1.2RequestMapping注解類型需要使用RequestMapping注解類型將請求與處理方法一一對應。1.方法級別注解@RequestMapping(value="/index/login")publicStringlogin(){

return"login";}2.類級別注解@RequestMapping("/index")publicclassIndexController{

@RequestMapping("/login") publicStringlogin(){ return"login"; }《JavaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社7.1.2RequestMapping注解類型為方便程序維護,建議開發(fā)者采用類級別注解,將相關處理放在同一個控制器類中,例如,對商品的增、刪、改、查處理方法都可以放在GoodsOperate控制類中。@RequestMapping注解的value屬性表示請求路徑;method屬性表示請求方式。如果方法上的@RequestMapping注解沒有設置method屬性,則get和post請求都可以訪問;如果方法上的@RequestMapping注解設置了method屬性,則只能是相應的請求方式可以訪問。@RequestMapping還有特定于HTTP請求方式的組合注解?!禞avaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社(1)@GetMapping相當于@RequestMapping(method=RequestMethod.GET),處理get請求。使用@RequestMapping編寫是@RequestMapping(value="requestpath",method=RequestMethod.GET);使用@GetMapping可簡寫為@GetMapping("requestpath")。通常在查詢數(shù)據(jù)時使用?!禞avaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社(2)@PostMapping相當于@RequestMapping(method=HttpMethod.POST),處理post請求。使用@RequestMapping編寫是@RequestMapping(value="requestpath",method=RequestMethod.POST);使用@PostMapping可簡寫為@PostMapping("requestpath")。通常在新增數(shù)據(jù)時使用?!禞avaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社(3)@PutMapping、@PatchMapping相當于@RequestMapping(method=RequestMethod.PUT/PATCH),處理put和patch請求。使用@RequestMapping編寫是@RequestMapping(value="requestpath",method=RequestMethod.PUT/PATCH);使用@PutMapping可簡寫為@PutMapping("requestpath")。兩者都是更新,@PutMapping為全局更新,@PatchMapping是對put方式的一種補充,put是對整體的更新,patch是對局部的更新。通常在更新數(shù)據(jù)時使用?!禞avaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社(4)@DeleteMapping相當于@RequestMapping(method=RequestMethod.DELETE),處理delete請求。使用@RequestMapping編寫是@RequestMapping(value="requestpath",method=RequestMethod.DELETE);使用@PutMapping可簡寫為@DeleteMapping("requestpath")。通常在刪除數(shù)據(jù)時使用?!禞avaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社7.1.3編寫請求處理方法在控制器類中每個請求處理方法可以有多個不同類型的參數(shù),以及一個多種類型的返回結果。如果需要在請求處理方法中使用ServletAPI類型,那么可以將這些類型作為請求處理方法的參數(shù)類型。除了ServletAPI參數(shù)類型外,還有輸入輸出流、表單實體類、注解類型、與Spring框架相關的類型等等。但特別重要的類型是org.springframework.ui.Model類型,該類型是一個包含Map的Spring框架類型。每次調用請求處理方法時,SpringMVC都將創(chuàng)建org.springframework.ui.Model對象。最常見的返回類型,就是代表邏輯視圖名稱的String類型。除了String類型外,還有Model、View以及其他任意的Java類型?!禞avaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社目錄7.1基于注解的控制器7.2Controller接收請求參數(shù)的常見方式7.3重定向與轉發(fā)7.4應用@Autowired進行依賴注入7.5@ModelAttribute注解《JavaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社7.2.1通過實體bean接收請求參數(shù)通過一個實體bean來接收請求參數(shù),適用于get和post提交請求方式。需要注意的是,bean的屬性名稱必須與請求參數(shù)名稱相同。bean的屬性類型,根據(jù)實際情況而定,例如接收表單輸入的年齡,屬性類型應該為int或Integer。SpringMVC框架將自動把表單輸入的字符串轉換為bean屬性對應的數(shù)據(jù)類型?!纠?-1】使用實體bean接收請求參數(shù)。實例的具體要求:單擊如圖7.1所示的“注冊”超鏈接,打開如圖7.2所示的注冊頁面;注冊成功,打開如圖7.3所示的登錄頁面;登錄成功打開如圖7.4所示的主頁面?!禞avaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社7.2.1通過實體bean接收請求參數(shù)《JavaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社1.創(chuàng)建Web應用并引入JAR包在Eclipse中,創(chuàng)建一個名為ch7_1的DynamicWebProject,在ch7_1的lib目錄中添加SpringMVC程序所需要的JAR包,包括Spring的4個基礎JAR包、SpringCommonsLoggingBridge對應的JAR包spring-jcl-6.0.0.jar、AOP實現(xiàn)JAR包spring-aop-6.0.0.jar、DispatcherServlet接口所依賴的性能監(jiān)控包(micrometer-observation.jar和micrometer-commons.jar)、Java增強庫(lombok-1.18.24.jar)以及兩個Web相關的JAR包(spring-web-6.0.0.jar和spring-webmvc-6.0.0.jar)?!禞avaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社2.創(chuàng)建首頁面在ch7_1應用的src/main/webapp目錄下創(chuàng)建index.jsp頁面。<body>

沒注冊的用戶,請<ahref="index/register">注冊</a>!<br>

已注冊的用戶,去<ahref="index/login">登錄</a>!</body>《JavaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社3.創(chuàng)建實體bean類在ch7_1應用的src/main/java目錄下,創(chuàng)建包pojo,并在該包中創(chuàng)建實體類UserForm,具體代碼如下。importlombok.Data;/***使用@Data注解實體屬性無需Setter和Getter方法,需要給Eclipse安裝lombok插件*/@DatapublicclassUserForm{ privateStringuname;//與請求參數(shù)名稱相同

privateStringupass; privateStringreupass;}《JavaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社4.創(chuàng)建控制器類在ch7_1應用的src/main/java目錄下,創(chuàng)建名為controller的包,并在該包中創(chuàng)建控制器類IndexController和UserController?!禞avaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社@Controller@RequestMapping("/index")publicclassIndexController{

@GetMapping("/login") publicStringlogin(){ return"login";

//跳轉到“/WEB-INF/jsp/login.jsp” }

@GetMapping("/register") publicStringregister(){ return"register"; }}5.創(chuàng)建配置文件在ch7_1應用的src/main/webapp/WEB-INF目錄下,創(chuàng)建配置文件springmvc-servlet.xml和web.xml。<context:component-scanbase-package="controller"/><mvc:annotation-driven/><!--annotation-driven用于簡化開發(fā)的配置,替代注解處理器和適配器的配置--><!--使用resources過濾掉不需要dispatcherservlet的資源(即靜態(tài)資源,如css、js、html、images)。使用resources時,必須使用annotation-driven,不然resources元素將阻止任意控制器被調用。--><!--允許static目錄下所有文件可見--><mvc:resourceslocation="/static/"mapping="/static/**"></mvc:resources><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"

id="internalResourceViewResolver">

<!--前綴-->

<propertyname="prefix"value="/WEB-INF/jsp/"/>

<!--后綴-->

<propertyname="suffix"value=".jsp"/></bean>《JavaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社6.創(chuàng)建頁面視圖在ch7_1應用的src/main/webapp/WEB-INF目錄下,創(chuàng)建jsp文件夾,并在該文件夾中創(chuàng)建register.jsp(注冊頁面)、login.jsp(登錄頁面)和main.jsp(主頁面)?!禞avaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社7.測試應用運行應用ch7_1的首頁面index.jsp(選中index.jsp文件,右鍵選擇【RunAs】/【RunonServer】),進行程序測試?!禞avaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社7.2.2通過處理方法的形參接收請求參數(shù)通過處理方法的形參接收請求參數(shù),也就是直接把表單參數(shù)寫在控制器類相應方法的形參中,即形參名稱與請求參數(shù)名稱完全相同。該接收參數(shù)方式適用于get和post提交請求方式??梢詫?.2.1節(jié)控制器類UserController中register方法的代碼修改如下。@PostMapping("/register")publicStringregister(Stringuname,Stringupass,Modelmodel){

if("zhangsan".equals(uname)

&&"123456".equals(upass)){

("成功");

return"login";

}else{

("失敗");

model.addAttribute("uname",uname);

return"register";

}《JavaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社7.2.3通過HttpServletRequest接收請求參數(shù)通過HttpServletRequest接收請求參數(shù),適用于get和post提交請求方式??梢詫?.2.1節(jié)控制器類UserController中register方法的代碼修改如下。@PostMapping("/register")publicStringregister(HttpServletRequestrequest,Modelmodel){ Stringuname=request.getParameter("uname"); Stringupass=request.getParameter("upass"); if("zhangsan".equals(uname) &&"123456".equals(upass)){ ("成功"); return"login"; }else{ ("失敗"); model.addAttribute("uname",uname); return"register"; }}《JavaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社7.2.4通過@PathVariable接收URL中的請求參數(shù)通過@PathVariable獲取URL中的參數(shù),控制器類的示例代碼,具體如下。@Controller@RequestMapping("/user")publicclassUserController{

@GetMapping("/register/{uname}/{upass}") publicStringregister(@PathVariableStringuname,@PathVariableStringupass,Modelmodel){ }}訪問http://localhost:8080/ch7_1/user/register/zhangsan/123456路徑時,上述代碼自動將URL中模板變量{uname}和{upass}綁定到通過@PathVariable注解的同名參數(shù)上,即uname=zhangsan、upass=123456?!禞avaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社7.2.5通過@RequestParam接收請求參數(shù)通過@RequestParam接收請求參數(shù),適用于get和post提交請求方式??梢詫?.2.1節(jié)控制器類UserController中register方法的代碼修改如下。@PostMapping("/register")publicStringregister(@RequestParamStringuname,@RequestParamStringupass,Modelmodel){}通過@RequestParam接收請求參數(shù)與7.2.2節(jié)“通過處理方法的形參接收請求參數(shù)”的區(qū)別是:當請求參數(shù)與接收參數(shù)名稱不一致時,“通過處理方法的形參接收請求參數(shù)”不會報400錯誤,而“通過@RequestParam接收請求參數(shù)”會400錯誤,方便查找錯誤?!禞avaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社7.2.6通過@ModelAttribute接收請求參數(shù)@ModelAttribute注解放在處理方法的形參上時,用于將多個請求參數(shù)封裝到一個實體對象,從而簡化數(shù)據(jù)綁定流程,而且自動暴露為模型數(shù)據(jù)用于視圖頁面展示時使用。而7.2.1節(jié)中只是將多個請求參數(shù)封裝到一個實體對象,并不能暴露為模型數(shù)據(jù),需要使用model.addAttribute語句才能暴露為模型數(shù)據(jù)。通過@ModelAttribute注解接收請求參數(shù),適用于get和post提交請求方式??梢詫?.2.1節(jié)中控制器類UserController中register方法的代碼修改如下?!禞avaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社7.2.6通過@ModelAttribute接收請求參數(shù)@PostMapping("/register")publicStringregister(@ModelAttribute("user")UserFormuser){ if("zhangsan".equals(user.getUname())

}else{

}}《JavaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社目錄7.1基于注解的控制器7.2Controller接收請求參數(shù)的常見方式7.3重定向與轉發(fā)7.4應用@Autowired進行依賴注入7.5@ModelAttribute注解《JavaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社7.3重定向與轉發(fā)重定向是將用戶從當前處理請求定向到另一個視圖(如JSP)或處理請求,以前的請求(request)中存放的信息全部失效,并進入一個新的request作用域;轉發(fā)是將用戶對當前處理的請求轉發(fā)給另一個視圖或處理請求,以前的request中存放的信息不會失效。轉發(fā)是服務器行為,重定向是客戶端行為。在SpringMVC框架中,控制器類中處理方法的return語句默認就是轉發(fā)實現(xiàn),只不過實現(xiàn)的是轉發(fā)到視圖。《JavaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社7.3重定向與轉發(fā)//轉發(fā)到一個請求方法(同一個控制器類中,可省略/index/)return"forward:/index/isLogin";//重定向到一個請求方法(同一個控制器類中,可省略/index/)return"redirect:/index/isRegister";//轉發(fā)到一個視圖return"register";在SpringMVC框架中,不管重定向或轉發(fā),都需要符合視圖解析器的配置,如果直接轉發(fā)到一個不需要DispatcherServlet的資源,如:return"redirect:/html/my.html";需要使用mvc:resources配置,示例代碼如下。<mvc:resourceslocation="/html/"mapping="/html/**"></mvc:resources>《JavaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社目錄7.1基于注解的控制器7.2Controller接收請求參數(shù)的常見方式7.3重定向與轉發(fā)7.4應用@Autowired進行依賴注入7.5@ModelAttribute注解《JavaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社7.4應用@Autowired進行依賴注入在前面學習的控制器中,并沒有體現(xiàn)MVC的M層,這是因為控制器即充當C層,又充當M層。這樣設計程序的系統(tǒng)結構很不合理,應該將M層從控制器中分離出來。SpringMVC框架本身就是一個非常優(yōu)秀的MVC框架,它具有一個依賴注入的優(yōu)點??梢酝ㄟ^Autowired注解類型將依賴注入到一個屬性(成員變量)或方法,示例如下。@AutowiredpublicUserServiceuserService;在SpringMVC中,為了能被作為依賴注入,Service類可以使用Service注解類型注明為@Service(一個服務)。另外,還需要在配置文件中使用<context:component-scanbase-package="基本包"/>元素來掃描依賴基本包?!禞avaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社目錄7.1基于注解的控制器7.2Controller接收請求參數(shù)的常見方式7.3重定向與轉發(fā)7.4應用@Autowired進行依賴注入7.5@ModelAttribute注解《JavaEE框架整合開發(fā)入門到實戰(zhàn)》陳恒

主編,清華大學出版社7.5@ModelAttribute注解通過ModelAttribute注解類型,可實現(xiàn)如下兩個功能。1.綁定請求參數(shù)到實體對象(表單的命令對象)綁定請求參數(shù)到實體對象,該用法如7.2.6節(jié)內容。publicStringregister(@ModelAt

溫馨提示

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

評論

0/150

提交評論