JSP程序設計之輸入/輸出對象 — response對象

response對象

      • 1.概述
      • 2.實例:response對象方法運用
        • (1)實例一:頁面自動刷新
        • (2)實例二:實現頁面重定向,具體的代碼
        • (3)綜合實例:實現登錄并記錄用戶名

1.概述

response對象主要用于對客戶端的請求進行回應,將Web服務器處理后的結果發回給客戶端。它封裝了 JSP 產生的響應,并發送到客戶端以響應客戶端的請求,請求的數據可以是各種數據類型,甚至是文件。

response 對象屬于 HttpServletResponse 接口的實例,HttpServletResponse接口的定義格式與HttpServletRequest 接口的定義格式非常類似,都只有一個父接口 ServletResponse 和一個子接口HttpServletResponse。response 對象也提供了很多方法,例如設置文件頭信息、設定頁面重定向以及設置緩沖區信息等,方法名及功能如下所示。

方法名功能介紹
void addCookie (Cookie c)添加一個 cookie 對象,用來保存客戶端用戶信息,例如一些網站或企業應用系統,登錄時提供一個 “是否記住用戶名” 的選項,可以通過 cookie 實現
void setHeader(String name,String value)設置頭信息:response.setHeader (“頭信息內容”" 頭信息參數 "); 常用的刷新 refresh,例如:response.setHeader (“refresh”,“1”); 幾秒后跳轉:response.setHeader (“refresh”,“2;URL=XXX”)
void sendRedirect(String url)設置頁面重定向
void flushBuffer()強制將緩沖區的內容輸出到客戶端
void setBufferSize()設置緩沖區的大小
void reset()清除緩沖區的內容,同時清除狀態碼和報頭
int getBufferSize()獲取響應所使用的緩沖區的實際大小,如果沒有使用緩沖區,則返回為 0
boolean isCommitted()檢測服務器端是否已經把數據寫入客戶端

2.實例:response對象方法運用

(1)實例一:頁面自動刷新
<%@ page language="java" import="java.util.Date" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><%// 獲取當前應用的基礎路徑String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%><base href="<%=basePath%>"><title>response方法實現頁面定時刷新</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">
</head><body>
<h3>當前系統時間(每秒自動刷新):</h3>
<%// 創建當前時間對象Date currentTime = new Date();// 輸出本地化的時間字符串(包含日期和時間)out.println(currentTime.toLocaleString());// 核心方法:設置響應頭refresh,實現1秒自動刷新// 第一個參數是響應頭名稱"refresh",第二個參數是刷新間隔(秒)response.setHeader("refresh", "1");
%>
</body>
</html>

運行結果如下:

在這里插入圖片描述

(2)實例二:實現頁面重定向,具體的代碼

responseDemo02.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><% // 計算當前應用的基礎路徑String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%><base href="<%=basePath%>"><title>response方法實現重定向</title></head><body><%/** 頁面重定向核心代碼* 工作原理:服務器向客戶端發送302狀態碼和新的URL* 客戶端收到后會自動請求新的URL,地址欄會顯示新頁面的地址* 注意:重定向是客戶端行為,會產生兩次請求*/response.sendRedirect("responseDemo02_01.jsp");// 注意:sendRedirect之后的代碼可能不會執行,建議放在頁面邏輯最后%></body>
</html>

responseDemo02_01.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><% // 計算當前應用的基礎路徑String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%><base href="<%=basePath%>"><title>頁面重定向目標頁面</title></head><body><h3>重定向成功!</h3><p>Hello!!</p><p>頁面發生了變化,已經重定向到新的頁面......</p><p>當前頁面路徑:responseDemo02_01.jsp</p></body>
</html>

運行結果如下:

在這里插入圖片描述

(3)綜合實例:實現登錄并記錄用戶名

在某網站的登錄頁面登錄時如果選擇“記住用戶名”,登錄成功后會跳轉至一個中間頁面(頁面代碼將登錄的用戶名密碼存在cookie中),中間頁面中存在一個超鏈接,單擊超鏈接可以鏈接到第三個頁面查看response方法保存到cookie中的數據信息。如果不選擇“記住用戶名”,則中間頁面會將cookie值刪除,再單擊超鏈接則無法顯示登錄的用戶名和密碼。

login.jsp

