JavaWeb-servlet6中request和response的使用

HttpServletRequest

HttpServletRequest 繼承自 ServletRequest。客戶端瀏覽器發出的請求被封裝成為一個 HttpServletRequest對象。
對象包含了客戶端請求信息包括請求的地址,請求的參數,提交的數據,上傳的文件客戶端的ip甚至客戶端操作系統都包含在其內。

獲得客戶機信息
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String requestUrl = request.getRequestURL().toString();// 得到請求的URL地址String requestUri = request.getRequestURI();// 得到請求的資源String queryString = request.getQueryString();// 得到請求的URL地址中附帶的參數String remoteAddr = request.getRemoteAddr();// 得到來訪者的IP地址int remotePort = request.getRemotePort(); // 得到來訪者的端口String method = request.getMethod();// 得到請求URL地址時使用的http方式String localAddr = request.getLocalAddr();// 獲取WEB服務器的IP地址String localName = request.getLocalName();// 獲取WEB服務器的主機名response.setCharacterEncoding("UTF-8");// 設置將字符以"UTF-8"編碼輸出到客戶端瀏覽器// 通過設置響應頭控制瀏覽器以UTF-8的編碼顯示數據,如果不加這句話,那么瀏覽器顯示的將是亂碼response.setHeader("content-type", "text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.write("獲取到的客戶機信息如下:");out.write("<hr/>");out.write("請求的URL地址:" + requestUrl + "<br/>");out.write("請求的資源:" + requestUri + "<br/>");out.write("請求的URL地址中附帶的參數:" + queryString + "<br/>");out.write("來訪者的IP地址:" + remoteAddr + "<br/>");out.write("使用的端口號:" + remotePort + "<br/>");out.write("使用的http方式:" + method + "<br/>");out.write("localAddr:" + localAddr + "<br/>");out.write("localName:" + localName + "<br/>");out.close();}
獲得客戶機請求頭
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setCharacterEncoding("UTF-8");// 設置將字符以"UTF-8"編碼輸出到客戶端瀏覽器// 通過設置響應頭控制瀏覽器以UTF-8的編碼顯示數據response.setHeader("content-type", "text/html;charset=UTF-8");PrintWriter out = response.getWriter();Enumeration<String> reqHeadInfos = request.getHeaderNames();// 獲取所有的請求頭out.write("獲取到的客戶端所有的請求頭信息如下:");out.write("<hr/>");while (reqHeadInfos.hasMoreElements()) {String headName = (String) reqHeadInfos.nextElement();// 根據請求頭的名字獲取對應的請求頭的值String headValue = request.getHeader(headName);out.write(headName + ":" + headValue);out.write("<br/>");}out.write("<br/>");out.write("獲取到的客戶端Accept-Encoding請求頭的值:");out.write("<hr/>");String value = request.getHeader("Accept-Encoding");// 獲取Accept-Encoding請求頭對應的值out.write(value);Enumeration<String> e = request.getHeaders("Accept-Encoding");while (e.hasMoreElements()) {String string = (String) e.nextElement();System.out.println(string);}}
使用 getParameter() 和 getParameterValues() 接收表單參數
@WebServlet(name = "save", urlPatterns = "/save")
public class FormServlet extends HttpServlet {@Overridepublic void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 客戶端是以UTF-8編碼提交表單數據的,所以需要設置服務器端以UTF-8的編碼進行接收,否則對于中文數據就會產生亂碼request.setCharacterEncoding("UTF-8");String username = request.getParameter("username");String password = request.getParameter("password");String[] insts = request.getParameterValues("inst");String instStr = Arrays.toString(insts);String htmlStr = "<p>用戶名:" + username + "</p>"+ "<p>密碼:" + password + "</p>"+ "<p>愛好:" + instStr + "</p>";// 設置服務器端以UTF-8編碼輸出數據到客戶端response.setCharacterEncoding("UTF-8");// 設置客戶端瀏覽器以UTF-8編碼解析數據response.setContentType("text/html;charset=UTF-8");// 輸出htmlStr里面的內容到客戶端瀏覽器顯示response.getWriter().write(htmlStr);}
}
request中文參數亂碼

