4、SpringMVC之獲取請求參數

来源:https://www.cnblogs.com/Javaer1995/archive/2023/10/10/17750684.html
-Advertisement-
Play Games

4.1 環境搭建 創建名為spring_mvc_demo2的新module,過程參考3.1節 4.1.1、創建請求控制器 package org.rain.controller; import org.springframework.stereotype.Controller; /** * @aut ...


4.1 環境搭建

創建名為spring_mvc_demo2的新module,過程參考3.1節

4.1.1、創建請求控制器

image

package org.rain.controller;

import org.springframework.stereotype.Controller;

/**
 * @author liaojy
 * @date 2023/10/9 - 8:32
 */
@Controller
public class TestParamController {
}

image

package org.rain.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author liaojy
 * @date 2023/10/9 - 8:49
 */
@Controller
public class PortalController {
    @RequestMapping("/")
    public String portal(){
        return "index";
    }
}

4.1.2、創建靜態資源目錄及頁面

image

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首頁</title>
</head>
<body>

</body>
</html>

image

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>成功</title>
</head>
<body>

<h1>success.html</h1>

</body>
</html>

4.1.3、配置tomcat

image

image

4.2、通過ServletAPI獲取請求參數

4.2.1、控制器方法示例

image

如果控制器方法有HttpServletRequest類型的形參,DispatcherServlet就會將封裝了當前請求的對象傳給控制器方法

    @RequestMapping("/param/servletAPI")
    public String getParamByServletAPI(HttpServletRequest request){
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("username:"+username);
        System.out.println("password:"+password);
        return "success";
    }

4.2.2、頁面請求示例

image

<form th:action="@{/param/servletAPI}" method="post">
    用戶名:<input type="text" name="username">
    密碼:<input type="password" name="password">
    <input type="submit" value="登錄">
</form>

4.2.3、測試效果

image

+++++++++++++++++++++++++分割線+++++++++++++++++++++++++

image

+++++++++++++++++++++++++分割線+++++++++++++++++++++++++

image

+++++++++++++++++++++++++分割線+++++++++++++++++++++++++

image

4.3、通過控制器方法的形參獲取請求參數

4.3.1、控制器方法示例

image

如果在控制器方法存在和請求參數同名的形參,DispatcherServlet就會將請求參數賦值給控制器方法中對應的形參

    @RequestMapping("/param")
    public String getParam(String username,String password){
        System.out.println("username:"+username);
        System.out.println("password:"+password);
        return "success";
    }

4.3.2、頁面請求示例

image

<form th:action="@{/param}" method="post">
    用戶名:<input type="text" name="username">
    密碼:<input type="password" name="password">
    <input type="submit" value="登錄">
</form>

4.3.3、測試效果

image

+++++++++++++++++++++++++分割線+++++++++++++++++++++++++

image

+++++++++++++++++++++++++分割線+++++++++++++++++++++++++

image

4.4、@RequestParam註解

@RequestParam註解用於將請求參數和控制器方法的形參建立映射關係,其有三個屬性:

  • value:指定要為形參賦值的請求參數的參數名。

  • required:設置是否必須傳輸此請求參數,預設值為true;
    若設置為true時,則當前請求必須傳輸value所指定的請求參數,
    若沒有傳輸該請求參數,且沒有設置defaultValue屬性,則頁面報錯400:Required String parameter 'xxx' is not present;
    若設置為false時,則當前請求不是必須傳輸value所指定的請求參數,
    若沒有傳輸該請求參數,則註解所標識的形參的值為null。

  • defaultValue:設置形參的預設值;
    不管required屬性值為true或false,當value所指定的請求參數沒有傳輸或傳輸的值為""時,則使用預設值為形參賦值。

4.4.1、控制器方法示例

image

    @RequestMapping("/param")
    public String getParam(@RequestParam(value = "name",required = true,defaultValue = "everyone") String username, String password){
        System.out.println("username:"+username);
        System.out.println("password:"+password);
        return "success";
    }

4.4.2、頁面請求示例

image

<form th:action="@{/param}" method="post">
    用戶名:<input type="text" name="name">
    密碼:<input type="password" name="password">
    <input type="submit" value="登錄">
</form>

4.4.3、有傳參的測試效果

image

+++++++++++++++++++++++++分割線+++++++++++++++++++++++++

image

+++++++++++++++++++++++++分割線+++++++++++++++++++++++++

image

4.4.4、無傳參的測試效果

image

+++++++++++++++++++++++++分割線+++++++++++++++++++++++++

image

+++++++++++++++++++++++++分割線+++++++++++++++++++++++++

image

4.5、@RequestHeader和@CookieValue

  • @RequestHeader 註解用於將請求頭信息和控制器方法的形參建立映射關係,其三個屬性的用法和@RequestParam的相同

  • @CookieValue 註解用於將Cookie數據和控制器方法的形參建立映射關係,其三個屬性的用法和@RequestParam的相同

4.5.1、控制器方法示例

image

    @RequestMapping("/param")
    public String getParam(
            @RequestParam(value = "name",required = true,defaultValue = "everyone") String username,
            String password,
            @RequestHeader("referer") String referer,
            @CookieValue(value = "JSESSIONID",required = false) String jsessionId
    ) {
        System.out.println("username:"+username);
        System.out.println("password:"+password);
        System.out.println("referer:"+referer);
        System.out.println("jsessionId:"+jsessionId);
        return "success";
    }