<%@ page language="java" import="java.util.*,javax.servlet.http.Cookie" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><% // 計算應用基礎路徑String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%><base href="<%=basePath%>"><title>平臺 - 登錄</title></head><body background="images/bk.jpg"><%// 初始化用戶名和密碼變量String username = "";String password = "";// 獲取客戶端發送的所有CookieCookie[] cookies = request.getCookies();if (cookies != null && cookies.length > 0) {// 遍歷Cookie查找保存的用戶名和密碼for (Cookie cookie : cookies) {if (cookie.getName().equals("username")) {username = cookie.getValue();}if (cookie.getName().equals("password")) {password = cookie.getValue();}// 將Cookie回寫到響應中,維持Cookie有效期response.addCookie(cookie);}}%><!-- 登錄表單,提交到cookieSave.jsp處理 --><form action="ch4/response/cookieSave.jsp" method="post"><h1 style="text-align: center;">登錄平臺</h1><table border="1" align="center"><tr><td>用戶名:</td><td><input type="text" name="username" value="<%=username%>"></td></tr><tr><td>密碼:</td><td><input type="password" name="password" value="<%=password%>"></td></tr><tr><td colspan="2"><input type="checkbox" name="flag">&nbsp;記住用戶名</td></tr><tr align="center"><td colspan="2"><input type="submit" value=" 登 錄 "></td></tr></table></form></body>
</html>

cookieSave.jsp

<%@ page language="java" import="java.util.*,javax.servlet.http.Cookie" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><% String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%><base href="<%=basePath%>"><title>處理登錄信息</title></head><body><%// 設置請求編碼,防止中文亂碼request.setCharacterEncoding("UTF-8");// 獲取表單提交的用戶名和密碼String username = request.getParameter("username");String password = request.getParameter("password");// 獲取"記住用戶名"復選框狀態String[] flag = request.getParameterValues("flag");if (flag != null && flag.length > 0) {// 選中了"記住用戶名",創建并保存CookieCookie cookie1 = new Cookie("username", username);Cookie cookie2 = new Cookie("password", password);// 設置Cookie有效期為1天(單位:秒)cookie1.setMaxAge(1 * 24 * 60 * 60);cookie2.setMaxAge(1 * 24 * 60 * 60);// 將Cookie添加到響應中,發送給客戶端response.addCookie(cookie1);response.addCookie(cookie2);} else {// 未選中"記住用戶名",刪除已有的CookieCookie[] cookies = request.getCookies();if (cookies != null && cookies.length > 0) {for (Cookie cookie : cookies) {// 找到存儲用戶名和密碼的Cookie,設置有效期為0(立即刪除)if (cookie.getName().equals("username")) {cookie.setMaxAge(0);}if (cookie.getName().equals("password")) {cookie.setMaxAge(0);}// 將修改后的Cookie回寫到客戶端response.addCookie(cookie);}}}%><!-- 超鏈接到查詢頁面查看Cookie信息 --><a href="ch4/response/cookieQuery.jsp">查看是否保存了用戶名信息</a></body>
</html>

cookieQuery.jsp

<%@ page language="java" import="java.util.*,javax.servlet.http.Cookie" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><% String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%><base href="<%=basePath%>"><title>用戶信息查詢</title></head><body bgcolor="#A2B5CD"><%request.setCharacterEncoding("UTF-8");// 初始化變量String username = "";String password = "";// 獲取客戶端發送的CookieCookie[] cookies = request.getCookies();if (cookies != null && cookies.length > 0) {for (Cookie cookie : cookies) {// 提取用戶名和密碼if (cookie.getName().equals("username")) {username = cookie.getValue();}if (cookie.getName().equals("password")) {password = cookie.getValue();}// 維持Cookie有效期response.addCookie(cookie);}}%><!-- 顯示Cookie中保存的信息 --><h2>用戶名為:<%=username %></h2><h2>密碼為:<%=password %></h2></body>
</html>

運行結果如下:

在這里插入圖片描述

選中“記住用戶名”,單擊“登錄”按鈕后,跳轉至中間頁面,處理是否記住用戶名信息。

在這里插入圖片描述

單擊“查看是否保存了用戶名信息”超鏈接,頁面再次進行跳轉。

在這里插入圖片描述

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

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

相關文章

Redis 事件驅動框架(ae.c_ae.h)深度解析

Redis 事件驅動框架&#xff08;ae.c/ae.h&#xff09;深度解析 之前咱們用 “超市收銀員” 的例子&#xff0c;簡單看懂了 ae 模塊是 Redis 的 “多任務神器”。現在咱們再往深走一層&#xff0c;不用復雜代碼&#xff0c;只拆它的 “核心運作邏輯”—— 搞懂它怎么做到 “一個…

