SpringMVC 02: SpringMVC響應get和post請求 + 5種獲取前端數據的方式
響應get和post請求
-
SpringMVC中使用@RequestMapping註解完成對get請求和post請求的響應
-
項目結構和配置文件與SpringMVC部落格集中的”SpringMVC 01″保持一致
-
在webapp/admin目錄下新建2個jsp文件,這兩個jsp文件分別作為相應請求的響應頁面
-
mainGet.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>mainGet.jsp</title>
</head>
<body>
<h2>main......page.....get......</h2>
</body>
</html>
- mainPost.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>mainPost.jsp</title>
</head>
<body>
<h2>main......page.....post......</h2>
</body>
</html>
- 新增控制器:ReqAction,在@RequestMapping註解後可以跟兩個參數
- value參數負責對應請求路徑,只有正確請求路徑下的目標action方法,才可能被調用
- method參數負責指定該action方法負責響應的請求類型
- 僅是請求路徑對應上並不可以調用action方法,必須請求路徑和請求方式都對上,相應的action方法才會被調用
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class ReqAction {
@RequestMapping(value = "/req", method = RequestMethod.GET)
public String reqGet(){
System.out.println("獲取到get請求,伺服器被訪問......");
return "mainGet";
}
@RequestMapping(value = "/req", method = RequestMethod.POST)
public String reqPost(){
System.out.println("獲取到post請求,伺服器被訪問......");
return "mainPost";
}
}
- webapp/index.jsp如下,以form表單的形式,分別發送get和post請求
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>index.jsp</title>
</head>
<body>
<h2>分別用get和post方式訪問伺服器</h2>
<form action="${pageContext.request.contextPath}/req.action" method="get/post">
<input type="submit" value="get/post方式提交">
</form>
</body>
</html>
-
部署並啟動tomcat測試,第一次用表單發送get請求,第二次用表單發送post請求
-
表單發送get請求時,網站首頁(left),請求到的頁面(mild),控制台輸出(right)如下
- 表單發送post請求時,網站首頁(left),請求到的頁面(mild),控制台輸出(right)如下
5種獲取前端數據的方式
- 1.直接注入獲取
- 2.實體類封裝獲取
- 3.動態佔位符獲取
- 4.@RequestParam註解方式獲取
- 5.手工獲取數據
- 在webapp/admin目錄下新建dataSubmit.jsp,作為5種請求方式的響應結果頁面
- dataSubmit.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>dataSubmit.jsp</title>
</head>
<body>
<h2>dataSubmit.........page</h2>
</body>
</html>
- webapp/index.jsp如下,是網站的首頁,包含5種請求方式的前端顯示
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>index.jsp</title>
</head>
<body>
<h2>SpringMVC中獲取前端提交數據的5種方式</h2>
<hr>
<h2>方式1:單個數據的獲取方式</h2>
<form action="${pageContext.request.contextPath}/dataSubmit/submit01.action" method="get">
姓名:<input type="text" name="name"><br>
年齡:<input type="text" name="age"><br>
<input type="submit" value="提交">
</form>
<h2>方式2:封裝成實體類進行獲取</h2>
<form action="${pageContext.request.contextPath}/dataSubmit/submit02.action" method="get">
姓名:<input type="text" name="name"><br>
年齡:<input type="text" name="age"><br>
<input type="submit" value="提交">
</form>
<h2>方式3:動態佔位符獲取提交的數據(只可以用在超鏈接或地址欄)</h2>
<!-- 攜帶的數據放在.action之前,用斜杠分隔開-->
<a href="${pageContext.request.contextPath}/dataSubmit/submit03/xun/22.action">動態佔位符獲取提交數據</a>
<h2>方式4:參數名稱不一致時接收數據</h2>
<form action="${pageContext.request.contextPath}/dataSubmit/submit04.action" method="get">
姓名:<input type="text" name="name"><br>
年齡:<input type="text" name="age"><br>
<input type="submit" value="提交">
</form>
<h2>方式5:手工獲取前端提交的數據</h2>
<form action="${pageContext.request.contextPath}/dataSubmit/submit05.action" method="get">
姓名:<input type="text" name="name"><br>
年齡:<input type="text" name="age"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
- 新增SpringMVC控制器:DataSubmit,含有對前端5種請求方式的5種響應處理
package com.example.controller;
import com.example.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
@Controller
@RequestMapping("/dataSubmit")
public class DataSubmit {
//直接注入獲取
@RequestMapping("/submit01")
public String dataSubmit01(String name, int age){//前端提交的數據,通過SpringMVC框架依次分別注入到目標方法的參數中,且自動完成了類型轉換
System.out.println("姓名: " + name + " 年齡: " + age);
return "dataSubmit";
}
//封裝成實體類來獲取
@RequestMapping("/submit02")
public String dataSubmit02(User user){//SpringMVC自動創建實體類對象,並將前端提交的數據,注入到User實體類中的對應屬性中
System.out.println(user);
return "dataSubmit";
}
//動態佔位符獲取數據
@RequestMapping("/submit03/{name}/{age}")//目標路徑後用大括弧接住前端隨著地址攜帶來的數據,括弧用斜杠分割開,括弧內名稱和@PathVariable後面的註解名一致,將攜帶的數據注入給目標方法中的對應變數
public String dataSubmit03(
@PathVariable("name")
String name,
@PathVariable("age")
int age){
System.out.println("姓名: " + name + " 年齡: " + age);
return "dataSubmit";
}
//參數名稱不一致時獲取數據
@RequestMapping("/submit04")
public String dataSubmit04(
@RequestParam("name")//若前端數據名和後端變數名不一致,則可以將@RequestParam註解名和前端傳來的數據名稱保持一致,這樣將前端數據傳給註解標識的變數
String uname,
@RequestParam("age")
int uage){
System.out.println("姓名: " + uname + " 年齡: " + uage);
return "dataSubmit";
}
//手工獲取前端提交的數據
@RequestMapping("/submit05")
public String dataSubmit05(HttpServletRequest request){//就是傳統servlet開發時獲取前端數據的方式,只不過這裡HttpServletRequest實例對象由SpringMVC框架自動創建
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
System.out.println("姓名: " + name + " 年齡: " + age);
return "dataSubmit";
}
}
- 部署tomcat,並啟動測試
- 前端頁面,一次輸入數據,提交測試即可
- 測試結果不再贅述