SpringMVC(二):RequestMapping修飾類、指定請求方式、請求參數或請求頭、支持Ant路徑


@RequestMapping用來映射請求:RequestMapping可以修飾方法外,還可以修飾類

1)SpringMVC使用@RequestMapping注解為控制指定可以處理哪些URL請求;

2)在控制的類定義以及方法定義處都可以使用@RequestMapping標注

---類定義:提供初步的請求映射信息,相對於WEB應用的根目錄。

---方法    :提供進一步的細分映射信息,相對於類定義處的URL。若類定義處未標注@RequestMapping,則方法處標記的URL相對於WEB應用的根目錄。

3)DispatcherServlet截獲請求后,就通過控制器上@RequestMapping提供的映射信息確定請求所對應的處理方法。

示例:基於上一篇文章中搭建的demo project上修改HelloWord.java類。

package com.dx.springlearn.handlers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("class_requestmapping")
public class HelloWord {
    private static String SUCCESS = "success";
    
    @RequestMapping("/hello")
    public String hello() {
        System.out.println("hello word...");
        return SUCCESS;
    }
}

此時,index.jsp中鏈接路徑編輯為:

<a href="class_requestmapping/hello">hello action</a>

 @RequestMapping指定方法的請求方式:

1)@ReuqestMapping除了可以使用請求URL映射請求外,還可以使用請求方法、請求參數及請求頭映射請求。

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

3)params和headers支持簡單的表達式:

--- param1:表示請求必須包含名為param1的請求參數

--- !param1:表示請求不能包含名為param1的請求參數

--- param1 != value1:表示請求包含名為param1的請求參數,但其值不能為value1

--- {"param1=value1","param2"}:請求必須包含名為param1和param2的兩個請求參數,且param1參數的值必須為value1

在HelloWord.java中添加testMethod方法:

package com.dx.springlearn.handlers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("class_requestmapping")
public class HelloWord {
    private static String SUCCESS = "success";

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

    @RequestMapping("/hello")
    public String hello() {
        System.out.println("hello word...");
        return SUCCESS;
    }
}

在index.jsp中指定請求testMethod方法的html腳本:

    <form id="form_testMethod" name="form_testMethod" method="POST"
        action="class_requestmapping/testMethod">
        <button name="submit" id="submit">test method</button>
    </form>

 @RequestMapping指定請求參數和請求頭

在HelloWord.java中添加testParamsAndHeaders方法:

package com.dx.springlearn.handlers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("class_requestmapping")
public class HelloWord {
    private static String SUCCESS = "success";

    @RequestMapping(value="/testParamsAndHeaders",params={"username","password!=23456"},headers={"Accept-Language=zh-CN,zh;q=0.8"})
    public String testParamsAndHeaders() {
        System.out.println("test params and headers");
        return SUCCESS;
    }

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

    @RequestMapping("/hello")
    public String hello() {
        System.out.println("hello word...");
        return SUCCESS;
    }
}

修改index.jsp,添加請求鏈接:

<a href="class_requestmapping/testParamsAndHeaders?username=abc&password=12345">testParamsAndHeaders</a>

@RequestMapping支持Ant路徑方式:

1)Ant風格資源地址支持3種匹配符:

--- ?:匹配文件名中的一個字符;

--- * :匹配文件名中的任何個字符;

--- **:匹配多層路徑

2)Ant風格示例:

--- /user/*/createuser:配置/user/aaa/createuser、user/bb/createuser等URL

--- /user/**/createuser:匹配/user/createuser、/user/abc/ab/createuser等URL

--- /user/createuser??:配置/user/createuseraa、/user/createuserbc等URL

測試方法:

    @RequestMapping("/testAnt/*/createuser")
    public String testAnt(){
        System.out.println("test ant");
        return SUCCESS;
    }
    

index.jsp支持的鏈接方式:

http://localhost:8080/SpringMVC_01/class_requestmapping/testAnt/oiasdkj/createuser

http://localhost:8080/SpringMVC_01/class_requestmapping/testAnt/oxd/createuser

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM