1. 程式人生 > >SpringMVC系列(二): 註解@RequestMapping、@PathVariable

SpringMVC系列(二): 註解@RequestMapping、@PathVariable

ann handler -- back 聯合 ppi 根目錄 處理方法 ati

一、@RequestMapping

1.@RequestMapping除了能修飾方法,還能修飾類
(1)修飾類:提供初步的請求映射信息,相對於web請求的根目錄
(2)修飾方法:提供進一步的細分映射信息
相對於類定義處的URL,若類定義處未標註@RequestMapping,則方法處標記的URL相對於web應用的根目錄

2.@RequestMapping的請求方式
@RequestMapping 的 value、method、params 及 heads 分別表示請求 URL、請求方法、請求參數及請求頭的映射條
件,他們之間是與的關系,聯合使用多個條件可讓請求映射更加精確化。

3.Ant 風格資源地址支持 3 種匹配符:
– ?:匹配文件名中的一個字符
– *:匹配文件名中的任意字符
– **:** 匹配多層路徑
? @RequestMapping 還支持 Ant 風格的 URL:
– /user/*/createUser: 匹配
/user/aaa/createUser、/user/bbb/createUser 等 URL
– /user/**/createUser: 匹配
/user/createUser、/user/aaa/bbb/createUser 等 URL
– /user/createUser??: 匹配
/user/createUseraa、/user/createUserbb 等 URL

 1 package com.study.springmvc.handlers;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.RequestMethod;
 6 
 7 @RequestMapping("/requestMappingTest")
 8 @Controller
 9 public
class RequestMappingTest { 10 11 public static final String SUCCESS="success"; 12 /** 13 * 1.@RequestMapping除了能修飾方法,還能修飾類 14 *(1)修飾類:提供初步的請求映射信息,相對於web請求的根目錄 15 *(2)修飾方法:提供進一步的細分映射信息 16 * 相對於類定義處的URL,若類定義處未標註@RequestMapping,則方法處標記的URL相對於web應用的根目錄 17 * @return 成功 18 */
19 @RequestMapping("/testRequestMapping") 20 public String testRequestMapping() { 21 System.out.println("testRequestMapping"); 22 return SUCCESS; 23 } 24 25 /** 26 * 2.@RequestMapping的請求方式 27 @RequestMapping 的 value、method、params 及 heads 分別表示請求 URL、請求方法、請求參數及請求頭的映射條 28 件,他們之間是與的關系,聯合使用多個條件可讓請求映射更加精確化。 29 * @return 30 */ 31 @RequestMapping(value="/testMethod",method=RequestMethod.POST) 32 public String testMethod() { 33 System.out.println("testMethod的post方式"); 34 return SUCCESS; 35 } 36 37 /** 38 * 3.了解: 可以使用 params 和 headers 來更加精確的映射請求. params 和 headers 支持簡單的表達式. 39 * 40 * @return 41 */ 42 @RequestMapping(value = "testParamsAndHeaders", params = { "username", 43 "age!=10" }, headers = { "Accept-Language=zh-CN,zh;q=0.8" }) 44 public String testParamsAndHeaders() { 45 System.out.println("testParamsAndHeaders"); 46 return SUCCESS; 47 } 48 /** 49 * 4.Ant 風格資源地址支持 3 種匹配符: 50 * – ?:匹配文件名中的一個字符 51 * – *:匹配文件名中的任意字符 52 * – **:** 匹配多層路徑 53 * @return 54 */ 55 @RequestMapping("/testAntPath/*/abc") 56 public String testAntPath() { 57 System.out.println("testAntPath"); 58 return SUCCESS; 59 } 60 }
 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3     
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6 <body>
 7 <!-- href="helloworld"和HelloWorld.java的@RequestMapping("/helloworld")對應 -->
 8 <a href="helloworld">Hello World</a>
 9 
10 <br/>
11 <a href="requestMappingTest/testRequestMapping">@RequestMapping修飾類和方法</a>
12 
13 <br/>
14 <form action="requestMappingTest/testMethod" method="POST">
15 <input type="submit" value="測試@RequestMappin的post請求方式">
16 </form>
17  
18  <br/>
19 <a href="requestMappingTest/testParamsAndHeaders?username=lgs&age=11">testParamsAndHeaders</a>
20  
21  <br/>
22 <a href="requestMappingTest/testAntPath/ggggggg/abc">testAntPath</a>
23     
24     
25 </body>
26 </html>

二、@PathVariable

@PathVariable 映射 URL 綁定的占位符

? 帶占位符的 URL 是 Spring3.0 新增的功能,該功能在SpringMVC 向 REST 目標挺進發展過程中具有裏程碑的意義

? 通過 @PathVariable 可以將 URL 中占位符參數綁定到控制器處理方法的入參中:URL 中的 {xxx} 占位符可以通過@PathVariable("xxx") 綁定到操作方法的入參中。

1 <a href="pathVariableTest/testPathVariable/10">testPathVariable</a>
 1 package com.study.springmvc.handlers;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.PathVariable;
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 
 7 @RequestMapping("/pathVariableTest")
 8 @Controller
 9 public class PathVariableTest {
10 
11     public static final String SUCCESS="success";
12     
13     /**
14      * @PathVariable 可以來映射 URL 中的占位符到目標方法的參數中.
15      * @param id
16      * @return
17      */
18     @RequestMapping("/testPathVariable/{id}")
19     public String testPathVariable(@PathVariable("id") Integer id) {
20         System.out.println("testPathVariable: " + id);
21         return SUCCESS;
22     }
23 }

SpringMVC系列(二): 註解@RequestMapping、@PathVariable