【Java EE】Spring MVC 的使用

1. 路由映射:

????????@RequestMapping:當用戶訪問某個 URL 時,該注解會根據 URL 的路徑映射到具體的程序中對應的類或方法(路由映射)。修飾方法時,路徑為類路徑 + 方法路徑。默認情況下同時支持 GET 和 POST,也可以顯式指定,如下:

// 此時只支持 GET 方法
@RequestMapping(value = "/m2", method = RequestMethod.GET)

????????@GetMapping:和上面等價,只支持 GET 的另一種寫法。

2. 接收請求中的參數:

? ? ? ? 首先,請求報文中有哪些地方可能帶有后端需要的參數?

????????從 HTTP 協議傳過來的參數均是字符串,Spring 會根據后端定義的參數類型進行轉換,若無法轉換則會報 400。

2.1 接收查詢字符串中的數據

????????接收單個參數:

public String r1(String keyword)

????????@RequestParam:用于重命名,此時前端的參數名為 keyword。一旦使用該注解則默認該參數為必傳參數,如果客戶端沒有傳此參數會報 400

public String r1(@RequestParam("keyword") String key)

????????也可以顯式指定該參數為非必傳參數,此時不傳參數會為 null。對于可能為空,且并未自動初始化的參數,應該使用包裝類型,因為包裝類型可以為 null,而基本數據類型不可以為 null。

