response應用及重定向和request轉發

請求和轉發:

  • response說明
  • 一、response文件下載
  • 二、response驗證碼實現
    • 1.前置知識:
    • 2.具體實現:
    • 3.知識總結
  • 三、response重定向
  • 四、request轉發
  • 五、重定向和轉發的區別


response說明

response是指HttpServletResponse,該響應有很多的應用,比如像瀏覽器輸出消息,下載文件,實現驗證碼等。
在這里插入圖片描述

一、response文件下載

1.創建一個javaweb的項目。
在這里插入圖片描述

2.實例類FileServlet的具體實現。
在這里插入圖片描述

import java.net.URLEncoder;
public class FileServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1.獲取要下載文件的路徑        realPath:絕對路徑String realPath = "E:\\Software\\IDEA\\javaweb-02-servlet\\response\\src\\main\\resources\\aa.webp";System.out.println("文件下載的路徑:" + realPath);
//        2.下載的文件名String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
//        3.設置瀏覽器能夠支持下載我們需要的東西
//        如果想讓網站能下載東西,需要搜一個下載文件的一個頭。
//        resp.setHeader("Content-disposition", "attachment;filename" + fileName);resp.setHeader("Content-disposition", "attachment;filename="+ URLEncoder.encode(fileName,"UTF-8"));
//        4.獲取下載文件的輸入流。FileInputStream fis = new FileInputStream(realPath);
//        5.創建緩沖區
//        6.獲取OutputStream對象
//        7.將FileOutputStream流寫入到緩沖區,使用OutputStream將緩沖區中的數據輸出到客戶端。ServletOutputStream oos = resp.getOutputStream();byte[] buf = new byte[1024];int len = 0;while ((len = fis.read(buf)) > 0) {oos.write(buf, 0, len);}oos.close();fis.close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

3.配置web.xml文件及tomcat服務器。
在這里插入圖片描述
在這里插入圖片描述

4.啟動服務。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

5.回顧總結

  • (5.1)思路分析:
    • 1.獲取文件輸入流
    • 2.獲取web的響應的輸出流
    • 3.將輸入流寫入到輸出流,進而發給客戶端。
  • (5.2)注意實項:
    • 1.下載文件名
 String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
 - 2.下載文件的頭
 resp.setHeader("Content-disposition", "attachment;filename" + fileName);
 - 3.相關搜索

在這里插入圖片描述

二、response驗證碼實現

1.前置知識:

下載文件需要一個響應頭,響應瀏覽器的類型是:

resp.setHeader("Content-disposition", "attachment;filename" + fileName);

而圖片驗證碼需要設置 發送到客戶端的響應的內容類型

resp.setContentType("image/jpg");
以jsp的形式發送的圖片類型。
此外,也可以是png,jepg等形式。

還需要設置每60s刷新一次:

resp.setHeader("refresh","60");

常見的內容類型:

resp.setContentType("text/html");
以html的格式響應的文本類型,即代表響應的是html頁面。

2.具體實現:

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;public class ImageServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//如何讓瀏覽器每60s自動刷新一次resp.setHeader("refresh","60");//        在內存中創建一個圖片BufferedImage image = new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB);
//        得到圖片Graphics2D g = (Graphics2D) image.getGraphics();//筆來對圖片進行操作
//        設置圖片的背景顏色。---先選定顏色,再添加一個填充的矩形。g.setColor(Color.WHITE);g.fillRect(0,0,80,20);//        給圖片寫數據g.setColor(Color.CYAN);g.setFont(new Font(null,Font.BOLD,20));g.drawString(makeNum(),0,20);//        告訴瀏覽器,這個請求用圖片的方式打開
//        setContentType  設置發送到客戶端的響應的內容類型resp.setContentType("image/jpg");
//網站存在緩存,不讓瀏覽器去緩存
//        setHeader設置響應頭
//        setDateHeader 是設置頁面緩存的,防止 JSP或者Servlet中的輸出 被瀏覽器保存在緩沖區中。resp.setDateHeader("Expires",-1);//在代理服務器端防止緩沖resp.setHeader("Cache-Control","no-cache");resp.setHeader("Pragma","no-cache");//        把圖片寫給瀏覽器ImageIO.write(image,"jpg",resp.getOutputStream());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}private String makeNum(){Random random = new Random();String num=random.nextInt(9999999)+"";StringBuffer sb = new StringBuffer();//變化的字符串。for (int i=0;i<7-num.length();i++){sb.append("0");}num=sb.toString()+num;return num;}
}

