02-SpringMVC之訪問路徑對映
阿新 • • 發佈:2020-12-20
訪問路徑對映
在學習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)