[能源化工] 面向鋰電池RUL預測的開源項目全景速覽

鋰離子電池是新能源汽車、儲能系統及便攜式電子設備的核心能源部件&#xff0c;其剩余使用壽命&#xff08;Remaining Useful Life&#xff0c;RUL&#xff09;的準確預測直接關系到設備運行安全、維護成本優化和能源效率提升。RUL預測算法能夠提前量化電池剩余可用時間&#x…

PEFT QLora Deepspeed Zero Stage 3 Offload Trainning

使用 accelerate deepspeed zero stage 3 offload 進行 sft trainning 的自動設備映射: GPU 訓練計算 CPU 存儲 run_peft_qlora_deepspeed_stage3.sh #!/bin/bashexport MAX_JOBS4 export OMP_NUM_THREADS4 export disable_exllamaTrue export CUDA_VISIBLE_DEVICES0,1 expor…

JAVA上門家政維修服務系統源碼微信小程序+微信公眾號+APP+H5

一、功能介紹用戶端&#xff1a;精準分類、支持家政、維修、萬能服務、一口價、報價、線上、各類家政服務、優惠專區、師傅入駐、商家入駐、我的需求、補費明細、我的投訴&#xff1b;師傅端&#xff1a;接單池、消息通知、接單管理、今日訂單、師傅入駐、我的錢包、實名認證&a…

GCKontrol對嵌入式設備FPGA設計流程的高效優化

1 前言FPGA&#xff08;Field-Programmable Gate Array&#xff0c;現場可編程邏輯門陣列&#xff09;是一種可編程的半導體器件&#xff0c;因其硬件可重構性、硬件并行計算能力、低延遲和實時性的優勢&#xff0c;廣泛應用于數字電路設計、原型驗證和系統加速等領域。但開發…

DBAPI免費版對比apiSQL免費版

DBAPI簡介 零代碼開發api服務&#xff0c;只需編寫sql&#xff0c;就可以生成http api服務。支持api動態創建&#xff0c;兼容多種數據庫。 適用于BI報表、數據可視化大屏的后端接口快速開發。 旨在為企業數據服務的發布提供完整解決方案 一、DBAPI免費版本支持1個數據源連接支…

CTFHub SSRF通關筆記8:數字IP Bypass 原理詳解與滲透實戰

目錄 一、SSRF 二、數字IP原理 1、IP多進制 &#xff08;1&#xff09;十進制整數格式 (Dword / 長整數格式) &#xff08;2&#xff09;八進制格式 (Octal IP) &#xff08;3&#xff09;十六進制格式 (Hex IP) 2、SSRF繞過 三、滲透實戰 1、打開靶場 2、嘗試127.0.…

C++中雙引號和單引號的區別(全面分析)

我在刷算法題的時候經常遇到&#xff0c;用了 出現警告或者使用" "直接報錯&#xff0c;尤其是在字符串部分&#xff08;py玩家后遺癥/(ㄒoㄒ)/~~&#xff09;在詳細了解后總結一下加強記憶。 總的來說在 C 中&#xff0c;雙引號 "" 和單引號 是完全不同…

Ubuntu20.04仿真 |iris四旋翼添加云臺相機詳述

申明&#xff1a; 1、本人使用的是Ubuntu20.04ros1gazeboxtdronepx4的仿真組合 2、為了使傳感器模型和飛機模型解耦合&#xff0c;實現不同平臺對傳感器可直接調用&#xff0c;本系列博文涉及的所有傳感器均不直接添加在相應平臺的sdf當中&#xff0c;而是通過編寫xxx_joint.…

《人工智能AI之機器學習基石》系列 第 16 篇:關聯規則與數據挖掘——“啤酒與尿布”傳奇背后的增長秘密

《人工智能AI之機器學習基石》? 專欄核心理念: 用通俗語言講清楚機器學習的核心原理,強調“洞察+ 技術理解 + 應用連接”,構建一個完整的、富有啟發性的知識體系。 引言:藏在購物車里的“讀心術” 朋友們,歡迎回到我們的AI基石之旅。 在過去的兩次探索中,我們深入…

Spring Boot 的自動配置原理