在這里插入圖片描述

3.知識總結

(1)設置瀏覽器自動刷新。
(2)清除瀏覽器緩存。
(3)將圖片寫給瀏覽器。(可以試試其他的內容,比如音樂電影什么行不行?)
(4)設置客戶端的響應內容形式為圖片。
(5)內存中創建圖片,并通過畫筆類進行操作。
(ImageIO是一個圖片類,專門寫圖片的。)
(6)生成隨機數。
畫筆是如果要寫文字,要先選定顏色,然后選定字體,文本框,在哪個位置開始寫。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

三、response重定向

如:

resp.sendRedirect("/re/img1");
即	resp.sendRedirect("/項目映射名/跳轉的頁面的映射");

在這里插入圖片描述
在這里插入圖片描述
也可以跳轉到jsp頁面。
實例代碼:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
<%--這里提交的路徑 需要尋找到項目的路徑--%>
<form action="${pageContext.request.contextPath}/login" method="get">用戶名:<input type="text" name="username">密碼:<input type="password" name="password"><input type="submit">
</form>
</body>
</html>
public class RedirectServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        redirect 重定向resp.sendRedirect("/re/img1");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

在這里插入圖片描述
在這里插入圖片描述

四、request轉發

request處理請求:
在這里插入圖片描述
HTTP請求中的所有信息被封裝到HttpServletRequest對象,通過該對象的方法,可以獲取客戶端的所有信息。
主要的獲取參數的兩種方法:
在這里插入圖片描述
實例代碼:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登錄</title>
</head>
<body>
<h1>登錄</h1>
<div style="text-align: center">
<%--以post方式提交表單,提交到我們的login請求--%><form action="${pageContext.request.contextPath}/login" method="post">用戶名:<input type="text" name="username"><br>密碼:<input type="password" name="password"><br>愛好:<input type="checkbox" name="hobbys" value="張三">張三<input type="checkbox" name="hobbys" value="李四">李四<input type="checkbox" name="hobbys" value="飛機">飛機<input type="checkbox" name="hobbys" value="蜘蛛">蜘蛛<br><input type="submit"></form>
</div>
</body>
</html>
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;/****/
public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");String username = req.getParameter("username");String password = req.getParameter("password");String[] hobbys = req.getParameterValues("hobbys");System.out.println("================");System.out.println(username+":"+password);System.out.println(Arrays.toString(hobbys));System.out.println("================");
//請求轉發 req
//       /被解析成當前項目路徑req.getRequestDispatcher("/success.jsp").forward(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

五、重定向和轉發的區別

相同點:

  • 頁面都會實現跳轉。

不同點:

  • 請求轉發的時候,url不會發生改變。
    轉發時:
 req.getRequestDispatcher("/success.jsp").forward(req,resp);
  • 重定向的時候,url地址欄會發送改變。
    重定向:
 resp.sendRedirect("/re/img1");

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

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

相關文章

JavaScript 一些少見多怪的玩意

$$() [].forEach.call($$("*"), function (a) {a.style.outline "1px solid #" (~~(Math.random() * (1 << 24))).toString(16);}); 直接復制到控制臺&#xff0c;頁面效果就是頁面中不同的HTML結構被不同顏色的框圈著。 原理&#xff1a; $$函數…

力扣面試150題 | 輪轉數組

