SpringMVC相關梳理

SpringMVC 返回值類型

(一)核心返回值類型分類

  1. 視圖渲染類:用于跳轉并渲染頁面,如String(指定視圖名)、ModelAndView(視圖 + 數據)。
  2. 數據返回類:用于返回數據(而非頁面),如@ResponseBody + Object(返回 JSON/XML 等)、ResponseEntity(自定義響應頭、狀態碼 + 數據)。
  3. 響應控制類:直接控制響應內容,如void(通過HttpServletResponse手動寫響應)、HttpServletResponse(同上)。
  4. 異步處理類:用于異步請求處理,如DeferredResultCallable
  5. 重定向專用類redirect: + RedirectAttributes(重定向時傳遞數據,避免request失效問題)。
  6. 轉發專用類forward:(通過String返回值指定轉發路徑)。

(二)返回值選擇指南表格

應用場景

推薦返回值類型

示例代碼

顯示 JSP/Thymeleaf 頁面

String

return "index";(對應 index.jsp/index.html)

返回 JSON 數據(接口)

@ResponseBody + Object

@ResponseBody public User getUser() { return user; }

精確控制響應(頭、狀態碼)

ResponseEntity

return new ResponseEntity<>(data, HttpStatus.OK);

文件下載

ResponseEntity<byte[]>void

return new ResponseEntity<>(fileBytes, headers, HttpStatus.OK);

異步請求處理(如長輪詢)

DeferredResultCallable

public DeferredResult<String> asyncHandle() { ... }

重定向并傳遞數據

String + RedirectAttributes

public String redirect(RedirectAttributes attr) { attr.addFlashAttribute("msg", "success"); return "redirect:/index"; }

服務器內部轉發

String(帶forward:前綴)

return "forward:/user/detail";

直接手動寫響應內容