public String r2(@RequestParam(value = "q", required = false)

? ? ? ? 接收數組:Spring 會幫我們自動綁定數組中參數的值。

public int[] r3(int[] arr)

? ? ? ? ?下面兩種方法都可以:

? ? ? ? 接收集合:需要使用 @RequestParam 綁定參數關系,也就是告知 Spring 要將傳來的數據構造為集合。

public String r4(@RequestParam List<Integer> list)

2.2 接收 body 中的數據

????????@RequestBody:該注解用于綁定請求正文中的數據。

? ? ? ? 接收 JSON:直接使用 Java 對象就可以輕松接收 JSON。這是因為 Spring 已經幫我們內置了 JSON 和 Java 對象相互轉換的工具(Jackson)。

public String r5(@RequestBody UserInfo userInfo)

? ? ? ? 接收文件:可以使用?@RequestPart 來重命名。

    public String r11(MultipartFile file) throws IOException {// 得到文件名String filename = file.getOriginalFilename();// transferTo 內部封裝了 InputStream 和 OutputStreamfile.transferTo(new File("D:\\", "UserFile.jpg"));return "已接收:" + filename;}

2.3 接收 header 中的數據

? ? ? ? @RequestHeader:通過 header 中的鍵名獲取。

public String getUserAgent2(@RequestHeader("User-Agent") String ua)

? ? ? ?@CookieValue:獲取 cookie 中的某一個值。如果想要獲取很多 cookie 就要寫很多注解,所以也可以采用下面的方法。

public String r13(@CookieValue("name") String name)

? ? ? ? 使用 HttpServletRequest 類:HttpServletRequest 和?HttpServletResponse 是 Servlet 提供的接口,由 Tomcat 為我們實現。SpringWebMVC 是在 Servlet 的基礎上構建的框架,這兩個 Servlet 的核心類作為 SpringWebMVC 的內置對象存在,HttpServletRequest 中封裝了 HTTP 請求的全部信息,HttpServletResponse 中封裝了 HTTP 響應的全部信息。在高級 Web 框架出現前,使用這兩個類就可以獲取通信的全部數據,雖然現在 SpringWebMVC 為我們提供了許多方便的注解,但有些情況下使用 HttpServletRequest 更優雅。

    public String r12(HttpServletRequest request) {Cookie[] cookies = request.getCookies();StringBuilder builder = new StringBuilder();if (cookies == null) return "無 Cookie 設置!";for (Cookie c : cookies) builder.append(c.getName()).append(":").append(c.getValue()).append(",");return "Cookie 信息為:" + builder;}
    public String getUserAgent(HttpServletRequest request) {return request.getHeader("User-Agent");}

????????獲取 Session:并不是指從客戶端獲取 Session,因為 Session 是保存在服務器內存中的,這里實際上是在獲取 Cookie 中的 sessionId,然后根據 sessionId 獲取服務器中對應的 Session 對象。

? ? ? ? 需要實例?HttpServletRequest 類,調用其提供的 getSession 方法,這個方法就是封裝了上面提到的兩步。如果檢索到 Cookie 中有 sessionId,則表示服務器已經在內存中保存了該 Session,該方法會返回現有的Session。如果不存在,則會生成 sessionId,創建新的 Session,在響應中返回該 sessionId 給客戶端。因此 getSession 默認返回非空 Session,若需避免創建新 Session,應指定參數為 getSession(false)。

HttpSession session = request.getSession();

? ? ? ? 也可以不實例?HttpServletRequest 類,直接使用 HttpSession 類獲取,此時不存在 Session 會自動創建。

public String r15(HttpSession session)

? ? ? ? 針對 Session 的進一步操作:

session.setAttribute(使用字符串命名, 需要綁定到該會話的對象);
session.getAttribute(指定的名稱);

2.4 獲取 URL 中資源定位部分的參數

????????取路徑參數的情況并不多,{ } 里的數據即要取的值。

? ? ? ? @PathVariable:意為路徑中的變量,取路徑參數需要加此注解,可以填參數來重命名。

    @RequestMapping("/r6/{r7}")public String r6(@PathVariable String r7)

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

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

相關文章

pip 安裝默認切換到國內鏡像(清華園,阿里云等)

國內Python包鏡像地址如下&#xff1a; 清華&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple/阿里云&#xff1a;https://mirrors.aliyun.com/pypi/simple/中國科技大學&#xff1a;https://pypi.mirrors.ustc.edu.cn/simple/華為云&#xff1a;https://repo.huaweiclou…

AI agent 學習

參考&#xff1a; AI搜索DeepResearch&#xff1f;_大模型 deepsearch 深度搜索-CSDN博客 Agent是以大語言模型為大腦驅動的系統&#xff0c;具備自主理解、感知、規劃、記憶和使用工具的能力&#xff0c;能夠自動化執行和完成復雜任務。 自主性和自適應&#xff0c;是判斷一款…

【PTA數據結構 | C語言版】求單鏈表list中的元素個數,即表長

本專欄持續輸出數據結構題目集&#xff0c;歡迎訂閱。 文章目錄題目代碼題目 請編寫程序&#xff0c;將 n 個整數順次插入一個初始為空的單鏈表的表頭。最后輸出單鏈表的表長。 本題旨在訓練學習者熟悉單鏈表的基本操作&#xff0c;不建議直接輸出 n。 輸入格式&#xff1a;…

玩轉Docker | 使用Docker部署HomeBox家庭庫存管理工具

玩轉Docker | 使用Docker部署HomeBox家庭庫存管理工具 前言一、HomeBox介紹Homebox簡介主要特點主要使用場景二、系統要求環境要求環境檢查Docker版本檢查檢查操作系統版本三、部署HomeBox服務下載HomeBox鏡像編輯部署文件創建容器檢查容器狀態檢查服務端口安全設置四、訪問Hom…

QT中的常用控件-QWidget的enable屬性

QT中的常用控件-QWidget的enable屬性 enable描述了一個控件是否處于“可用”狀態 與之相對應的概念是“禁用”&#xff0c;禁用是該控件不能接受任何用戶的輸入事件&#xff0c;并且外觀上往往是灰色的 如果一個Widget被禁用&#xff0c;則該Widget的子元素也被禁用API說明IsEn…

【數據結構】復雜度分析

目錄 一、算法 1.基本概念 2.描述方法 3.算法效率 二、算法的時間復雜度 三、算法的空間復雜度 一、算法 1.基本概念 通俗的講&#xff0c;算法是解決問題的方法&#xff0c;比如在現實生活中一道菜譜&#xff0c;一個安裝輪椅的操作指南等。 嚴格的說&#xff0c;算法…

推薦系統基礎 --ShusenWang

學習b站up主的ShusenWang的推薦系統筆記 指標 任何系統/算法/模型都需要評估&#xff0c;對于推薦系統的指標有消費指標和北極星指標&#xff0c;消費指標是衡量用戶對產品的使用情況&#xff0c;使用頻率廣度和深度&#xff0c;用于了解用戶的使用習慣&#xff0c;北極星指標是…

linux wsl2 docker 鏡像復用快速方法

GitHub項目中的devcontainer.json、Dockerfile構建了一個A項目的鏡像環境&#xff0c;現在我有一個文件夾&#xff0c;文件夾中只有一個b.py文件&#xff0c;此時我希望使用A項目的環境&#xff0c;如何實現&#xff1f;注意&#xff1a; 建議使用下面的方法2 解決方案&#xf…

(生活比喻-圖文并茂)http2.0和http3.0的隊頭阻塞,http2.0應用層解決,TCP層存在,3.0就是徹底解決,到底怎么理解區別???

說明一下&#xff1a; http屬于應用層協議&#xff0c;TCP和udp屬于傳輸層協議 文章目錄階段一&#xff1a;HTTP/1.1 的情況&#xff08;單車道收費站&#xff0c;一次過一輛&#xff09;階段二&#xff1a;HTTP/2 的情況&#xff08;多車道收費站&#xff0c;但出口只有一條路…

ARM環境openEuler2203sp4上部署19c單機問題-持續更新

問題01、報錯如下orcl:/home/oracledb15> export CV_ASSUME_DISTIDRHEL8 orcl:/home/oracledb15> $ORACLE_HOME/runInstaller -applyPSU /soft/37642901 Exception in thread "main" java.lang.UnsatisfiedLinkError: /u01/app/oracle/product/19.0.0/db_1/oui…

php成績分析系統單科分數分布分析202507

提交二維數據表&#xff0c;識別成績科目顯示科目選擇&#xff0c;選擇科目后顯示樣本數,平均分,最高分,最低分,中位數,柱狀圖圖表顯示各分值人數分布&#xff0c;表格顯示統計數據。 技術&#xff1a;html5css3ajaxphp 原生代碼實現。 效果圖&#xff1a; 下載&#xff1a; …

Redis Cluster 與 Sentinel 筆記

目錄 Redis 集群&#xff08;Cluster&#xff09;概述 Cluster 的工作原理 Cluster 配置與部署 Cluster 常見問題與限制 Redis Sentinel&#xff08;哨兵&#xff09;機制概述 Sentinel 的工作機制 Sentinel 配置與部署 Sentinel vs Cluster 總結 Redis 集群&#xff…

LLM視覺領域存在模型視覺識別不準確、細粒度視覺任務能力不足等科學問題

LLM視覺領域存在模型視覺識別不準確、細粒度視覺任務能力不足等科學問題 除了前面提到的數據集,還有一些用于評估視覺推理等能力的經典數據集。目前關于LLM視覺領域經典提示詞方面的名校或大公司論文較少,以下是相關科學問題、數據集及部分相關論文介紹: 科學問題 視覺推理…

Node.js worker_threads:并發 vs 并行

一、核心結論 Node.js 的 worker_threads 模塊實現的是 并行計算 &#xff0c;而非傳統意義上的“并發”。其通過操作系統級線程實現多核 CPU 的并行執行&#xff0c;同時保留 Node.js 單線程事件循環的并發模型。 二、關鍵概念解析 1. 并發&#xff08;Concurrency&#xff09…

gloo 多卡訓練

我們遇到了分布式訓練中的通信超時問題&#xff08;Connection closed by peer&#xff09;。根據錯誤信息&#xff0c;問題發生在梯度同步的屏障&#xff08;barrier&#xff09;操作時。以下是針對此問題的優化措施和代碼修改&#xff1a; 優化措施&#xff1a; 增強通信穩…

【Docker】在銀河麒麟ARM環境下離線安裝docker

1、前言 采用離線安裝的方式。 關于離線安裝的方式官網有介紹&#xff0c;但是說的很簡單&#xff0c;網址&#xff1a;Binaries | Docker Docs 官網介紹的有幾種主流linux系統的安裝方式&#xff0c;但是沒有kylin的&#xff0c;所以在此記錄一下。 在安裝過程中也遇到了些…

AUTOSAR進階圖解==>AUTOSAR_SWS_SOMEIPTransformer

AUTOSAR SOME/IP 轉換器規范詳解 基于AUTOSAR標準的SOME/IP轉換器協議解析與實現指南目錄 1. 介紹與功能概述2. SOME/IP架構 2.1 SOME/IP轉換器架構2.2 組件解釋2.3 層級說明 3. SOME/IP通信流程 3.1 客戶端/服務器通信序列3.2 通信流程解釋 4. SOME/IP消息結構 4.1 消息結構類…

Python 機器學習核心入門與實戰進階 Day 5 - 模型調參與交叉驗證技巧(GridSearchCV、KFold)

? 今日目標 理解模型調參的重要性&#xff08;避免欠擬合/過擬合&#xff09;掌握 GridSearchCV 的使用方法學習 K 折交叉驗證的基本流程與意義對比不同參數組合的表現使用 Pipeline 簡化流程&#xff08;進階&#xff09;&#x1f4d8; 一、調參思路方法描述Grid Search窮舉所…

Python打卡:Day47

復習日 浙大疏錦行

ACE-Step:AI音樂生成基礎模型

ACE-Step是什么 ACE-Step 是 ACE Studio 和 StepFun 聯合推出的一款開源音樂生成基礎模型&#xff0c;專為高效、連貫、可控的音樂創作而設計。它融合了擴散模型、深度壓縮自編碼器&#xff08;DCAE&#xff09;和輕量級線性變換器&#xff0c;生成速度比傳統大模型快約 15 倍…