力扣面試150題 &#xff5c; 輪轉數組 題目描述解題思路代碼實現 題目描述 189.輪轉數組 給定一個整數數組 nums&#xff0c;將數組中的元素向右輪轉 k 個位置&#xff0c;其中 k 是非負數。 示例 1: 輸入: nums [1,2,3,4,5,6,7], k 3 輸出: [5,6,7,1,2,3,4] 解釋: 向右輪…

Kafka在微服務架構中的應用:實現高效通信與數據流動

微服務架構的興起帶來了分布式系統的復雜性&#xff0c;而Kafka作為一款強大的分布式消息系統&#xff0c;為微服務之間的通信和數據流動提供了理想的解決方案。本文將深入探討Kafka在微服務架構中的應用&#xff0c;并通過豐富的示例代碼&#xff0c;幫助大家更全面地理解和應…

PaddleClas學習3——使用PPLCNet模型對車輛朝向進行識別(c++)

使用PPLCNet模型對車輛朝向進行識別 1 準備環境2 準備模型2.1 模型導出2.2 修改配置文件3 編譯3.1 使用CMake生成項目文件3.2 編譯3.3 執行3.4 添加后處理程序3.4.1 postprocess.h3.4.2 postprocess.cpp3.4.3 在cls.h中添加函數聲明3.4.4 在cls.cpp中添加函數定義3.4.5 在main.…

時間序列預測 — VMD-LSTM實現單變量多步光伏預測(Tensorflow):單變量轉為多變量

目錄 1 數據處理 1.1 導入庫文件 1.2 導入數據集 1.3 缺失值分析 2 VMD經驗模態分解 3 構造訓練數據 4 LSTM模型訓練 5 預測 1 數據處理 1.1 導入庫文件 import time import datetime import pandas as pd import numpy as np import matplotlib.pyplot as plt f…

優化算法 學習記錄

文章目錄 相關資料 優化算法梯度下降學習率牛頓法 隨機梯度下降小批量隨機梯度下降動量法動量法解決上述問題 AdaGrad 算法RMSProp算法Adam學習率調度器余弦學習率調度預熱 相關資料 李沐 動手學深度學習 優化算法 優化算法使我們能夠繼續更新模型參數&#xff0c;并使損失函…

Elasticsearch:使用 Elasticsearch 向量搜索及 RAG 來實現 Chatbot

Elasticsearch 的向量搜索為我們的語義搜索提供了可能。而在人工智能的動態格局中&#xff0c;檢索增強生成&#xff08;Retrieval Augmented Generation - RAG&#xff09;已經成為游戲規則的改變者&#xff0c;徹底改變了我們生成文本和與文本交互的方式。 RAG 使用大型語言模…

Android TextView 超出省略失效 解決方法

解決方法 我是在使用 ConstraintLayout 嵌套 LinearLayout 水平方向&#xff0c;TextView 又使用layout_weight&#xff08;權重&#xff09;情況下出現這種問題&#xff0c;最后將layout_width從 0dp 改為 1dp 得以解決。 <androidx.constraintlayout.widget.ConstraintLa…

MongoDB的刪除文檔、查詢文檔語句

本文主要介紹MongoDB的刪除文檔、查詢文檔命令語句。 目錄 MongoDB刪除文檔MongoDB查詢文檔 MongoDB刪除文檔 MongoDB是一種基于文檔的NoSQL數據庫&#xff0c;它使用BSON格式存儲文檔。刪除文檔是MongoDB數據庫中的常見操作之一。 下面是MongoDB刪除文檔的詳細介紹和示例&am…

當年為什么選擇計算機?

確切的來說不是遠的計算機&#xff0c;高考那會計算機很熱門&#xff0c;根本考不上&#xff01;學習了一個和計算機關系很密切的專業&#xff0c;編程搞得好&#xff0c;才能找到好工作&#xff0c;才能有飯吃&#xff01;記得當年我還跑去武漢大學的計算機課堂和人家一起聽課…

導入自定義模塊出現紅色波浪線,但是能正常執行

