JavaEE企業(yè)級項目開發(fā)(第3版)課件 微課7-5:基于Spring MVC注解分析_第1頁
JavaEE企業(yè)級項目開發(fā)(第3版)課件 微課7-5:基于Spring MVC注解分析_第2頁
JavaEE企業(yè)級項目開發(fā)(第3版)課件 微課7-5:基于Spring MVC注解分析_第3頁
JavaEE企業(yè)級項目開發(fā)(第3版)課件 微課7-5:基于Spring MVC注解分析_第4頁
JavaEE企業(yè)級項目開發(fā)(第3版)課件 微課7-5:基于Spring MVC注解分析_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

主講人:吳佳云延遲符基于SpringMVC注解分析SpringMVC入門與核心類1一個簡單的基于注解的Controller@Controller//<——①

@RequestMapping("/forum")

publicclassBasicController{

@RequestMapping//<——②

publicvoidlistAllBoard(){

System.out.println("calllistAllBoardmethod.");

}

}在①處使用了兩個注解,分別是@Controller和@RequestMapping注解。@Controller注解讓BasicController成為一個Bean。@RequestMapping注解讓BasicController具備SpringMVCController功能。BasicController.java1一個簡單的基于注解的Controller<servlet>

<servlet-name>DispatcherServlet</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<!--配置初始化參數(shù),讀取spring-mvc.xml配置文件-->

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:spring-mvc.xml</param-value>

</init-param>

<!--配置項目啟動時立即加載該servlet-->

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>DispatcherServlet</servlet-name>

<url-pattern>/</url-pattern><!--配置“/”:攔截所有請求-->

</servlet-mapping>web.xml1一個簡單的基于注解的Controller

<!--配置SpringMVC要掃描的包-->

<context:component-scanbase-package="com.my.ccit.controller"/>

<!--配置視圖解析器-->

<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">

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

<propertyname="suffix"value=".jsp"/>

</bean>spring-mvc.xml1一個簡單的基于注解的Controller測試2一個Controller處理多個URL請求@Controller

@RequestMapping("/fornum")

publicclassBasicForumController{

@RequestMapping("/listAllBoard")//<——①

publicvoidlistAllBoard(){

System.out.println("calllistAllBoardmethod.");

}

@RequestMapping("/listBoardTopic")//<——②

publicvoidlistBoardTopic(inttopicId){

System.out.println("calllistBoardTopicmethod.");

}

}上面代碼分別在①和②處為listAllBoard()和listBoardTopic()方法標(biāo)注了@RequestMapping注解,這樣/fornum/listAllBoard的URL請求將由listAllBoard()負(fù)責(zé)處理,而/fornum/listBoardTopic?topicId=1的URL請求則由listBoardTopic()方法處理。3一個Controller對應(yīng)一個URL,由請求參數(shù)決定請求處理方法@Controller

@RequestMapping("/fornum")//<——①指定控制器對應(yīng)URL請求

publicclassBasicForumController{

//<—②如果URL請求中包括"method=listAllBoard"的參數(shù),由本方法進(jìn)行處理

@RequestMapping(params="method=listAllBoard")

publicvoidlistAllBoard(){

System.out.println("calllistAllBoardmethod.");

}

//<——③如果URL請求中包括"method=listBoardTopic"的參數(shù),由本方法進(jìn)行處理

@RequestMapping(params="method=listBoardTopic")

publicvoidlistBoardTopic(inttopicId){

System.out.println("calllistBoardTopicmethod.");

}

}在①定義處標(biāo)注的@RequestMapping讓Controller處理所有包含/fornum的URL請求,在②和③處標(biāo)注的@RequestMapping可以很容易通過URL參數(shù)指定Controller的處理方法了。4讓請求處理方法處理特定的HTTP請求方法這樣只有當(dāng)/fornum?method=createTopic請求以HTTPPOST方式提交時,createTopic()方法才會進(jìn)行處理。除了使用@RequestMapping注解的method屬性,來限定當(dāng)前方法匹配哪種類型的請求方式以外,還可以使用組合注解完成客戶端請求方式的限定。常用的組合注解有:@GetMapping:匹配GET方式的請求。@PostMapping:匹配POST方式的請求。@PutMapping:匹配PUT方式的請求。@DeleteMapping:匹配DELETE方式的請求。@PatchMapping:匹配PATCH方式的請求。@Controller

@RequestMapping("/fornum")

publicclassBasicForumController{

@RequestMapping(params="method=createTopic",method=

RequestMethod.POST)

publicStringcreateTopic(){

System.out.println("callcreateTopicmethod.");

return"createTopic";

}

}4讓請求處理方法處理特定的HTTP請求方法@Controller

@RequestMapping("/fornum")

publicclassBasicForumController{

@PostMapping(params="method=createTopic")

publicStringcreateTopic(){

System.out.println("callcreateTopicmethod.");

return"createTopic";

}

}@PostMapping是@RequestMapping(method=RequestMethod.POST)的縮寫,使用組合注解替代@RequestMapping注解,可以省略method屬性,從而簡化代碼。5按參數(shù)名綁定URL參數(shù)@RequestMapping(params="method=listBoardTopic")

//<——①topicId入?yún)⑹侨绾谓壎║RL請求參數(shù)的?

