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)如下

image

  • 表單發送post請求時,網站首頁(left),請求到的頁面(mild),控制台輸出(right)如下

image

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,並啟動測試
  • 前端頁面,一次輸入數據,提交測試即可

image

  • 測試結果不再贅述
Tags: