JavaEE——SpringMVC(1)--@RequestMapping

1. @RequestMapping 除了修飾方法, 還可來修飾java

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

經常使用: 使用 method 屬性來指定請求方式spring

@RequestMapping(value = "/testMethod", method = RequestMethod.POST)
	public String testMethod() {
		System.out.println("testMethod");
		return SUCCESS;
	}

  

瞭解: 能夠使用 params 和 headers 來更加精確的映射請求. params 和 headers 支持簡單的表達式.瀏覽器

 

@RequestMapping(value = "testParamsAndHeaders", params = { "username",
			"age!=10" }, headers = { "Accept-Language=en-US,zh;q=0.8" })
	public String testParamsAndHeaders() {
		System.out.println("testParamsAndHeaders");
		return SUCCESS;
	}

  @PathVariable 能夠來映射 URL 中的佔位符到目標方法的參數中.session

@RequestMapping("/testPathVariable/{id}")
	public String testPathVariable(@PathVariable("id") Integer id) {
		System.out.println("testPathVariable: " + id);
		return SUCCESS;
	}

  

  支持 Ant 風格的 URL:
    – ?:匹配文件名中的一個字符
    – *:匹配文件名中的任意字符
    – **:** 匹配多層路徑mvc

@RequestMapping("/testAntPath/*/abc")
	public String testAntPath() {
		System.out.println("testAntPath");
		return SUCCESS;
	}

REST:即 Representational State Transfer。(資源)表現層狀態轉化
  HTTP 協議裏面,四個表示操做方式的動詞:GET、POST、PUT、DELETE。它們分別對應四種基本操做:app

    POST 用來新增資源:     /order POSTjsp

    PUT 用來更新資源:     /order/1 PUT     update?id=1post

    GET 用來獲取資源:     /order/1 GET     get?id=1ui

    DELETE 用來刪除資源:   /order/1 DELETE   delete?id=1

  HiddenHttpMethodFilter:瀏覽器 form 表單只支持 GET與 POST 請求,而DELETE、PUT 等 method 並不支持,

Spring3.0 添加了一個過濾器,能夠將這些請求轉換爲標準的 http 方法,使得支持 GET、POST、PUT 與DELETE 請求

* 如何發送 PUT 請求和 DELETE 請求呢 ?

   1. 須要配置 HiddenHttpMethodFilter

   2. 須要發送 POST 請求
  3. 須要在發送 POST 請求時攜帶一個 name="_method" 的隱藏域, 值爲 DELETE 或 PUT

* 在 SpringMVC 的目標方法中如何獲得 id 呢? 使用 @PathVariable 註解

1.在xml文件中配置HiddenHttpMethodFilter

<!--配置HiddenHttpMethodFilter-->
    <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

2.在jsp中設置請求的響應

3.在.java中發出請求

①GET請求

@RequestMapping(value="/testRest/{id}", method = RequestMethod.GET)
    public String testRest(@PathVariable Integer id){
        System.out.println("testRest GET " + id);
        return SUCCESS;
    }

  GET的響應

<a href="HelloWorld/testRest/1">Test REST GET</a>

  ②POST請求

@RequestMapping(value="/testRest", method = RequestMethod.POST)
    public String testRest(){
        System.out.println("testRest POST ");
        return SUCCESS;
    }

POST的響應

<form action="HelloWorld/testRest" method="post">
    <input type="submit" value="Test REST POST"/>
  </form>

③DELETE請求

@RequestMapping(value="/testRest/{id}", method = RequestMethod.DELETE)
    public String testRestDelete(@PathVariable Integer id){
        System.out.println("testRest Delete " + id);
        return SUCCESS;
    }

DELETE的響應

<form action="HelloWorld/testRest/1" method="post">
    <input type="hidden" name="_method" value="DELETE"/>
    <input type="submit" value="Test REST DELETE"/>
  </form>

④PUT請求

@RequestMapping(value="/testRest/{id}", method = RequestMethod.PUT)
    public String testRestPut(@PathVariable Integer id){
        System.out.println("testRest Put " + id);
        return SUCCESS;
    } 

PUT的響應

<form action="HelloWorld/testRest/1" method="post">
    <input type="hidden" name="_method" value="PUT"/>
    <input type="submit" value="Test REST PUT"/>
  </form>

  

映射請求參數 & 請求參數
  @PathVariable、  @RequestParam、@RequestHeader
  @RequestParam 能夠把請求參數傳遞給請求方法
  – value:參數名
  – required:是否必須。默認爲 true, 表示請求參數中必須包含對應的參數,若不存在,將拋出異常

    – defaultValue:請求參數的默認值

@RequestMapping(value = "/testRequestParam")
    public String testRequestParam(
            @RequestParam(value="username") String username,
            @RequestParam(value="age") Integer age){
        System.out.println("testRequestParam username: " + username + "age:" + age);
        return SUCCESS;
    }

  注:這裏的age若爲int型,則應該以下指定

@RequestParam(value = "age", required = false, defaultValue = "0") int age

  響應

<a href="HelloWorld/testRequestParam?username=skye&age=12">test RequestParam</a>

  @RequestHeader   瞭解: 映射請求頭信息 用法同 @RequestParam

@RequestMapping("/testRequestHeader")
	public String testRequestHeader(
			@RequestHeader(value = "Accept-Language") String al) {
		System.out.println("testRequestHeader, Accept-Language: " + al);
		return SUCCESS;
	}

  

<a href="springmvc/testRequestHeader">Test RequestHeader</a>

  @CookieValue: 映射一個 Cookie 值. 屬性同 @RequestParam

 

@RequestMapping("/testCookieValue")
	public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) {
		System.out.println("testCookieValue: sessionId: " + sessionId);
		return SUCCESS;
	}

  

<a href="springmvc/testCookieValue">Test CookieValue</a>

  ** Spring MVC 會按請求參數名和 POJO 屬性名進行自動匹配,自動爲該對象填充屬性值。支持級聯屬性

    如:dept.deptId、dept.address.tel 等

 

<form action="HelloWorld/testPojo" method="post">
    username: <input type="text" name="name"/>
    <br>
    password: <input type="password" name="password"/>
    <br>
    email: <input type="text" name="email"/>
    <br>
    age: <input type="text" name="age"/>
    <br>
    sex: <input type="text" name="sex"/>
    <br>
    province: <input type="text" name="address.province"/>
    <br>
    city: <input type="text" name="address.city"/>
    <br>
    <input type="submit" value="Submit"/>
  </form>

 

  響應   其中Address是User的一個屬性

@RequestMapping(value="/testPojo")
    public String testPojo(User user){
        System.out.println("testPojo User: " + user);
        return SUCCESS;
    }

  能夠使用 Serlvet 原生的 API 做爲目標方法的參數 具體支持如下類型

  * HttpServletRequest
  * HttpServletResponse
  * HttpSession
  * java.security.Principal
  * Locale 

  *InputStream 
  * OutputStream
  * Reader
  * Writer

@RequestMapping("/testServletAPI")
	public void testServletAPI(HttpServletRequest request,
			HttpServletResponse response, Writer out) throws IOException {
		System.out.println("testServletAPI, " + request + ", " + response);
		out.write("hello springmvc");
//		return SUCCESS;
	}

  

<a href="springmvc/testServletAPI">Test ServletAPI</a>
相關文章
相關標籤/搜索