publicvoidlistBoardTopic(inttopicId){

System.out.println("calllistBoardTopicmethod.");

}當(dāng)發(fā)送http://localhost/fornum?method=listBoardTopic&topicId=10的URL請求時,Spring不但讓listBoardTopic()方法處理這個請求,而且還將topicId請求參數(shù)在類型轉(zhuǎn)換后綁定到listBoardTopic()方法的topicId形參上。請求處理方法入?yún)⒌念愋涂梢允荍ava基本數(shù)據(jù)類型或String類型,這時方法入?yún)磪?shù)名匹配的原則綁定到URL請求參數(shù),同時還自動完成String類型的URL請求參數(shù)到請求處理方法參數(shù)類型的轉(zhuǎn)換。6請求處理方法的入?yún)⑹且粋€JavaBean這時,如果使用以下URL請求:http://localhost:8888/fornum/list?method=listBoardTopic&topicId=1&userId=10&userName=tom,topicIdURL參數(shù)將綁定到topicId入?yún)⑸?,而userId和userNameURL參數(shù)將綁定到user對象的userId和userName屬性中。和URL請求中不允許沒有topicId參數(shù)不同,雖然User的userId屬性的類型是基本數(shù)據(jù)類型,但如果URL中不存在userId參數(shù),Spring也不會報錯,此時user.userId值為0。如果User對象擁有一個dept.deptId的級聯(lián)屬性,那么它將和dept.deptIdURL參數(shù)綁定。@RequestMapping(value="/list",params="method=listBoardTopic")

publicvoidlistBoardTopic(inttopicId,Useruser){

System.out.println("topicId:"+topicId);

System.out.println("user:"+user);

System.out.println("calllistBoardTopicmethod.");

}@Data

publicclassUser{

privateintuserId;

privateStringuserName;

}7通過注解指定綁定的URL參數(shù)由于對listBoardTopic()請求處理方法的topicId入?yún)?biāo)注了@RequestParam("id")注解,所以它將和id的URL參數(shù)綁定。@RequestMapping(value="/list",params="method=listBoardTopic")

publicvoidlistBoardTopic(@RequestParam("id")inttopicId,Useruser){

System.out.println("topicId:"+topicId);

System.out.println("user:"+user);

System.out.println("calllistBoardTopicmethod.");

}8通過注解映射URL綁定的占位符瀏覽器中訪問:http://localhost:8888/fornum/list/1?method=listBoardTopic&userId=10&userName=tom,此時路徑上的1將綁定到topicId入?yún)⑸?。@RequestMapping(value="/list/{id}",params="method=listBoardTopic")

publicvoidlistBoardTopic(@PathVariable("id")inttopicId,Useruser){

System.out.println("topicId:"+topicId);

System.out.println("user:"+user);

System.out.println("calllistBoardTopicmethod.");

}通過@PathVariable可以將URL中占位符參數(shù)綁定到控制器處理方法的入?yún)⒅?,即URL中的{xxx}占位符可以通過@PathVariable(“xxx”)綁定到操作方法的入?yún)⒅小?ModelAttribute注解@ModelAttribute是SpringMVC中的一個非常有用的注解,它主要被用來綁定請求參數(shù)到對象上,然后將這個對象添加到模型(Model)中。@ModelAttribute注解的主要作用:綁定請求參數(shù)到對象添加到model中用于數(shù)據(jù)預(yù)處理9ModelAttribute注解1綁定請求參數(shù)到對象@RequestMapping(value="/list",params="method=listBoardTopic")

publicvoidlistBoardTopic(@ModelAttribute("user")Useruser){

System.out.println("user:"+user);

System.out.println("calllistBoardTopicmethod.");

}當(dāng)請求到達(dá)控制器方法時,SpringMVC會嘗試將請求參數(shù)綁定到帶有@ModelAttribute注解的方法參數(shù)或?qū)ο蟮膶傩陨?,代碼如下所示。瀏覽器中訪問http://localhost:8888/fornum/list?method=listBoardTopic&userId=10&userName=tom,此時路徑上請求參數(shù)userId=10和userName=tom將被綁定到user入?yún)⑾鄳?yīng)的屬性上。9ModelAttribute注解2添加到model中帶有@ModelAttribute注解的對象會被添加到model中,這樣它就可以在視圖中被訪問。這意味著你可以在視圖中直接使用該對象,而無需在控制器方法中顯式地將它添加到model中,代碼如下所示。@RequestMapping(value="/list/showuser",params="method=listBoardTopic")

publicStringlistBoardTopic(@ModelAttribute("user")Useruser){

System.out.println("user:"+user);

System.out.println("calllistBoardTopicmethod.");

return"userInfo";

}9ModelAttribute注解2添加到model中<form>

<div>

<labelfor="uid">用戶ID:</label>

<inputtype="text"id="uid"name="userId"value="${user.userId}"/>

</div>

<div>

<labelfor="uname">用戶名:</label>

<inputtype="text"id="uname"name="userName"value="${user.userName}"/>

</div>

</form>userInfo.jsp瀏覽器中訪問http://localhost:8888/fornum/list/showuser?method=listBoardTopic&userId=10&userName=tom,頁面如圖所示,說明帶有@ModelAttribute注解的user對象成功被添加到model中。9ModelAttribute注解3用于數(shù)據(jù)預(yù)處理可以使用@ModelAttribute注解在控制器方法之前執(zhí)行一些預(yù)處理操作,比如從數(shù)據(jù)庫加載數(shù)據(jù)或執(zhí)行其他邏輯。這通常用于填充表單的默認(rèn)值或進(jìn)行其他初始化操作。@ModelAttribute("user")

publicUserpopulateUser(){

Useruser=newUser(222,"wangwu");

returnuser;

}

@RequestMapping("/test")

publicvoidtest(Useruser){

System.out.println(user);

}瀏覽器中訪問http://localhost:8888/fornum/test,控制臺輸出,如圖所示,說明@ModelAttribute("user")數(shù)據(jù)預(yù)處理成功。10@SessionAttribute注解@SessionAttributes(“user”)

溫馨提示

  • 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

提交評論