日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Response响应方法详解

發布時間:2025/3/15 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Response响应方法详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Response:

  • 響應:服務器把請求的處理結果告知客戶端。在B/S架構中,響應就是把結果帶回瀏覽器。
  • 響應對象:在項目中用于發送響應的對象
常用狀態碼:
狀態碼說明
200執行成功
302它和307一樣,都是用于重定向的狀態碼。只是307目前已不再使用
304請求資源未改變,使用緩存。
400請求錯誤。最常見的就是請求參數有問題
404請求資源未找到
405請求方式不被支持
500服務器運行內部錯誤

狀態碼首位含義:

狀態碼說明
1xx消息
2xx成功
3xx重定向
4xx客戶端錯誤
5xx服務器錯誤
字節流響應消息&亂碼:
返回值方法名說明
ServletOutputStreamgetOutputStream()獲取響應字節輸出流對象
voidsetContentType(“text/html;charset=UTF-8”)設置響應內容類型,解決中文亂碼

演示:

@WebServlet("/ResponseDemo01") public class ResponseDemo01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// setContentType:相當于告訴瀏覽器你要使用這個編碼才能解析我的內容resp.setContentType("text/html;charset=UTF-8");// getOutputStream() 獲取響應字節輸出流對象ServletOutputStream ops = resp.getOutputStream();// 定義消息String s = "測試會不會亂碼";/**為什么有的時候沒有處理亂碼,但是瀏覽器不會亂碼getBytes:在字符串轉成字節的時候,如果沒有傳遞參數(編碼格式),它會根據系統的編碼轉換,這里的系統是電腦的,比如Windows的默認就是GBK那就會轉換成GBK格式的,如果瀏覽器也是GBK就不會亂碼,但是如果瀏覽器是其它的就會亂碼*/ops.write(s.getBytes("UTF-8"));} }
字符流響應消息:
返回值方法名說明
PrintWritergetWriter()獲取響應字符輸出流對象
voidsetContentType(“text/html;charset=UTF-8”)設置響應內容類型,解決中文亂碼

演示:

@WebServlet("/ResponseDemo02") public class ResponseDemo02 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=UTF-8");// getWriter() 獲取響應字符輸出流對象PrintWriter printWriter = resp.getWriter();String s = "我也呵呵了";printWriter.write(s);} }
響應圖片:

步驟:

  • 創建字節輸入流對象,關聯讀取的圖片路徑
  • 通過響應對象獲取字節輸出流對象
  • 循環讀取和寫出圖片
  • @WebServlet("/ResponseDemo03") public class ResponseDemo03 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 1. 創建字節輸入流對象,關聯讀取的圖片路徑BufferedInputStream bis = new BufferedInputStream(new FileInputStream("/Users/itzhuzhu/Desktop/WechatIMG27.JPG"));// 2. 通過響應對象獲取字節輸出流對象ServletOutputStream os = resp.getOutputStream();// 3. 循環讀取和寫出圖片byte[] bytes = new byte[1024];int len;while ((len = bis.read(bytes)) != -1) {os.write(bytes, 0, len);}} }
    設置緩存:

    對于不經常變化的數據,可以合理設置緩存時間,避免瀏覽器頻繁請求服務器,可以提高效率

    返回值方法名說明
    voidsetDateHeader(String name,long time)設置消息頭添加緩存

    演示:

    如果開啟了緩存是可以在電腦中找到這個緩存文件的,可以看到上次訪問時間和過期時間,到了過期時間才會訪問服務器

    @WebServlet("/ResponseDemo04") public class ResponseDemo04 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String s = "我是測試緩存內容";// 設置換緩存1小時,只有第一次請求會請求服務端,后面的請求是走的緩存resp.setDateHeader("Expires", System.currentTimeMillis() + 1 * 60 * 60 * 1000);// 設置編碼格式resp.setContentType("text/html;charset=UTF-8");// 寫出數據resp.getWriter().write(s);System.out.println("再次訪問會走我嗎");} }
    定時刷新:

    過了指定時間,頁面自動跳轉

    返回值方法名說明
    voidsetHeader(String name,String value)設置消息頭定時刷新

    演示:

    @WebServlet("/ResponseDemo05") public class ResponseDemo05 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String s = "計算機被黑客竊取,正在讀取數據,讀取完畢自動跳轉";resp.setContentType("text/html; charset=UTF-8");// 寫數據resp.getWriter().write(s);// 定時刷新resp.setHeader("Refresh", "3;URL=/regist.html");} }
    請求重定向:

    請求重定向:客戶端的一次請求到達后,發現要借助其他Servlet實現功能

    特點:

    • 瀏覽器地址會改變
    • 兩次請求
    • 請求域對象中不能共享數據
    • 可以重定向到其他服務器

    實現原理:

    • 設置響應狀態碼302
    • 設置響應的資源路徑(響應消息頭指定響應到哪里)

    重定向和請求轉發用哪一個?

    • 需要共享數據就轉發,不需要就重定向

    重定向方法:

    返回值方法名說明
    voidsendRedirect(String name)設置重定向

    演示:

    @WebServlet("/ResponseDemo06") public class ResponseDemo06 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("ResponseDemo06執行了");// 設置共享數據req.setAttribute("username","itzhuzhu");// 設置重定向resp.sendRedirect(req.getContextPath()+"/servletDemo15");} @WebServlet("/ResponseDemo07") public class ResponseDemo07 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("ResponseDemo07執行了");// 獲取共享數據,這里會丟失共享數據System.out.println(req.getAttribute("username"));}
    文件下載:
    @WebServlet("/ResponseDemo08") public class ResponseDemo08 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 1. 獲取文件路徑String realPath = getServletContext().getRealPath("/img/首頁.png");// 2. 把文件讀到字節輸入流中BufferedInputStream bis = new BufferedInputStream(new FileInputStream(realPath));// 3. 告知瀏覽器,以下載的方式打開(告知瀏覽器下載文件的MIME類型)/**Content-type:消息頭名稱,支持的類型application/octet-stream:消息頭參數,應用的類型為字節流Content-Disposition:消息頭名稱,處理的形式attachment;filename=首頁.jpg:消息頭參數,以附件的形式,指定下載文件名稱*/resp.setHeader("Content-type", "application/octet-stream");resp.setHeader("Content-Disposition", "attachment;filename=首頁.jpg");// 4. 使用響應對象的字節輸出流輸出到瀏覽器上ServletOutputStream os = resp.getOutputStream();byte[] bytes = new byte[1024];int len;while ((len = bis.read(bytes)) != -1) {os.write(bytes, 0, len);}bis.close();} }

    Response方法詳解:

    總結

    以上是生活随笔為你收集整理的Response响应方法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。