問題描述&#xff1a; 導入自己定義的模塊時&#xff0c;出現紅色波浪線&#xff0c;可以繼續執行 解決&#xff1a; 在存放當前執行文件的文件夾右鍵&#xff0c;然后將其設置為sources root即可 結果&#xff1a;

基于深度學習yolov5實現安全帽人體識別工地安全識別系統-反光衣識別系統

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 實現安全帽人體識別工地安全識別系統需要使用深度學習技術&#xff0c;特別是YOLOv5算法。下面是對基于YOLOv5實現安…

帶你真正理解web地圖切片規則

很多時候我們即使做完了項目還是對切片規則一知半解&#xff0c;只知道照著例子寫代碼&#xff0c;不理解WMTSCapabilities文件中參數的具體含義&#xff0c;也無法理解切片規則是如何產生的&#xff0c;不知道經緯度切圖和平面切圖的差別是啥&#xff0c;等等種種疑問&#xf…

Leetcode 39 組合總和

題意理解&#xff1a; 一個 無重復元素 的整數數組 candidates 和一個目標整數 target 從candidates 取數字&#xff0c;使其和 target &#xff0c;有多少種組合&#xff08;candidates 中的 同一個 數字可以 無限制重復被選取&#xff09; 這道題和之前一道組合的區別&am…

Vue學習筆記-Vue3中setup函數注意點

setup編寫示例 <script> import {reactive} from vue export default {name: "DemoVue",props:[xxx,yy,...],setup(props,context){const data reactive({......})//setup必須有返回值return {data,}} } </script>setup執行的時機 在beforeCreate()之…

【51單片機系列】74HC595實現對LED點陣的控制

本文是關于LED點陣的使用&#xff0c;使用74HC595模塊實現對LED點陣的控制。 文章目錄 一、8x8LED點陣的原理1.1 LED點陣顯示原理1.2 LED點陣內部結構圖1.3 開發板上的LED點陣原理圖1.4 74HC595芯片 二、使用74HC595模塊實現流水燈效果三、 使用74HC595模塊控制LED點陣對角線亮…

python基于DeeplabV3Plus開發構建手機屏幕表面缺陷圖像分割識別系統

Deeplab是圖像分割領域非常強大的模型&#xff0c;在前面的博文中我們也進行過很多相應項目的開發實踐&#xff0c;感興趣的話可以自行移步閱讀即可&#xff1a; 《基于DeepLabv3Plus開發構建人臉人像分割系統》 《基于DeepLabV3實踐路面、橋梁、基建裂縫裂痕分割》 《基于D…

【鏈表Linked List】力扣-203 移除鏈表元素

目錄 題目描述 解題過程 題目描述 給你一個鏈表的頭節點 head 和一個整數 val &#xff0c;請你刪除鏈表中所有滿足 Node.val val 的節點&#xff0c;并返回 新的頭節點 。 示例 1&#xff1a; 輸入&#xff1a;head [1,2,6,3,4,5,6], val 6 輸出&#xff1a;[1,2,3,4,5…

快速學會繪制Pyqt5中的所有圖(下)

Pyqt5相關文章: 快速掌握Pyqt5的三種主窗口 快速掌握Pyqt5的2種彈簧 快速掌握Pyqt5的5種布局 快速弄懂Pyqt5的5種項目視圖&#xff08;Item View&#xff09; 快速弄懂Pyqt5的4種項目部件&#xff08;Item Widget&#xff09; 快速掌握Pyqt5的6種按鈕 快速掌握Pyqt5的10種容器&…

鴻蒙原生應用開發——分布式數據對象

01、什么是分布式數據對象 在可信組網環境下&#xff0c;多個相互組網認證的設備將各自創建的對象加入同一個 sessionId&#xff0c;使得加入的多個數據對象之間可以同步數據&#xff0c;也就是說&#xff0c;當某一數據對象屬性發生變更時&#xff0c;其他數據對象會檢測到這…