SpringMVC 請求與響應處理詳解

引言

在 Java Web 開發中,SpringMVC 作為 Spring 框架的重要模塊,提供了強大的請求和響應處理機制。本文將深入探討 SpringMVC 中請求和響應的處理方式,結合實際案例,幫助開發者更好地理解和應用這些功能。

一、SpringMVC 請求處理

1. RequestMapping 注解

RequestMapping 注解用于建立請求 URL 和處理方法之間的映射關系,可以作用在類或方法上。

  • 作用在類上:作為一級請求路徑。

  • 作用在方法上:作為二級請求路徑。

@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/save")public String save() {return "success";}
}

訪問路徑為:http://localhost:8080/項目名/user/save

屬性說明
  • path/value:指定請求路徑的 URL。

  • method:指定允許的 HTTP 請求方法,如 RequestMethod.GET、RequestMethod.POST。

  • params:指定請求參數的條件。

@RequestMapping(value = "/save", method = RequestMethod.POST, params = "age=18")
public String save(@RequestParam("age") int age) {// 處理邏輯
}

2. 請求參數綁定

SpringMVC 支持多種類型的數據綁定,包括基本數據類型、字符串、實體類和集合類型。

基本數據類型和字符串

表單提交的參數名稱需與方法參數名稱一致。

@RequestMapping("/save")
public String save(String username, Integer age) {System.out.println("Username: " + username + ", Age: " + age);return "success";
}

對應的表單:

<form action="/user/save" method="post"><input type="text" name="username"><input type="text" name="age"><input type="submit" value="Submit">
</form>

預覽

實體類綁定

表單參數名稱需與實體類屬性名稱一致。

public class User {private String username;private Integer age;// getter 和 setter
}@RequestMapping("/save1")
public String save1(User user) {System.out.println(user);return "success";
}

對應的表單:

<form action="/user/save1" method="post"><input type="text" name="username"><input type="text" name="age"><input type="submit" value="Submit">
</form>

預覽

集合類型綁定

支持 List 和 Map 類型的參數綁定。

@RequestMapping("/save2")
public String save2(@RequestParam("users") List<User> users) {System.out.println(users);return "success";
}

對應的表單:

<form action="/user/save2" method="post"><input type="text" name="users[0].username"><input type="text" name="users[0].age"><input type="text" name="users[1].username"><input type="text" name="users[1].age"><input type="submit" value="Submit">
</form>

預覽

3. 使用 Servlet API

在控制器中可以直接使用 HttpServletRequest 和 HttpServletResponse 對象。

@RequestMapping("/save3")
public String save3(HttpServletRequest request, HttpServletResponse response) {String username = request.getParameter("username");int age = Integer.parseInt(request.getParameter("age"));System.out.println("Username: " + username + ", Age: " + age);return "success";
}

4. RequestParam 注解

用于綁定請求參數到方法參數。

@RequestMapping("/save4")
public String save4(@RequestParam("username") String name, @RequestParam("age") int age) {System.out.println("Username: " + name + ", Age: " + age);return "success";
}

二、SpringMVC 響應處理

1. 使用 ModelAndView

通過 ModelAndView 對象返回視圖和模型數據。

@RequestMapping("/save5")
public ModelAndView save5() {ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("msg", "保存成功");modelAndView.setViewName("result");return modelAndView;
}

對應的視圖 result.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Result</title>
</head>
<body>
<h1 th:text="${msg}"></h1>
</body>
</html>

預覽

2. 使用 Servlet API 進行輸出

直接通過 HttpServletResponse 輸出內容。

@RequestMapping("/save6")
public void save6(HttpServletResponse response) throws IOException {response.getWriter().println("保存成功");
}

3. 重定向與轉發

請求轉發

請求轉發 本身是一種服務器端行為?? 瀏覽器的地址欄不發生變化 從始至終都是一個請求 request信息在servlet當中是共享的 只能在網站內部資源之間進行轉發

@RequestMapping("/test1")
public String test1() {return "forward:/otherPage";
}
請求重定向

重定向? 本身是一種客戶端行為? 地址欄是發生改變的? 瀏覽器會發起兩次請求 request域當中的信息是不共享的? 可以訪問網站外部資源

@RequestMapping("/test2")
public String test2() {return "redirect:/otherPage";
}

4. 返回 JSON 數據

使用 @ResponseBody 注解將 Java 對象轉換為 JSON 響應。

