@RequestMapping
1.基本使用
@RequestMapping注解可以指定 控制器(處理器) 的某個方法的請求url
2.@RequestMapping其他使用方式
2.1修飾方法和類
@RequestMapping注解可以修飾方法,還可以修飾類,
當同時修飾類和方法時,請求的url就是組合形式:/類請求值/方法請求值
例子
(1)UserHandler.java:
package com.li.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* @author 李
* @version 1.0
*/
@RequestMapping(value = "https://www.cnblogs.com/user")
@Controller //UserHandler就是一個處理器/控制器,注入到spring容器
public class UserHandler {
/**
* 1.method = RequestMethod.POST 表示請求buy方法必須是post請求
* 2.RequestMethod 四個常用的選項 :GET, POST, PUT, DELETE
* 3.如果沒有配置 RequestMethod,SpringMVC控制器默認支持 get和 post兩種方式
* 4.buy()方法對應的完整請求url = http://ip:port/web工程路徑/user/buy
* @return
*/
@RequestMapping(value = "https://www.cnblogs.com/buy", method = RequestMethod.POST)
public String buy() {
System.out.println("購買商品");
return "success";
}
}
(2)request.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>購買商品</title>
</head>
<body>
<h1>購買商品</h1>
<%--
buy()方法對應的完整請求 url = http://ip:port/web工程路徑/user/buy
--%>
<form action="user/buy" method="post">
購買人:<input type="text" name="username"/><br/>
購買量:<input type="text" name="nums"/><br/>
<input type="submit" value="https://www.cnblogs.com/liyuelian/archive/2023/02/05/提交"/>
</form>
</body>
</html>
(3)success.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>操作成功</title>
</head>
<body>
<h1>恭喜,操作成功!</h1>
</body>
</html>
在瀏覽器中訪問 http://localhost:8080/springmvc/request.jsp,點擊提交按鈕,結果如下:

2.2指定請求方式
-
@RequestMapping 可以指定請求的方式(post/get/put/delete...),請求方式要和指定方式一致,否則報錯:
-
SpringMVC 控制器默認支持get 和 post兩種請求方式,即如果沒有指定 method,可以接收 get 和 post請求
2.3指定params和headers,支持簡單運算式
param1:表示請求必須包含名為 param1 的請求引數!param1:表示請求不能包含名為 param1 的請求引數param1 != value1:表示請求包含名為 param1 的請求引數,但其值不能為 value1{"param1 = value1", "param2"}:請求必須包含名為 param1 和 param2 的兩個請求引數,且 param1的值必須為 value1
應用實體
(1)修改UserHandler.java,增加方法
//...
@RequestMapping(value = "https://www.cnblogs.com/user")
@Controller
public class UserHandler {
//...
/**
* 1.params = "bookId" 表示請求該方式時,必須給一個名為 bookId的引數
* 2.search(String bookId){} 表示請求目標方法時,
* 攜帶的 bookId引數的值會被填充到目標方法的同名形參中
* @param bookId
* @return
*/
@RequestMapping(value = "https://www.cnblogs.com/find", params = "bookId", method = RequestMethod.GET)
public String search(String bookId) {
System.out.println("查詢書籍 bookId=" + bookId);
return "success";
}
}
(2)request.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>購買商品</title>
</head>
<body>
<h1>演示params的使用</h1>
<a href="https://www.cnblogs.com/liyuelian/archive/2023/02/05/user/find?bookId=100">查詢書籍</a>
</body>
</html>
(3) success.jsp 不變,
(4)redeployTomcat,在瀏覽器地址欄訪問:http://localhost:8080/springmvc/request.jsp,點擊查詢書籍超鏈接,結果如下:
(5)修改UserHandler.java,指定引數的值=100,
(6)修改request.jsp,修改發送的值為200.
(7)redeployTomcat,重新范文request.jsp,點擊超鏈接,這里可以看到出現例外,因為發送的值和方法指定的值不一樣,
2.4支持Ant 風格資源地址
?:匹配檔案名中的一個字符*:匹配檔案名中的任意字符,長度任意**:匹配多層路徑- Ant 風格的 url 地址舉例:
/user/*/createUser:匹配 /user/aaa/createUser、/user/bbb/createUser 等 URL/user/**/createUser:匹配 /user/createUser、/user/aaa/bbb/createUser 等 URL/user/createUser??: 匹配 /user/createUserab、/user/createUsercd 等 URL
應用實體
(1)修改UserHandler.java,增加方法:
//...
@RequestMapping(value = "https://www.cnblogs.com/user")
@Controller
public class UserHandler {
//...
/**
* 要求:可以匹配 /user/message/aa, /user/message/aa/bb/cc
* @RequestMapping(value = "https://www.cnblogs.com/message/**")
* 表示可以匹配多層的路徑
* @return
*/
@RequestMapping(value = "https://www.cnblogs.com/message/**")
public String im(){
System.out.println("發送訊息");
return "success";
}
}
(2)修改request.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>購買商品</title>
</head>
<body>
<h1>演示 Ant 風格的請求資源方式</h1>
<a href="https://www.cnblogs.com/liyuelian/archive/2023/02/05/user/message/aa">發送訊息 1</a><br>
<a href="https://www.cnblogs.com/liyuelian/archive/2023/02/05/user/message/aa/bb/cc">發送訊息 2</a><br>
</body>
</html>
(3) success.jsp 不變,
(4)redeployTomcat,在瀏覽器地址欄訪問:http://localhost:8080/springmvc/request.jsp,分別點擊兩個超鏈接,都能成功訪問方法,并跳轉到success.jsp
2.5可配合@PathVariable映射URL系結的占位符
- @RequestMapping 還可以配合 @PathVariable(路徑變數) 映射 URL 系結的占位符
- 這樣就不需要在url地址欄上帶引數名了,更加簡潔明了
例子
request.jsp頁面如下,其中 kristina 和 300 皆為引數值
<h1>占位符的演示</h1>
<a href="https://www.cnblogs.com/liyuelian/archive/2023/02/05/user/reg/kristina/300">占位符的演示</a>
(1)修改UserHandler.java,增加方法,注意@PathVariable("username") 不能少
//...
@RequestMapping(value = "https://www.cnblogs.com/user")
@Controller
public class UserHandler {
/**
* 我們希望目標方法獲取到username和 userid
* 前端頁面為:<a href="https://www.cnblogs.com/liyuelian/archive/2023/02/05/user/reg/kristina/300">占位符的演示</a>
* 1. value = "https://www.cnblogs.com/reg/{username}/{userid}"
* 表示 kristina=>{username} ,300=>{userid}
* 2.通過 @PathVariable 將變數賦給對應的形參
*/
@RequestMapping(value = "https://www.cnblogs.com/reg/{username}/{userid}")
public String register(@PathVariable("username") String name,
@PathVariable("userid") int id) {
System.out.println("接收到的引數--username=" + name + "--userid=" + id);
return "success";
}
}
(2)success.jsp不變
(3)redeployTomcat,訪問 http://localhost:8080/springmvc/request.jsp,點擊超鏈接,成功訪問到success.jsp,后臺輸出如下:
2.6注意事項和使用細節
-
映射的URL不能重復,否則報錯:
注意:Spring MVC controller路徑是否能夠重復?
Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'userHandler' method com.li.web.UserHandler#buy() to {POST [/user/buy]}: There is already 'userHandler' bean method -
各種請求的簡寫形式
@RequestMapping(value="https://www.cnblogs.com/buy",method=RequestMethod.POST)等價于@PostMapping(value="https://www.cnblogs.com/liyuelian/archive/2023/02/05/buy")以此類推,還有
@GetMapping,@PostMapping,@PutMapping,@DeleteMapping -
如果我們確定表單或者超鏈接會提交某個欄位資料,比如email,要求提交的引數名和目標方法的引數名保持一致,
例如:
/** * hello3(String email){} 如果請求引數有email=xx,就會將傳遞的引數值賦給String email * 但是要求名稱保持一致!如果不一致,那么接收不到資料,而是null * @param email * @return */ @GetMapping(value = "https://www.cnblogs.com/hello3") public String hello3(String email) { System.out.println("hello3= " + email); return "success"; }
2.7練習
撰寫一個表單,以Post方式提交表單資訊,后端撰寫ComputerHandler,可以接收到表單資訊
computer.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>hw-電腦資訊</title>
</head>
<body>
<h1>電腦資訊</h1>
<form action="computer/info" method="post">
品牌:<input type="text" name="brand"/><br/>
價格:<input type="text" name="price"/><br/>
數量:<input type="text" name="nums"/><br/>
<input type="submit" value="https://www.cnblogs.com/liyuelian/archive/2023/02/05/提交">
</form>
</body>
</html>
ComputerHandler:
package com.li.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author 李
* @version 1.0
*/
@RequestMapping("/computer")
@Controller
public class ComputerHandler {
//注意接收的引數名要和info方法的形參名一致
@PostMapping("/info")
public String info(String brand, String price, String nums) {
System.out.println("brand=" + brand +
" price=" + price + " nums=" + nums);
return "success";
}
}
redeployTomcat,訪問:http://localhost:8080/springmvc/computer.jsp,輸入資訊,點擊提交表單,
后臺輸出:
3.Postman介面測驗工具
3.1Postman介紹
-
Postman是什么?
- Postman是一款功能超級強大的用于發送HTTP請求的測驗工具
- 是做WEB頁面開發和測驗的人員的常用工具
- 它可以創建和發送任何HTTP請求(Get/Post/Put/Delete...)
-
Postman相關資源
- 官方網站:https://www.postman.com/
- 檔案:https://learning.postman.com/docs/getting-started/introduction/
- 下載地址:https://www.postman.com/downloads/
具體安裝步驟
(1)下載Postman軟體
(2)安裝
-
右鍵安裝包,選擇用管理員身份運行,Postman不會讓你選擇安裝路徑,會直接安裝,一般安裝在系統盤
-
安裝成功后,桌面上會出現快捷圖示
3.2Postman快速入門
快速入門需求說明:使用 Postman向 http://www.baidu.com 發出 get請求,得到回傳的 html格式資料
快速入門-實作步驟
-
進入Postman,默認界面如下:
-
創建Http Request,如果你已經創建過,會直接進入Workspace
-
在新頁面輸入要測驗的 url,點擊save
-
在彈出的新視窗中點擊Create a collection
-
在彈出的新視窗中填入collection名稱,點擊create,然后點擊save
-
配置完畢的界面
-
點擊Send按鈕,即可向目標url發送請求,獲取回傳資料
3.3Postman完成Controller層測驗
(1)測驗用例1
使用Postman,完成對之前撰寫的UserHandler方法的請求測驗
@RequestMapping(value = "https://www.cnblogs.com/user")
@Controller //UserHandler就是一個處理器/控制器,注入到spring容器
public class UserHandler {
@RequestMapping(value = "https://www.cnblogs.com/find", params = "bookId=100", method = RequestMethod.GET)
public String search(String bookId) {
System.out.println("查詢書籍 bookId=" + bookId);
return "success";
}
}
測驗
- 確定請求地址url:
http://localhost:8080/springmvc/user/find - 使用請求的方式:Get
- 確定請求的引數/資料:bookId=100
- 確定 Header有沒有特殊的指定:無
點擊Send,回傳資料,測驗成功,
(2)測驗用例2
@RequestMapping(value = "https://www.cnblogs.com/user")
@Controller //UserHandler就是一個處理器/控制器,注入到spring容器
public class UserHandler {
@RequestMapping(value = "https://www.cnblogs.com/message/**")
public String im() {
System.out.println("發送訊息");
return "success";
}
}
測驗
- 確定請求地址url:
http://localhost:8080/springmvc/user/message/aa/bb/cc - 使用請求的方式:Get 或者 Post
- 確定請求的引數/資料:無
- 確定 Header有沒有特殊的指定:無
點擊Send,回傳資料,測驗成功,
(3)測驗用例3
@RequestMapping(value = "https://www.cnblogs.com/user")
@Controller //UserHandler就是一個處理器/控制器,注入到spring容器
public class UserHandler {
@RequestMapping(value = "https://www.cnblogs.com/reg/{username}/{userid}")
public String register(@PathVariable("username") String name,
@PathVariable("userid") int id) {
System.out.println("接收到的引數--username=" + name + "--userid=" + id);
return "success";
}
}
測驗
- 確定請求地址url:
http://localhost:8080/springmvc/user/reg/jack/1000 - 使用請求的方式:Get 或者 Post
- 確定請求的引數/資料:無
- 確定 Header有沒有特殊的指定:無
點擊Send,回傳資料,測驗成功,
關于Postman的其他使用,在講解框架和專案時,再具體演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/543075.html
標籤:其他
上一篇:java基礎(六):面向物件
