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>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>mainPost.jsp</title>
</head>
<body>
<h2>main......page.....post......</h2>
</body>
</html>
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";
}
}
<%@ 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)如下
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>dataSubmit.jsp</title>
</head>
<body>
<h2>dataSubmit.........page</h2>
</body>
</html>
<%@ 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>
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";
}
}