@RequestMapping("/find")
@ResponseBody
public User find() {return new User("張三", 25, '男');
}

需要引入 Jackson 相關依賴:

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version>
</dependency>

三、總結

本文詳細介紹了 SpringMVC 中請求和響應的處理方式,包括 RequestMapping 注解的使用、參數綁定、Servlet API 的應用、重定向與轉發、JSON 響應、文件上傳下載以及異常處理等內容。通過這些技術點的講解和示例,開發者可以更高效地使用 SpringMVC 構建功能完善的 Web 應用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/899408.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899408.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899408.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從零開始的 Kafka 學習(四)| 生產消息

1. 生產消息 1.1 生產消息的基本步驟 &#xff08;一&#xff09;創建Map類型的配置對象&#xff0c;根據場景增加相應的配置屬性&#xff1a; 參數名參數作用類型默認值推薦值bootstrap.servers集群地址&#xff0c;格式為&#xff1a;brokerIP1:端口號,brokerIP2:端口號必…

k8s1.22 kubeadm 部署

k8s1.22 kubeadm 部署 1、更改hostname hostnamectl set-hostname master-001 && su root hostnamectl set-hostname node-001 && su root hostnamectl set-hostname node-002 && su root配置hsots cat >> /etc/hosts <<EOF 192.168.20.…

新手村:邏輯回歸-理解04:熵是什么?

新手村&#xff1a;邏輯回歸04&#xff1a;熵是什么? 熵是什么? 前置條件 在開始學習邏輯回歸中的熵理論之前&#xff0c;需要掌握以下基礎知識&#xff1a; 概率論與統計學&#xff1a; 概率分布&#xff08;如伯努利分布、正態分布&#xff09;。條件概率和貝葉斯定理。期…

STM32通用定時器結構框圖

STM32單片機快速入門 通用定時器框圖 TIM9和TIM12 通用定時器框圖 TIM9和TIM12 &#xff08;二&#xff09; 通用定時器框圖

3.28-2 jmeter讀取mysql

jmeter操作mysql 1.下載數據驅動&#xff0c;安裝數據驅動 &#xff08;1&#xff09;存放四個路徑 a.jre下的lib C:\Program Files\Java\jre1.8.0_60\lib &#xff08;2&#xff09;存放在jre 下的lib 中的ext 路徑&#xff1a; C:\Program Files\Java\jre1.8.0_60\lib\…

TDengine 中的保留關鍵詞

簡介 本節很重要&#xff0c;請大家收藏&#xff0c;避免在編寫程序的時候踩坑。因為關鍵字是被 TDengine 系統使用的&#xff0c;如果你在 SQL 中使用了保留關鍵詞&#xff0c;并且沒有被反引號包括時&#xff0c;會報語法錯誤&#xff0c;當你不知道這個是保留關鍵詞時&…

美攝科技開啟智能汽車車內互動及娛樂解決方案2.0

在科技飛速發展的今天&#xff0c;汽車已不再僅僅是簡單的代步工具&#xff0c;而是逐漸演變為集出行、娛樂、社交于一體的智能移動空間。美攝科技&#xff0c;作為前沿視覺技術與人工智能應用的領航者&#xff0c;憑借其卓越的技術實力和創新精神&#xff0c;攜手汽車行業&…

Postman CORS 測試完全指南:輕松模擬跨域請求,排查 CORS 相關問題

在使用 Postman 進行 API 測試時&#xff0c;通常不會遇到跨域問題&#xff0c;因為 Postman 是一個獨立的客戶端應用程序&#xff0c;不同于在瀏覽器中運行的 JavaScript 代碼&#xff0c;它沒有同源策略&#xff08;SOP&#xff09;的限制。跨域資源共享&#xff08;CORS&…

基于SpringBoot和Vue的SQL TO API平臺的設計與實現

文章目錄 前言一、系統功能模塊二、數據庫設計1. 實體屬性圖1. 實體屬性圖1.1 職員表1.2 數據源配置表1.3 接口配置表1.4 請求記錄表 2. E-R圖 三、系統實現1. 登錄頁面2. 職員管理頁面1.1 創建用戶1.2 編輯用戶 2. 數據源管理2.1 創建數據源2.2 編輯數據源 3. 接口管理3.1 創建…

【Portainer】Docker可視化組件安裝