以POST方式提交表單中文參數的亂碼問題
客戶端是以UTF-8編碼傳輸數據到服務器端的,所以需要設置服務器端以UTF-8的編碼進行接收,否則對于中文數據就會產生亂碼。具體如下:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{request.setCharacterEncoding(UTF-8); //解決post提交服務端亂碼String userName = request.getParameter("userName");}

以GET方式提交表單中文參數的亂碼問題
對于以get方式傳輸的數據,request即使設置了以指定的編碼接收數據也是無效的,默認的還是使用ISO8859-1這個字符編碼來接收數據

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{String name = request.getParameter("name");//接收數據name =new String(name.getBytes(), "UTF-8") ;
}
HttpServletResponse

HttpServletResponse 接口繼承自 ServletResponse 接口,主要用于封裝 HTTP 響應消息。由于 HTTP 響應消息分為狀態行、響應消息頭、消息體三部分。因此,在 HttpServletResponse 接口中定義了向客戶端發送響應狀態碼、響應消息頭、響應消息體的方法。

Response主要的作用有以下幾點:
負責向客戶端(瀏覽器)發送數據
負責向客戶端(瀏覽器)發送響應頭
負責向客戶端(瀏覽器)發送響應狀態碼
封裝響應狀態碼的常量

使用OutputStream流向客戶端瀏覽器輸出"中國"這兩個漢字
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String data = "中國";// 獲取OutputStream輸出流OutputStream outputStream = response.getOutputStream();// 通過設置響應頭控制瀏覽器以UTF-8的編碼顯示數據,如果不加這句話,那么瀏覽器顯示的將是亂碼response.setHeader("content-type", "text/html;charset=UTF-8");// 將字符轉換成字節數組,指定以UTF-8編碼進行轉換byte[] array = data.getBytes("UTF-8");// 使用OutputStream流向客戶端輸出字節數組outputStream.write(array);}
使用PrintWriter流向客戶端瀏覽器輸出"中國"這兩個漢字
@Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String data = "中國";response.setCharacterEncoding("UTF-8");// 設置將字符以"UTF-8"編碼輸出到客戶端瀏覽器PrintWriter out = response.getWriter();// 獲取PrintWriter輸出流out.write(data);// 使用PrintWriter流向客戶端輸出字符out.close();}
ServletContext對象

ServletContext 又叫做 Servlet 上下文。

當Web服務器啟動時,容器會為每一個Web應用程序創建一塊共享的存儲區域。ServletContext也叫做“公共區域”,也就是同一個WEB應用程序中,所有的Servlet和JSP都可以共享同一個區域。

ServletContext在WEB服務器啟動時創建,服務器關閉時銷毀。

Servlet對象中維護了 ServletContext 對象的引用,開發人員在編寫servlet時,可以通過this.getServletContext() 方法獲得 ServletContext 對象。

由于一個 Web 應用中的所有 Servlet 共享同一個 ServletContext 對象,因此 Servlet 對象之間可以通過ServletContext 對象來實現通訊。ServletContext 對象通常也被稱之為 context 域對象。

ServletContext 數據共享

創建兩個servlet類Servlet1.java和Servlet2.java。Servlet1將數據存儲到ServletContext對象中,Servlet2從ServletContext對象中取出數據,從而實現數據共享。

@WebServlet(name = "servlet1", urlPatterns = "/servlet1")
public class Servlet1 extends HttpServlet {@Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {String company = "isoftstone";ServletContext context = this.getServletConfig().getServletContext();// 獲得ServletContext對象context.setAttribute("company", company); // 將data存儲到ServletContext對象中}
}
@WebServlet(name = "servlet2", urlPatterns = "/servlet2")
public class Servlet2 extends HttpServlet {@Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {ServletContext context = this.getServletContext();String company = (String) context.getAttribute("company");// 從ServletContext對象中取出數據response.getWriter().print("company = " + company);}
}
ServletContext 初始化參數

1、在web.xml中加入初始化參數:

<context-param><param-name>url</param-name><param-value>jdbc:mysql://localhost:3306/test</param-value>
</context-param>

2、在Servlet類中調用該參數:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {ServletContext context = this.getServletContext();// 獲取整個web站點的初始化參數String contextInitParam = context.getInitParameter("url");response.getWriter().print(contextInitParam);
}

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

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

相關文章

機器學習(吳恩達)

一, 機器學習 機器學習定義: 計算機能夠在沒有明確的編程情況下學習 特征: 特征是描述樣本的屬性或變量&#xff0c;是模型用來學習和預測的基礎。如: 房屋面積, 地理位置 標簽: 監督學習中需要預測的目標變量&#xff0c;是模型的輸出目標。如: 房屋價格 樣本: 如: {面積100㎡…

CNN的激活函數

我們來對比 Sigmoid、Softmax 和 ReLU 這三種激活函數的相同點和不同點&#xff0c;并分別說明它們相較于其他兩種激活函數的優點。 相同點 都是非線性激活函數&#xff1a; 這三種激活函數都能為神經網絡引入非線性特性&#xff0c;使網絡能夠學習復雜的模式。 廣泛應用于深度…

Oracle數據恢復:閃回查詢

Oracle數據恢復:閃回查詢 SQL語法閃回查詢:AS OF閃回版本查詢:VERSIONS BETWEEN數據恢復示例閃回查詢最佳實踐應用場景使用限制注意事項最佳實踐在誤刪除業務數據時,Oracle數據庫通常支持以下幾種數據恢復途徑。 閃回查詢(Flashback Query):閃回查詢通過查詢系統的UNDO數…

【MySQL篇】MySQL內置函數

目錄 1&#xff0c;日期函數 2&#xff0c;字符串函數 3&#xff0c;數學函數 4&#xff0c;其他函數 實戰OJ 1&#xff0c;日期函數 日期類型在之前文章【數據類型】中有描述 傳送門&#xff1a;【MySQL篇】數據類型_mysql 數據類型-CSDN博客 函數名稱描述current_dat…

蘋果iOS 18.4將強制升級HomeKit架構,舊版設備或無法使用

在科技飛速發展的當下,智能家居領域也在不斷革新。而蘋果公司作為科技行業的巨頭,其每一次動作都備受關注。近日,有消息稱蘋果計劃在iOS 18.4版本中停止對舊版HomeKit架構的支持,這一舉措意味著用戶將被迫升級,也可能對眾多使用Apple Home應用的智能家居設備用戶產生深遠影…

故障診斷——neo4j入門

文章目錄 neo4jQuickStartDemo neo4j QuickStart 詳情可見博客&#xff1a;https://www.cnblogs.com/nhdlb/p/18703804&#xff0c;使用docker拉取最近的一個版本進行創建 docker run -it -d -p 7474:7474 -p 7687:7687 \ -v /disk5/neo4j_docker/data:/data \ -v /disk5/ne…

《蒼穹外賣》SpringBoot后端開發項目核心知識點與常見問題整理(DAY1 to DAY3)

目錄 一、在本地部署并啟動Nginx服務1. 解壓Nginx壓縮包2. 啟動Nginx服務3. 驗證Nginx是否啟動成功&#xff1a; 二、導入接口文檔1. 黑馬程序員提供的YApi平臺2. YApi Pro平臺3. 推薦工具&#xff1a;Apifox 三、Swagger1. 常用注解1.1 Api與ApiModel1.2 ApiModelProperty與Ap…

大模型安全新范式:DeepSeek一體機內容安全衛士發布

2月以來&#xff0c;DeepSeek一體機幾乎成為了政企市場AI消費的最強熱點。 通過一體機的方式能夠縮短大模型部署周期&#xff0c;深度結合業務場景&#xff0c;降低中小企業對于大模型的使用門檻。據不完全統計&#xff0c;已約有超過60家企業基于DeepSeek推出一體機產品。 但…

OpenHarmony-SELinux配置

前言&#xff1a; OpenHarmony 上某個進程向samgr注冊SA服務&#xff0c;其他進程在與該進程進行IPC通信之前&#xff0c;需要獲取該SA服務&#xff0c;SA提供方需要為該SA配置SELinux標簽&#xff0c;否則該SA會被SELinux配置為u:object_r:default_service:s0標簽&#xff0c…

SQL開發中改善查詢性能的N種寫法

文章目錄 1. 使用 SELECT *2. 在 WHERE 子句中使用函數或計算3. 使用隱式類型轉換4. 不使用索引的列進行連接&#xff08;JOIN&#xff09;或過濾5. 使用 OR 代替 IN6. 在子查詢中使用 SELECT *7. 忽略索引統計信息8. 嵌套子查詢過多9. 過度使用 DISTINCT10. 使用不當的 JOIN 類…

第十八:go 并發 goroutine

channel 可以讓多個goroutine 之間實現通信 Add方法調用時機&#xff1a;必須在goroutine 啟動之前調用Add方法來增加計數器的值。 如果在goroutine已經啟動之后再調用Add&#xff0c;可能會導致Wait方法提前返回&#xff0c;因為計數器沒有正確反映正在運行的goroutine的數量…

數字IC后端項目典型問題(2025.03.10數字后端項目問題記錄)

小編發現今天廣大學員發過來的問題都比較好&#xff0c;立即一頓輸出分享給大家&#xff08;每天都有好多種類的數字后端問題&#xff09;。后續可能會經常通過這種方式來做分享。其實很多問題都是實際后端項目中經常遇到的典型問題。希望通過這種方式的分享能夠幫助到更多需要…

課程《Deep Learning Specialization》

在coursera上&#xff0c;Deep Learning Specialization 課程內容如下圖所示&#xff1a; Week2 assignment, Logistic Regression.

LLM推理和優化(1):基本概念介紹

一、LLM推理的核心過程&#xff1a;自回歸生成 LLM&#xff08;如DeepSeek、ChatGPT、LLaMA系列等&#xff09;的推理本質是自回歸生成&#xff1a;從初始輸入&#xff08;如[CLS]或用戶prompt&#xff09;開始&#xff0c;逐token預測下一個詞&#xff0c;直到生成結束符&…

【從零開始學習計算機科學】編譯原理(一)編譯過程概述

【從零開始學習計算機科學】編譯原理(一)編譯過程概述 緒論編譯過程概述詞法分析語法分析代碼優化代碼生成其他功能編譯器的前端和后端緒論 什么叫編譯程序?為什么我們需要編譯程序?編譯程序就是一個程序,將便于人編寫、閱讀、維護的高級計算機語言所寫作的源代碼程序,翻…

3-001:MySQL 中的回表是什么?

1. 什么是回表&#xff1f; 回表&#xff08;Back to Table&#xff09; 指的是 在使用非聚簇索引&#xff08;輔助索引&#xff09;查詢時&#xff0c;MySQL 需要 先通過索引找到主鍵 ID&#xff0c;然后再回到主鍵索引&#xff08;聚簇索引&#xff09;查詢完整數據&#xf…

【AIGC】計算機視覺-YOLO系列家族

YOLO系列家族 &#xff08;1&#xff09;YOLO發展史&#xff08;2&#xff09; YOLOX&#xff08;3&#xff09; YOLOv6&#xff08;4&#xff09; YOLOv7&#xff08;5&#xff09; YOLOv8&#xff08;6&#xff09; YOLOv9&#xff08;7&#xff09;YOLOv10&#xff08;8&…

基于Python懂車帝汽車數據分析平臺(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 時代在飛速進步&#xff0c;每個行業都在努力發展現在先進技術&#xff0c;通過這些先進的技術來提高自己的水平和優勢&#xff0c;汽車數據分析平臺當然不能排除在外。本次我所開發的懂車帝汽車數據分析平臺是在實際應用和軟件工程的開發原理之上&#xff0c;運用Python…

Prompt 工程

一、提示原則 import openai import os import openai from dotenv import load_dotenv, find_dotenv from openai import OpenAI def get_openai_key():_ load_dotenv(find_dotenv())return os.environ[OPENAI_API_KEY]client OpenAI(api_keyget_openai_key(), # This is …

MySQL -- 數據庫基礎

1、基礎登錄操作 mysql 指定選項 選項&#xff1a; <1> -h 指定ip地址&#xff0c;即連接的主機&#xff0c;不帶時&#xff0c;默認連本機 <2> -P 指定的端口號&#xff0c;指定默認端口號&#xff08;配置文件中進行配置&#xff09; <3>-u 指定的用戶 &l…