日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

JavaWeb学习总结(六)—HttpServletResponse

發布時間:2025/3/21 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaWeb学习总结(六)—HttpServletResponse 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Response概述:

? response是Servlet.service方法的一個參數,類型為javax.servlet.http.HttpServletResponse。在客戶端發出每個請求時,服務器都會創建一個response對象,并傳入給Servlet.service()方法。response對象是用來對客戶端進行響應的,這說明在service()方法中使response對象可以完成對客戶端的響應工作。

response對象的功能分為以下四種:

  • 設置響應頭信息;

  • 發送狀態碼;
  •     > sendError(int sc) --> 發送錯誤狀態碼,例如404、500
        > sendError(int sc, String msg) --> 也是發送錯誤狀態碼,還可以帶一個錯誤信息!
        > setStatus(int sc) --> 發送成功的狀態碼,可以用來發送302

    ???? 3. 設置響應正文;

    ???? 4. 重定向;

    具體應用:

    1.重定向

    package zy.servlet;import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class Aservlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {/** 設置location響應頭 ,實現請求重定向*///response.setHeader("Location","/JavaWeb/Bservlet");//設置服務器的響應狀態碼//response.setStatus(302);//快捷的重定向方式
         //response.sendRedirect(""http://www.baidu.com"");response.sendRedirect("/JavaWeb/Bservlet");
         }}

    ?

    抓包可以看見:

    ?

    ? 服務器返回一個302狀態碼告訴瀏覽器,你要的資源我沒有,但是我通過Location響應頭告訴你哪里有,而瀏覽器解析響應頭Location后知道要跳轉到/JavaWeb/Bservlet頁面,所以就會自動跳轉到Bservlet。

    ?

    2.設置refresh響應頭,讓瀏覽器定時刷新

    package zy.servlet;import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** 設置location響應頭 ,實現請求重定向*/ public class Cservlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");response.getWriter().print("5s中后將跳轉到百度主頁");/** 設置refresh響應頭,讓瀏覽器每隔3秒定時刷新* response.setHeader("refresh", "3");*///設置refresh響應頭,讓瀏覽器3秒后跳轉到http://www.baidu.comresponse.setHeader("Refresh","5;URL=http://www.baidu.com"); /** 5秒跳轉到Csevletresponse.setHeader("Refresh","5;URL=/JavaWeb/Cservlet");*/} }

    訪問Cservlet,5秒將會跳轉

    ?

    ?

    3.禁用瀏覽器緩存

    ?? 開發項目的時候瀏覽器的緩存會很討厭,這時我們可以禁用它,可以參考indexjsp.

    package zy.servlet;import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** 禁用瀏覽器緩存*/ public class Dservlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {/** 這三個響應頭的設置可以禁用所有瀏覽器的緩存*/response.setHeader("cache-control","no-cache");response.setHeader("pragma","no-cache");response.setDateHeader("expires",-1);response.getWriter().print("hello world");} }

    訪問:

    ?

    4.設置頁面緩存

    ?對于不經常變化的數據,在servlet中可以為其設置合理的緩存時間值,以避免瀏覽器頻繁向服務器發送請求,提升服務器的性能。例如:

    package zy.servlet;import java.io.IOException;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class Eservlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String data = "helloworld";/*** 設置數據合理的緩存時間值,以避免瀏覽器頻繁向服務器發送請求,提升服務器的性能* 這里是將數據的緩存時間設置為1天*/response.setDateHeader("expires",System.currentTimeMillis() + 24 * 3600 * 1000);response.getOutputStream().write(data.getBytes());}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}}

    訪問頁面,并查看響應頭:

    ?

    有8個小時的時差。

    另外也可以在“C:\Users\zydev\AppData\Local\Microsoft\Windows\Temporary Internet Files”找到該文件,注意要打開隱藏文件夾選項才看得見。

    ?

    Response的響應正文

    response是響應對象,向客戶端輸出響應正文(響應體)可以使用response的響應流,repsonse一共提供了兩個響應流對象:

    1. PrintWriter out = response.getWriter():獲取字符流;

    2. ServletOutputStream out = response.getOutputStream():獲取字節流

    OutputStream流是字節流,可以處理任意類型的數據,而PrintWriter流是字符流,只能處理字符數據,如果用字符流處理字節數據,會導致數據丟失。

    ?

    A. 相應圖片字節流

    ?

    package zy.servlet;import java.io.FileInputStream; import java.io.IOException;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.apache.commons.io.IOUtils; /** 演示響應字節數據*/ public class Fservlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String path = "D:/demo.jpg";FileInputStream in = new FileInputStream(path);//讀取輸入流的字節到字節數組中,IOUtis是Apache提供的一個工具jar包byte[] bytes = IOUtils.toByteArray(in);response.getOutputStream().write(bytes);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}}

    訪問結果:

    ?

    B. 下載圖片

    package com.web.study;import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /*** 文件下載*/ public class Bresponse extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {downloadFileByOutputStream(response);//下載文件,通過OutputStream流}/*** 下載文件,通過OutputStream流* @param response* @throws FileNotFoundException* @throws IOException*/private void downloadFileByOutputStream(HttpServletResponse response)throws FileNotFoundException, IOException {//1.獲取要下載的文件的絕對路徑String realPath = this.getServletContext().getRealPath("/download/demo.jpg");//2.獲取要下載的文件名String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);//3.設置content-disposition響應頭控制瀏覽器以下載的形式打開文件response.setHeader("content-disposition", "attachment;filename="+fileName);//4.獲取要下載的文件輸入流InputStream in = new FileInputStream(realPath);int len = 0;//5.創建數據緩沖區byte[] buffer = new byte[1024];//6.通過response對象獲取OutputStream流OutputStream out = response.getOutputStream();//7.將FileInputStream流寫入到buffer緩沖區while ((len = in.read(buffer)) > 0) {//8.使用OutputStream將緩沖區的數據輸出到客戶端瀏覽器out.write(buffer,0,len);}in.close();}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);} }

    訪問:

    如果文件名是中文的:設置content-disposition響應頭控制瀏覽器以下載的形式打開文件,中文文件名要使用URLEncoder.encode方法進行編碼,否則會出現文件名亂碼

    ?response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(fileName, "UTF-8"));

    轉載于:https://www.cnblogs.com/zxtceq/p/8532547.html

    總結

    以上是生活随笔為你收集整理的JavaWeb学习总结(六)—HttpServletResponse的全部內容,希望文章能夠幫你解決所遇到的問題。

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