Spring Boot 的自動配置是其 "約定大于配置" 理念的核心實現&#xff0c;它能自動配置 Spring 應用所需的各種組件&#xff0c;大幅減少手動配置。下面從核心注解、加載流程、條件過濾等方面詳細講解其原理&#xff0c;并結合關鍵源碼說明。一、自動配置的入口&#…

谷歌云平臺(Google Cloud Platform, GCP)介紹(全球領先的云計算服務平臺,為企業和開發者提供包括計算、存儲、數據分析、人工智能、機器學習、網絡和安全等在內的全面云服務)

文章目錄**1. GCP的核心優勢****1.1 全球領先的基礎設施****1.2 強大的數據分析和人工智能能力****1.3 卓越的安全性和合規性****1.4 靈活的定價模式****2. GCP的主要服務****2.1 計算服務****2.2 存儲和數據庫****2.3 網絡服務****2.4 人工智能與大數據****2.5 安全與管理工具…

RISC-V異常機制和異常定位

不少人在調試RISC-V core時&#xff0c;面對異常的出現不知所措&#xff0c;不知道如何定位代碼問題。這里將從RISC-V異常機制以及幾個異常實例學習下。 1 異常機制 1.1 什么是異常 異常是軟件程序員不得不要深入了解的&#xff0c;首先在學習異常機制前&#xff0c;對異常要…

c++中導出函數調用約定為__stdcall類型函數并指定導出函數名稱

開發環境在Visual studio 2022版本下&#xff0c;為防止編譯器重命名函數名稱&#xff08;會加上8等等亂七八糟的東西&#xff09;&#xff0c;我們對函數名稱進行指定&#xff1a;一、新建.def文件&#xff0c;名稱須與dll名稱相同&#xff0c;并放在與cpp文件相同文件夾下&am…

Vision Transformer (ViT) :Transformer在computer vision領域的應用(二)

METHOD,論文主要部分 In model design we follow the original Transformer (Vaswani et al., 2017) as closely as possible. An advantage of this intentionally simple setup is that scalable NLP Transformer architectures – and their efficient implementations –…

AI 論文周報丨紅隊測試語言模型/多視角 3D 點追蹤方法/蛋白質表示學習框架/密碼學漏洞檢測新框架……

近年來&#xff0c;已有若干方法嘗試從單目視頻實現 3D 點跟蹤&#xff0c;然而由于在遮擋和復雜運動等挑戰性場景中難以準確估計 3D 信息&#xff0c;這些方法的性能仍難以滿足實際應用對高精度與魯棒性的要求。 基于此&#xff0c;蘇黎世聯邦理工學院、卡內基梅隆大學聯合提出…

STM32 通過USB的Mass Storage Class讀寫掛載的SD卡出現卡死問題

問題描述&#xff1a;使用stm32cubemx生成的sdio和usb Mass Storage Class的代碼后&#xff0c;在USB_DEVICE\App\usbd_storage_if.c文件里面的接口調用以下函數出現卡死問題&#xff1a; SD_Driver.disk_initialize(0); SD_Driver.disk_read(lun, buf, blk_addr, blk_len) SD_…

Go語言中 error 接口與自定義錯誤類型的深入解析

在 Go 語言開發中&#xff0c;我們經常需要處理各種錯誤情況。Go 語言通過 error 接口提供了一套簡潔而強大的錯誤處理機制。然而&#xff0c;當涉及到自定義錯誤類型時&#xff0c;許多開發者會遇到一些令人困惑的問題。本文將通過一個實際案例來深入探討這個問題。 問題背景 …

字幕編輯工具推薦,Subtitle Edit v4.0.13發布:增強語音識別+優化翻譯功能

大家好呀&#xff0c;不知道大家有沒有做自媒體相關工作的呢&#xff0c;你們是不是也覺得剪輯視頻時最頭疼的往往不是畫面而是字幕&#xff0c;時間軸對不上、格式不兼容、需要手動翻譯&#xff0c;這些瑣碎工作消耗的精力甚至超過剪輯本身。 當你試遍各種在線工具卻發現要么…

【Java后端】Spring Boot 集成雪花算法唯一 ID

Spring Boot 實現基于雪花算法的分布式唯一 ID 生成器在分布式系統中&#xff0c;我們經常需要生成 全局唯一 ID&#xff0c;比如用戶 ID、訂單號、消息 ID 等。常見的方式有&#xff1a;數據庫自增主鍵、UUID、Redis/Zookeeper 分布式 ID 服務、百度 UidGenerator、美團 Leaf …