void(配合HttpServletResponse

public void writeResponse(HttpServletResponse response) { response.getWriter().write("hello"); }

請求轉發(Forward)

(一)基本概念

請求轉發是服務器內部的行為,客戶端僅發起一次請求,服務器在內部將該請求轉發到另一個資源。

(二)工作原理

客戶端請求服務器(Servlet A) → 轉發服務器(Servlet B) → 響應客戶端

(三)特點

  1. URL 不變:瀏覽器地址欄始終顯示原始請求的 URL,不會發生變化。
  2. 一次請求:整個轉發流程中,客戶端僅發送一次 HTTP 請求。
  3. 共享 request:轉發前后的資源(如 Servlet、JSP 等)共享同一個request對象,可通過request傳遞數據。
  4. 服務器內部操作:轉發過程對客戶端透明,客戶端無法感知到服務器內部的轉發行為。
  5. 范圍限制:僅能轉發到當前應用內部的資源,無法轉發到外部 URL(如其他網站)。

(四)使用場景

  1. 控制器完成業務邏輯處理后,跳轉到用于數據展示的頁面(如 JSP)。
  2. 需要在不同資源之間傳遞數據(如從控制器向頁面傳遞查詢結果)時。
  3. 要求保持瀏覽器地址欄 URL 不變的頁面跳轉場景。

重定向(Redirect)

(一)基本概念

重定向是客戶端的行為,服務器接收到客戶端請求后,會返回一個響應(告知客戶端 “請去訪問另一個 URL”),隨后客戶端會根據該響應發起新的請求。

(二)工作原理

客戶端請求① → 服務器響應(302重定向狀態碼) → 客戶端請求② → URL對應的服務器響應客戶端

(三)特點

  1. URL 改變:瀏覽器地址欄會更新為新的目標 URL,顯示最終訪問的地址。
  2. 兩次請求:客戶端會先后發起兩次 HTTP 請求,第一次請求原始 URL,第二次請求重定向后的 URL。
  3. 不共享 request:兩次請求分別對應獨立的request對象,無法通過request傳遞數據。
  4. 無范圍限制:可重定向到任意 URL,包括當前應用內部資源和外部網站(如從自身系統跳轉到百度)。
  5. 客戶端知情:客戶端能感知到重定向行為(通過地址欄變化或網絡請求記錄)。

(四)使用場景

  1. 表單提交后(如用戶注冊、登錄提交),防止刷新頁面導致重復提交(即 Post-Redirect-Get 模式)。
  2. 需要跳轉到外部網站時(如從應用內跳轉到第三方支付平臺)。
  3. 用戶完成登錄 / 注銷操作后,跳轉到目標頁面(如登錄后跳轉到首頁,注銷后跳轉到登錄頁)。
  4. 要求改變瀏覽器地址欄 URL 的場景(如優化 URL 顯示,隱藏內部接口路徑)。

請求轉發與重定向對比表格

特性

請求轉發(Forward)

重定向(Redirect)

請求次數

1 次

2 次

URL 變化

不變(顯示原始 URL)

改變(顯示目標 URL)

數據共享

共享同一個request對象

不共享request對象(兩次請求獨立)

速度

較快(僅服務器內部處理,無客戶端往返)

較慢(需客戶端發起第二次請求,有網絡往返)

目標范圍

僅能跳轉至同一應用內部資源

可跳轉至任意 URL(內部 / 外部)

瀏覽器感知

無感知(不知道轉發過程)

有感知(地址欄變化、可查看兩次請求)

實現方式(SpringMVC

return "forward:url"

return "redirect:url"

實際應用示例(SpringMVC 環境)

(一)請求轉發示例

/*** 返回String類型,實現請求轉發* @return 轉發目標路徑*/@RequestMapping("/save4.do")public String save4() {System.out.println("業務邏輯執行完成(如數據保存)...");// 轉發到/pages目錄下的suc.jsp頁面return "forward:/pages/suc.jsp";}

(二)重定向示例

/*** 返回String類型,實現重定向* @return 重定向目標路徑*/@RequestMapping("/save5.do")public String save5() {System.out.println("業務邏輯執行完成(如表單提交)...");// 重定向到/pages目錄下的suc.jsp頁面return "redirect:/pages/suc.jsp";}

選擇原則

(一)優先選擇請求轉發的場景

  1. 需保持瀏覽器地址欄 URL 不變時。
  2. 需在不同資源(如控制器→頁面、控制器→控制器)之間通過request傳遞數據時。
  3. 僅需跳轉到當前應用內部頁面,且對跳轉性能有較高要求時。

(二)優先選擇重定向的場景

  1. 表單提交后,需防止刷新頁面導致重復提交時(必選 Post-Redirect-Get 模式)。
  2. 需跳轉到外部網站(如第三方平臺、合作系統)時。
  3. 用戶完成登錄、注銷等操作后,需跳轉到目標頁面(如首頁、個人中心)時。
  4. 需改變瀏覽器地址欄 URL,隱藏內部接口路徑或優化 URL 顯示時。
  5. 需實現跨應用跳轉(如從 A 應用跳轉到 B 應用)時。

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

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

相關文章

Docker化性能監控平臺搭建:JMeter+InfluxDB+Grafana全攻略

你作為一名DevOps工程師或測試專家&#xff0c;正在監控一個高并發微服務系統&#xff1a;突發流量峰值導致響應延遲&#xff0c;服務器CPU飆升&#xff0c;但你只能手動查看日志&#xff0c;優化起來像大海撈針。這時&#xff0c;DockerJMeterInfluxDBGrafana的“夢幻四重奏”…

Adobe Acrobat 中通過 JavaScript 調用 Web 服務

強大的JavaScript支持&#xff0c;允許用戶通過腳本自動化處理PDF文檔。本文將詳細介紹如何在Adobe Acrobat環境中使用JavaScript調用Web服務&#xff0c;包括基礎概念、實現方法、代碼示例以及常見問題解決方案。 第一部分&#xff1a;基礎概念與技術背景 1.1 Acrobat JavaScr…

SpringCloud OpenFeign 遠程調用(RPC)(三)

目錄 1 概念導入 2 添加依賴 3 在啟動類上添加注解 4 編寫對應的接口 5 注入并調用 6 日志 7 超時控制 8 超時重試 9 攔截器 10 Fallback兜底 1 概念導入 Spring Cloud OpenFeign Features :: Spring Cloud Openfeign 2 添加依賴 <!-- 遠程調用 --><depen…

【Flask】測試平臺開發,登陸重構

概述我們在開篇的時候實現了簡單的登陸功能&#xff0c;也實現了一個前后端聯調的登陸功能&#xff0c;但是你有沒有發現&#xff0c;那個登陸只是一個簡單的登陸&#xff0c;且密碼在接口返回的過程中是銘文密碼&#xff0c;在生產環境中使用肯定是不行的&#xff0c;一般密碼…

【Bluedroid】A2DP Source設備音頻數據讀取機制分析(btif_a2dp_source_read_callback)

本文聚焦Android 藍牙 A2DP Source設備的音頻數據讀取核心邏輯,深入解析關鍵回調函數btif_a2dp_source_read_callback的功能實現,包括從 HAL(硬件抽象層,支持 HIDL/AIDL 兩種傳輸方式)或 UIPC(用戶空間進程間通信)獲取音頻數據的路徑選擇機制,以及數據下溢(Underflow)…

多方調研賦能AI+智慧消防 豪越科技人工智能創新獲認可

8月26日&#xff0c;中國職業安全健康協會城市及社區安全發展專業委員會秘書長汪衛國以及常務副秘書長黃強亮等諸位領導到訪委員單位豪越科技&#xff0c;展開了實地的調研活動并給予相關指導。此次調研著重于了解豪越科技自主研發的“AI消防救援一體化安全管控平臺”&#xff…

算法---字符串

一、算法說明 字符串是一種類型&#xff0c;他不是一種算法&#xff0c;所以我們在處理這方面的問題的時候&#xff0c;需要結合其他的算法 二、題目 最長公共前綴 1、題目 最長公共前綴 2、解題思路 解法一&#xff1a;我們可以先讓兩個相互比較&#xff0c;然后在將比較…

鴻蒙Next導航與路由指南:組件導航與頁面路由的完美協作

一次搞懂HarmonyOS NEXT中的兩種導航方式&#xff0c;打造流暢的應用內跳轉體驗在鴻蒙應用開發中&#xff0c;流暢的頁面導航和路由是提升用戶體驗的關鍵。HarmonyOS NEXT提供了組件導航&#xff08;Navigation&#xff09; 和頁面路由&#xff08;ohos.router&#xff09; 兩種…

JavaScript原型詳解——面試重點

一、原型的含義&#xff1a;JavaScript 中的“原型”既指 函數身上的 prototype 對象&#xff0c;也指 對象身上的 [[Prototype]] 隱藏鏈接&#xff1b;它倆共同構成了“原型鏈”&#xff0c;決定了“找不到屬性時去哪里繼續找”的規則。&#xff08;1&#xff09;原型對象(pro…

Vue3 全面介紹

Vue3&#xff08;正式名稱為 Vue.js 3&#xff09;是 Vue.js 前端框架的第三個主要版本&#xff0c;于 2020 年 9 月正式發布。作為對 Vue2 的重大升級&#xff0c;Vue3 在核心架構、性能優化、開發體驗等方面進行了全面重構&#xff0c;同時保持了 Vue 一貫的“漸進式框架”理…

HTTP 范圍請求:為什么你的下載可以“斷點續傳”?

在現代網絡應用中&#xff0c;我們習以為常的功能&#xff0c;如斷點續傳、多線程下載和在線視頻快進快退&#xff0c;都依賴于 HTTP 協議中的一個強大特性&#xff1a;范圍請求&#xff08;Range Requests&#xff09;。這項技術讓客戶端能夠聰明地只請求文件的一部分&#xf…

萬博智云聯合華為云共建高度自動化的云容災基線解決方案

一、摘要 近日&#xff0c;萬博智云與華為云的深入合作再添新章——萬博智云HyperBDR云容災解決方案&#xff0c;順利通過華為云專家團隊評審和認證&#xff0c;正式被選為華為云基線解決方案&#xff08;Baseline Solution&#xff09;&#xff0c;并在華為云國際站上線。 Hy…

機器視覺opencv教程(二):二值化、自適應二值化

文章目錄機器視覺opencv教程&#xff08;二&#xff09;&#xff1a;二值化、自適應二值化一、二值化圖基礎概念二、傳統二值化方法&#xff08;基于全局固定閾值&#xff09;1. 閾值法&#xff08;THRESH_BINARY&#xff09;2. 反閾值法&#xff08;THRESH_BINARY_INV&#xf…

leetcode 461 漢明距離

一、問題描述二、解題思路采用位運算的思想來解決這個問題&#xff0c;首先&#xff0c;將x和y進行異或&#xff0c;x和y對應二進制位不同就會得到1&#xff0c;然后統計所有1的個數&#xff0c;即為漢明距離。三、代碼實現時間復雜度&#xff1a;T(n)O(n)空間復雜度&#xff1…

ClickHouse 客戶端

ClickHouse 客戶端 ClickHouse提供兩種客戶端接口&#xff0c;分別基于 HTTP 和 TCP 協議 基于 HTTP 協議 主要用來支持輕量級的簡單操作&#xff0c;方便跨平臺和編程語言。 測試clickhouse聯通性&#xff1a; $ curl http://localhost:8123/ Ok.在運行狀況檢查腳本中使用…

DBeaver 連接 PostgreSQL 教程

&#x1f6e0;? DBeaver 連接 PostgreSQL 教程1?? 安裝 DBeaver打開官網&#xff1a;https://dbeaver.io/download/下載 Community Edition&#xff08;免費版&#xff09;&#xff0c;選擇對應系統&#xff08;Windows / macOS / Linux&#xff09;。安裝完成后&#xff0c…

Komo Searc-AI驅動的搜索引擎

本文轉載自&#xff1a;Komo Searc-AI驅動的搜索引擎 - Hello123工具導航 ** 一、&#x1f50d; Komo Search 是什么&#xff1f; Komo Search 是一款基于人工智能技術的新一代交互式搜索引擎&#xff0c;它徹底改變了我們獲取信息的方式 —— 從被動檢索變成主動對話。不同于…

HTML 和 JavaScript 關聯的基礎教程

HTML 和 JavaScript 是構建現代網頁的核心技術。HTML 負責頁面結構&#xff0c;JavaScript 負責動態交互。以下是兩者的基本關聯方式。內聯方式&#xff1a;直接在 HTML 中嵌入 JavaScript在 HTML 文件中&#xff0c;可以通過 <script> 標簽直接編寫 JavaScript 代碼。這…

淘寶四個月造了一個超越美團的“美團”

本周三&#xff0c;美團發布最新一季財報&#xff0c;利潤承壓導致股價爆跌。只隔一天&#xff0c;阿里也發布了最新季報&#xff0c;最大的亮點是“淘寶閃購”即時零售業務&#xff0c;日均訂單量站穩8000萬單&#xff0c;峰值訂單更是達到了1.2億單。8000萬單這個數字令市場眼…

Java開發MongoDB常見面試題及答案

基礎概念題1. 什么是MongoDB&#xff1f;它的主要特點是什么&#xff1f;答案&#xff1a; MongoDB是一個開源的NoSQL文檔型數據庫&#xff0c;主要特點包括&#xff1a;文檔存儲&#xff1a;使用BSON格式存儲數據&#xff0c;類似JSON結構無Schema約束&#xff1a;靈活的數據結…