4.5.2、測試效果

image

+++++++++++++++++++++++++分割線+++++++++++++++++++++++++

image

+++++++++++++++++++++++++分割線+++++++++++++++++++++++++

image

4.6、通過實體類形參獲取請求參數(常用)

4.6.1、實體類示例

image

註意:要保證實體類的屬性名和請求參數名一致

package org.rain.pojo;

/**
 * @author liaojy
 * @date 2023/10/10 - 8:45
 */
public class User {
    
    private Integer id;

    private String username;

    private String password;

    public User() {
    }

    public User(Integer id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

4.6.2、控制器方法示例

image

    @RequestMapping("/param/pojo")
    public String getParamByPojo(User user){
        System.out.println(user);
        return "success";
    }

4.6.3、頁面請求示例

image

<form th:action="@{/param/pojo}" method="post">
    用戶名:<input type="text" name="username">
    密碼:<input type="password" name="password">
    <input type="submit" value="登錄">
</form>

4.6.4、測試效果

image

+++++++++++++++++++++++++分割線+++++++++++++++++++++++++

image

+++++++++++++++++++++++++分割線+++++++++++++++++++++++++

image

4.7、解決獲取請求參數的亂碼問題

4.7.1、post請求的亂碼解決方式

image

註意:SpringMVC中處理編碼的過濾器一定要配置到其他過濾器之前,否則無效;過濾器的順序根據filter-mapping標簽的排序決定。

    <!--配置springMVC的編碼過濾器-->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <!--該初始化參數用於設置請求參數的編碼方式-->
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <!--該初始化參數用於設置響應參數也使用同樣的編碼方式-->
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

4.7.2、get請求的亂碼解決方式

從tomcat8及以後的版本,get請求的亂碼問題預設已被官方解決;本例展示tomcat7的解決方式。

  • 找到並打開編輯該文件:tomcat安裝目錄\conf\server.xml

  • 在第一個 Connector 標簽中,添加對應的 UTF 編碼

image

URIEncoding="UTF-8"

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作者:張富春(ahfuzhang),轉載時請註明作者和引用鏈接,謝謝! cnblogs博客 zhihu Github 公眾號:一本正經的瞎扯 接上一篇:http 中使用 gzip 輸出內容時,如何預先壓縮前一半頁面? 經過實測,對線上一個輸出 html 的服務進行了改造,通過預先壓縮頁面前半部分的方 ...
  • 觀察者模式 一、Java觀察者模式 Java觀察者模式是一種設計模式,用於實現對象之間的一對多依賴關係。在觀察者模式中,當一個對象的狀態發生變化時,它的所有依賴對象(觀察者)都會自動收到通知併進行相應的更新。 觀察者模式由以下幾個核心組件組成: 主題(Subject):也稱為被觀察者或可觀察對象,它 ...
  • 一、案例描述 若依官網文檔地址:http://doc.ruoyi.vip/ruoyi/document/hjbs.html 本教程主要內容,自定義資料庫表,使用若依開源系統生成代碼並配置許可權。 若依環境配置 新建數據表t_user,利用若依代碼生成工具生成服務端及頁面代碼。 菜單配置 許可權配置 二、 ...
  • 從PDF中提取內容能幫助我們獲取文件中的信息,以便進行進一步的分析和處理。此外,在遇到類似項目時,提取出來的文本或圖片也能再次利用。要在Python中通過代碼提取PDF文件中的文本和圖片,可以使用 Spire.PDF for Python 這個第三方庫。具體操作方法查閱下文。 Python 提取PD ...
  • 1、連接數據,但是順序會受影響 在使用JOIN連接臨時表或子查詢時,無法保證結果的順序與特定值的順序完全一致。這是因為在查詢過程中,資料庫優化器可能會選擇不同的執行計劃,導致結果的順序發生變化。 SELECT TABLE_NAME.* FROM TABLE_NAME JOIN ( SELECT 'A ...
  • 前幾天,在我們的技術交流群里看到有小伙伴問:有沒有練手搭建Redis集群的方式推薦: 這裡不禁讓我想到,對於各種集群和分散式基礎設施的搭建,其實是每個開發者進階時候都要經歷的一個成長過程。但是,這裡對於不少開發者來說,卻又面臨著一個現實問題:我沒有足夠的資源(主機或配置)去嘗試和練習。 最近,DD剛 ...
  • C++ Windows下使用Cmake編譯Poco庫 1.編譯前準備: 先配置OpenSSL環境 (openssl version -a查看) 如果openssl是1.0.*版本,Poco版本最高用1.9.4。 如果1.1或者更高,用最新版本。 2.編譯命令(演示使用VS2022編譯v140版本Wi ...
  • 對於rpc項目,在接受大佬指導的時候曾問過對於長連接和短連接是處理處理的,在面試的時候也被問起socket是長連接還是短連接,發現自己沒有好好思考過這個問題,因此好好總結一下。 前置知識點:rpc基礎,tcp基礎 rpc項目中的長連接與短連接的思考 什麼是rpc項目中的長連接和短連接 類似於http ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...