Portainer Portainer 是用于管理容器化環境的一體化平臺工程解決方案&#xff0c;提供廣泛的定制功能&#xff0c;以滿足個人開發人員和企業團隊的需求。 官方地址: https://www.portainer.io/ 安裝 在 WSL / Docker Desktop 上使用 Docker 安裝 Portainer CE 通過命令或UI頁…

Gateway實戰(二)、負載均衡

spring cloud- Gateway實戰二:負載均衡 負載均衡簡單了解一)、實操案例-自動負載均衡二)、實操案例-手動負載均衡1、手動負載均衡方式一2、手動負載均衡方式二負載均衡 簡單了解 我們引入負載均衡,主要是為了 讓網絡流量能均勻的分發到多個服務器上,以此來提高系統性能、…

MATLAB 2024b深度學習,圖神經網絡(GNN)

隨著人工智能技術向多學科交叉融合與工程實踐領域縱深發展&#xff0c;MATLAB 2024b深度學習工具箱通過架構創新與功能強化&#xff0c;為科研創新和行業應用提供了全棧式解決方案。本培訓基于該版本工具鏈的三大革新方向展開&#xff1a;一是構建覆蓋經典模型與前沿架構的體系…

unity中Xcharts圖表鼠標懸浮表現異常

鼠標懸浮在面板附近&#xff0c;只顯示單獨的一個項目 而且無論鼠標如何移動&#xff0c;根本沒有效果。 解決方案&#xff1a; 需要在對應的Canvas上綁定主相機才可以 鼠標移動到項目上就有信息展示了

使用Django創建項目及介紹

注意&#xff1a;創建項目之前先進入虛擬環境 第一步&#xff1a;創建 Django 項目 運行以下命令創建一個名為 myproject 的 Django 項目&#xff1a; django-admin startproject myproject 這會生成一個名為 myproject 的文件夾&#xff0c;結構如下&#xff1a; myproje…

CentOS 安裝LAMP全過程 - 完整步驟與最佳實踐

在開始搭建 LAMP 環境之前&#xff0c;需要確保系統已經滿足以下條件&#xff1a; 1、操作系統&#xff1a;CentOS 7 或 CentOS 8 2、網絡連接&#xff1a;系統必須能夠訪問互聯網以下載所需的軟件包 3、權限&#xff1a;需要 root 權限或者通過sudo 提權執行命令 先更新系…

Java基礎關鍵_031_反射(一)

目 錄 一、概述 二、獲取 Class 的四種方式 1.Class.forName("完整全限定類名") 2.getClass() 3.class 屬性 4.通過類加載器獲取 三、通過反射機制實例化對象 1.newInstance()&#xff08;已過時&#xff09; 2.配置文件利用反射機制實例化對象 四、反射 Cla…

MySQL高級語句深度解析與應用實踐

一、窗口函數&#xff1a;數據分析的利器 1. 窗口函數基礎概念 窗口函數(Window Function)是MySQL 8.0引入的強大特性&#xff0c;它可以在不減少行數的情況下對數據進行聚合計算和分析 SELECT employee_name,department,salary,RANK() OVER (PARTITION BY department ORDER…

【機器學習基礎 4】 Pandas庫

一、Pandas庫簡介 Pandas 是一個開源的 Python 數據分析庫&#xff0c;主要用于數據清洗、處理、探索與分析。其核心數據結構是 Series&#xff08;一維數據&#xff09;和 DataFrame&#xff08;二維表格數據&#xff09;&#xff0c;可以讓我們高效地操作結構化數據。Pandas …

ETCD --- ?租約(Lease)?詳解

一、租約的核心概念 1. ?租約(Lease)? 一個租約是一個有時間限制的“授權”,綁定到鍵值對上。每個租約有一個唯一的ID(64位整數),通過etcdctl或客戶端API創建。創建租約時需指定TTL(Time-To-Live),即租約的有效期(單位:秒)。客戶端需定期向etcd發送續約(KeepAl…

33.[前端開發-JavaScript基礎]Day10-常見事件-鼠標事件-鍵盤事件-定時器-案例

1 window定時器 window定時器方法 setTimeout的使用 setInterval的使用 2 輪播消息提示 案例實戰一 – 輪播消息提示 3 關閉隱藏消息 案例實戰二 – 關閉隱藏消息 4 側邊欄展示 案例實戰三 – 側邊欄展示 5 tab切換實現 案例實戰四 – 登錄框&#xff08;作業&#xff09;…