1. 程式人生 > 實用技巧 >02-SpringMVC之訪問路徑對映

02-SpringMVC之訪問路徑對映

訪問路徑對映

在學習Servlet的時候我們知道,當我們客戶端發出一個請求時,我們會根據不同的請求地址將內容轉發給不同的Servlet例項,而SpringMVC也是基於Servlet的,當客戶端發出請求時,SpringMVC中會有一個DispatcherServlet接受所有客戶端傳送的請求,然後根據請求的地址,再分發給不同Controller中的方法,區別在於,Servlet容器會根據不同的地址請求,將請求轉發給不同的Servlet例項,而SpringMVC中只有一個Servlet,攔截所有的請求,然後再根據不同的請求地址去執行不同的方法。

@RequestMapping註解

1、介紹

作用:
	建立請求URL和處理請求之間的對應關係
	可以註解方法和類
屬性:
	path(作用於value相同):指定請求的實際地址
	value(作用於path相同)
	method:傳送請求的方法(get、post)即一旦確定了方法,那麼這個方法只接收確定方法的請求,使用method = {RequestMethod.POST,RequestMethod.GET}
	params(不經常使用):用於指定請求引數的條件
		params = {"username"}--請求必須帶上username這個引數
		params = {"username=123"}--必須是帶上username這個引數並且引數值為123
	headers(不經常使用):傳送請求中必須包含的請求頭
		headers = {"Accept"}

2、使用

一、普通用法

程式碼部分
@Controller
public class HelloController {
    @RequestMapping(path = "/hello",method = RequestMethod.GET)
    public String sayHello(){
        System.out.println("Hello SpringMVC");
        return "success";
    }
}
解析

當以GET方式訪問http://localhost:8080/{projectName}/hello時,將會執行這個方法

二、RestFul路徑風格

程式碼部分
@Controller
public class RestFulController {
    @RequestMapping("/restful/{a}")
    public String restful(@PathVariable(name = "a")int a){
        System.out.println(a);
        return mv;
    }
}
解析

當以GET方式訪問http://localhost:8080/{projectName}/restful/{a}時(這裡的a表示任何數字,比如訪問http://localhost:8080/{projectName}/restful/1),將會執行這個方法,同時在引數這裡使用了一個新的註解@PathVariable

@PathVariable
作用:
	用於繫結url中的佔位符。例如url中有/delete/{id},{id}就是佔位符
屬性:
	value:用於指定url中佔位符的名稱
	required:是否必須提供佔位符

三、Ant路徑風格

程式碼部分
@Controller
public class RestFulController {
    @RequestMapping("/ant/*")
    public String ant(){
        System.out.println(a);
        return mv;
    }
}
解析
Ant風格資源地址支援三種匹配符
?:匹配檔名中的一個字元
*:匹配檔名中的任意字元
**:匹配多層路徑
/ant/?
匹配/ant/a、/ant/b、/ant/c等URL
/ant?
匹配/anta、/antb、/antc等URL
/ant/*
匹配 /ant/a、/ant/bb、/ant/ccc等URL
/ant/**/123
匹配 /ant/123、/ant/aa/123、/ant/a/bb/123等URL

3、擴充套件----@GetMapping、PostMapping、@DeleteMapping、@PutMapping

@GetMapping相當於@RequestMapping(method = RequestMethod.GET)
@PostMapping相當於@RequestMapping(method = RequestMethod.POST)
@DeleteMapping相當於@RequestMapping(method = RequestMethod.DELETE)
@PutMapping相當於@RequestMapping(method = RequestMethod.PUT)