【Easylive】HttpServletRequest、HttpServletResponse、HttpSession 介紹

【Easylive】項目常見問題解答(自用&持續更新中…) 匯總版
這三個是 Java Web 開發(Servlet/JSP)的核心接口,用于處理 HTTP 請求和響應 以及 用戶會話管理。它們在 Spring MVC(@Controller)中也被廣泛使用。


1. HttpServletRequest(請求對象)

作用

封裝客戶端(瀏覽器)發送的 HTTP 請求信息,包括:
? 請求參數(GET/POST)
? 請求頭(Headers)
? 會話(Session)
? 客戶端信息(IP、User-Agent)

常用方法

方法說明
String getParameter("name")獲取請求參數(如 ?id=123 或表單 POST 數據)
String[] getParameterValues("name")獲取復選框等同名參數(返回數組)
String getHeader("User-Agent")獲取請求頭信息
String getMethod()獲取請求方法(GET/POST/PUT/DELETE)
String getRequestURI()獲取請求路徑(如 /user/login
Cookie[] getCookies()獲取客戶端發送的 Cookie
HttpSession getSession()獲取或創建會話(Session)
String getRemoteAddr()獲取客戶端 IP 地址

代碼示例

@GetMapping("/user")
public String getUser(HttpServletRequest request) {String username = request.getParameter("username"); // 獲取參數String ip = request.getRemoteAddr(); // 獲取客戶端IPreturn "User: " + username + ", IP: " + ip;
}

2. HttpServletResponse(響應對象)

作用

封裝服務器返回給客戶端的 HTTP 響應信息,包括:
? 設置響應狀態碼(200/404/500)
? 添加響應頭(Headers)
? 寫入響應體(HTML/JSON)
? 重定向或轉發

常用方法

方法說明
void setStatus(200)設置 HTTP 狀態碼(如 404、500)
void setContentType("text/html")設置響應內容類型(如 application/json
PrintWriter getWriter()獲取輸出流,向客戶端發送文本(HTML/JSON)
void sendRedirect("/new-url")重定向到新地址(302 跳轉)
void addCookie(Cookie cookie)向客戶端添加 Cookie
void setHeader("Cache-Control", "no-cache")設置響應頭

代碼示例

@GetMapping("/hello")
public void sayHello(HttpServletResponse response) throws IOException {response.setContentType("text/html");response.getWriter().write("<h1>Hello World!</h1>");
}@GetMapping("/redirect")
public void redirect(HttpServletResponse response) throws IOException {response.sendRedirect("https://example.com"); // 重定向
}

3. HttpSession(會話對象)

作用

用于在 多次 HTTP 請求間存儲用戶數據(如登錄狀態、購物車信息)。
基于 Cookie(JSESSIONID)URL 重寫 實現會話跟蹤。

常用方法

方法說明
void setAttribute("key", value)存儲會話數據
Object getAttribute("key")獲取會話數據
void removeAttribute("key")刪除會話數據
void invalidate()銷毀當前會話(用戶注銷)
String getId()獲取會話 ID
long getCreationTime()獲取會話創建時間

代碼示例

// 登錄時存儲用戶信息
@PostMapping("/login")
public String login(HttpServletRequest request, @RequestParam String username) {HttpSession session = request.getSession(); // 獲取或創建Sessionsession.setAttribute("user", username); // 存儲用戶信息return "Login success!";
}// 獲取會話數據
@GetMapping("/profile")
public String profile(HttpSession session) {String user = (String) session.getAttribute("user"); // 獲取用戶信息return "Current user: " + user;
}// 注銷
@GetMapping("/logout")
public String logout(HttpSession session) {session.invalidate(); // 銷毀會話return "Logged out!";
}

4. 三者的關系

  1. 請求流程
    ? 瀏覽器發送請求 → HttpServletRequest 接收數據。
    ? 服務器處理請求 → 使用 HttpSession 存儲用戶狀態。
    ? 服務器返回響應 → HttpServletResponse 輸出結果。

  2. 典型場景
    ? 登錄認證:通過 Session 保存用戶登錄狀態。
    ? 表單提交:通過 Request 獲取參數,通過 Response 返回結果。
    ? 權限控制:檢查 Session 中是否存在用戶信息。


5. 在 Spring MVC 中的簡化用法

Spring 提供了更簡潔的替代方式(底層仍依賴這三個對象):

(1) 直接注入

@GetMapping("/example")
public String example(@RequestParam String param,   // 替代 request.getParameter()@CookieValue String cookie,   // 替代 request.getCookies()HttpSession session           // 直接注入 Session
) {session.setAttribute("key", "value");return "OK";
}

(2) 使用 @ModelAttribute 綁定對象

@PostMapping("/user")
public String addUser(@ModelAttribute User user) {// 自動將請求參數綁定到 User 對象return "Saved: " + user.getName();
}

6. 總結

對象作用典型用途
HttpServletRequest封裝客戶端請求獲取參數、請求頭、客戶端信息
HttpServletResponse封裝服務器響應設置狀態碼、返回數據、重定向
HttpSession跨請求存儲用戶數據登錄狀態、購物車、用戶偏好

掌握這三個對象是 Java Web 開發的基礎,無論是傳統 Servlet 還是 Spring MVC 都離不開它們! 🚀

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

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

相關文章

Markdown使用說明

以下是Markdown基礎使用教程及分割線展示方法&#xff1a; &#x1f4dd; Markdown基礎使用教程 1. 標題 # 一級標題 ## 二級標題 ### 三級標題2. 文本樣式 *斜體* 或 _斜體_ **加粗** 或 __加粗__ ***加粗斜體*** 或 ___加粗斜體___ ~~刪除線~~3. 列表 - 無序列表項 * 另一…

Jmeter的壓測使用

Jmeter基礎功能回顧 一、創建Jmeter腳本 1、錄制新建 &#xff08;1&#xff09;適用群體&#xff1a;初學者 2、手動創建 &#xff08;1&#xff09;需要了解Jmeter的常用組件 元件&#xff1a;多個類似功能組件的容器&#xff08;類似于類&#xff09; 各元件作用 組件…

【rabbitmq基礎】

RabbitMq基礎 1.概念2.數據隔離3.使用控制臺向mq傳遞消息1.創建兩個隊列-“測試隊列”&#xff0c;“測試隊列2”2.創建一個交換機-"測試交換機"3.測試發送消息3.1讓交換機和隊列進行綁定3.2發送消息3.3查看消息 4.創建虛擬主機5.java使用rabbitmq5.1 發送消息5.2 消…

加固計算機廠家 | 工業加固筆記本電腦廠家

北京魯成偉業科技發展有限公司&#xff08;以下簡稱“魯成偉業”&#xff09;成立于2005年&#xff0c;是集研發、生產、銷售與服務于一體的高新技術企業&#xff0c;專注于加固計算機、工業加固筆記本電腦及特種計算機的研發與制造。憑借20年的技術積累與行業深耕&#xff0c;…

鏈路聚合配置命令

技術信息 加入捆綁組&#xff0c;加大鏈路間帶寬等 配置命令 華三 靜態聚合 將接口加入聚合口后再進行配置 //創建靜態鏈路聚合口1&#xff0c;不啟用lacp[SWB]interface Bridge-Aggregation 1 [SWB-Bridge-Aggregation1]port link-type trunk [SWB-Bridge-Aggregation…

ekf-imu --- 四元數乘法符號 ? 的含義

? 表示四元數的乘法運算&#xff1a; 用于組合兩個四元數代表的旋轉。四元數乘法是非交換的&#xff08;即順序不同結果不同&#xff09;&#xff0c;其定義如下&#xff1a; 若兩個四元數分別為&#xff1a; qq0q1iq2jq3k, pp0p1ip2jp3k, 則它們的乘積為&#xff1a;4*1 …

論文閱讀Diffusion Autoencoders: Toward a Meaningful and Decodable Representation

原文框架圖&#xff1a; 官方代碼&#xff1a; https://github.com/phizaz/diffae/blob/master/interpolate.ipynb 主要想記錄一下模型的推理過程 &#xff1a; %load_ext autoreload %autoreload 2 from templates import * device cuda:1 conf ffhq256_autoenc() # pri…

OpenVLA-OFT——微調VLA的三大關鍵設計:并行解碼、動作分塊、連續動作表示以及L1回歸目標

前言 25年3.26日&#xff0c;這是一個值得紀念的日子&#xff0c;這一天&#xff0c;我司「七月在線」的定位正式升級為了&#xff1a;具身智能的場景落地與定制開發商 &#xff0c;后續則從定制開發 逐步過渡到 標準產品化 比如25年q2起&#xff0c;在定制開發之外&#xff0…

【論文閱讀】Dynamic Adversarial Patch for Evading Object Detection Models

一、介紹 這篇文章主要是針對目標檢測框架的攻擊&#xff0c;不同于現有的攻擊方法&#xff0c;該論文主要的側重點是考慮視角的變化問題&#xff0c;通過在車上布置多個顯示器&#xff0c;利用視角動態選擇哪一個顯示器播放攻擊內容&#xff0c;通過這種方法達到隱蔽與攻擊的…

多模態技術概述(一)

1.1 多模態技術簡介 1.1.1 什么是多模態 多模態(Multimodal)涉及多種不同類型數據或信號的處理和融合&#xff0c;每種數據類型或信號被稱為一種模態。常見的模態包括文本、圖像、音頻、視頻等。多模態技術旨在同時利用這些不同模態的數據&#xff0c;以實現更全面、更準確的理…

nginx2

Nginx反向代理(七層代理)、Nginx的TCP/UDP調度器(四層代理)、 一、Nginx反向代理(七層代理) 步驟&#xff1a; ? 部署后端web服務器集群 ? 配置Nginx代理服務器 ? 配置upstream集群池 ? 調節集群池權重比 <img src"/home/student/Deskt…

調用kimi api

官網支持python&#xff0c;curl和node.js 因為服務器剛好有php環境&#xff0c;所以先用curl調個普通的語音溝通api <?php // 定義 API Key 和請求地址 define(MOONSHOT_API_KEY, sk-PXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXgk1); define(MOONSHOT_API_URL, https://…

關于 UPDATE 語句 和 SELECT ... FOR UPDATE 的對比分析,包括語法、功能、鎖機制、使用場景及示例代碼

以下是關于 UPDATE 語句 和 SELECT ... FOR UPDATE 的對比分析&#xff0c;包括語法、功能、鎖機制、使用場景及示例代碼&#xff1a; 1. UPDATE 語句 功能 直接修改數據&#xff1a;立即更新表中的數據&#xff0c;并提交修改。無顯式鎖&#xff1a;雖然會自動加鎖&#xff…

在航電系統中提高可靠性的嵌入式軟件設計

1.總線余度設計 數據傳輸采用雙余度總線設計&#xff0c;CANFD為主&#xff0c;RS485為備。發送方將相同的數據分別通過雙總線來發送&#xff0c;接收方優先處理主線數據。由于總線上數據頻率固定&#xff0c;可設置定時器監控主總線的數據&#xff0c;當定時器超時后&#xff…

第十五屆藍橋杯大賽軟件賽省賽Python 大學 C 組:5.回文數組

題目1 回文數組 小藍在無聊時隨機生成了一個長度為 n 的整數數組&#xff0c;數組中的第 i 個數為 ai&#xff0c;他覺得隨機生成的數組不太美觀&#xff0c;想把它變成回文數組&#xff0c;也是就對于任意 i∈[1,n] 滿足 a i a n ? i 1 a_ia_{n?i}1 ai?an?i?1。 小藍…

netty中的WorkerGroup使用詳解

Netty中WorkerGroup的深度解析 WorkerGroup是Netty線程模型中的從Reactor線程組&#xff0c;負責處理已建立連接的I/O讀寫、編解碼及業務邏輯執行。其設計基于主從多Reactor模型&#xff0c;與BossGroup分工協作&#xff0c;共同實現高并發網絡通信的高效處理。 一、WorkerGro…

模運算核心性質與算法應用:從數學原理到編程實踐

目錄 &#x1f680;前言&#x1f31f;數學性質&#xff1a;模運算的理論基石&#x1f4af;基本定義&#xff1a;余數的本質&#x1f4af;四則運算規則&#xff1a;保持同余性的關鍵 &#x1f99c;編程實踐&#xff1a;模運算的工程化技巧&#x1f4af;避免數值溢出&#xff1a;…

#Git 變基(Rebase)案例

適合學習理解的 Git 變基&#xff08;Rebase&#xff09;案例 為了幫助你更好地理解 Git 變基&#xff08;Rebase&#xff09;的操作和效果&#xff0c;下面通過一個簡單的案例來演示變基的過程和影響。 案例背景 假設我們有一個 Git 倉庫&#xff0c;包含兩個分支&#xff1…

泰博云平臺solr接口存在SSRF漏洞

免責聲明&#xff1a;本號提供的網絡安全信息僅供參考&#xff0c;不構成專業建議。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權&#xff0c;請及時與我聯系&#xff0c;我將盡快處理并刪除相關內容。 漏洞描述 SSRF漏洞是一種在未能獲取服務器…

MyBatis 動態SQL 詳解!

目錄 一、 什么是動態 SQL&#xff1f;二、 為什么需要動態 SQL&#xff1f;三、 MyBatis 動態 SQL 標簽四、 標簽詳解及示例1、 if 標簽2、 choose、when、otherwise 標簽3、 where 標簽4、 set 標簽5、 foreach 標簽6、 sql、include 標簽 五、 總結 &#x1f31f;我的其他文…