天天看點

Response

Response響應過程

  • 在發送一個請求時,會找到​

    ​tomcat​

    ​ 引擎
  • 引擎會找到對應的​

    ​web​

    ​ 應用
  • 并且會建立​

    ​request​

    ​​ 對象和​

    ​response​

    ​ 對象
  • 找到應用後,會執行應用的​

    ​web.xml​

    ​​ 再去根據​

    ​url-patten​

    ​​ 的内容建立​

    ​Servlet​

    ​ 對象
  • 并且會調用​

    ​Servlet​

    ​​ 對象的​

    ​Service​

    ​​ 方法,并且把建立的​

    ​request​

    ​​ 對象和​

    ​response​

    ​ 對象傳入到方法當中
  • 拿到​

    ​response​

    ​ 對象後,自己可以往響應當中寫入一些自己給用戶端的内容
  • 通過​

    ​response.getwrite().wirte("寫的内容")​

    ​ 的方式進行寫入
  • 寫的内容,是存到一個​

    ​response​

    ​ 緩沖區當中
  • 當方法執行結束之後,​

    ​tomcat​

    ​​ 就會從​

    ​response​

    ​ 緩沖區當中取出存儲的資料
  • 取出你存儲的資料同時,它自己還會自動的往裡面添加一些伺服器相關的資訊進去
  • 是以響應給浏覽器時,可以看到除了自己寫的内容,還會有一些伺服器相關的資訊

流程圖

Response

學習Response

  • 學習如何通過​

    ​response​

    ​ 設定響應行,響應頭,響應體即可

設定響應行

response.setStatus(200);      
Response

設定響應頭

  • ​add​

    ​ 代表添加新的内容
方法名 作用
addHeader(String name,String value) 添加字元串請求頭
addIntHeader(String name,int value) 添加數字請求頭
addDateHeader(String name,date) 添加日期請求頭
response.addHeader("name", "BNTang");      
response.addIntHeader("age", 23);      
response.addDateHeader("birthDay",new Date().getTime());
      
Response
Response
  • set 代表設定,更改已經存在的内容
方法名 作用
setHeader(String name,String value) 設定字元串請求頭
setIntHeader(String name,int value) 設定數字請求頭
setDateHeader(String name,Date value) 設定日期請求頭
response.setHeader("name", "BNTang");      
response.setIntHeader("age", 23);      
response.setDateHeader("birthDay",new Date().getTime());      
Response
  • 添加兩個相同的​

    ​name​

Response

重定向

  • 什麼是重定向:到伺服器當中去找​

    ​Servlet1​

  • ​Servlet1​

    ​​ 當中沒有這個資源,告訴你去找​

    ​Servlet2​

  • 再去發送一個請求到​

    ​Servlet2​

重定向的狀态碼

  • 重定向的狀态碼是:302

重定向的特點

  • 要通路兩次伺服器
  • 第一次通路是人為的去通路
  • 第二次是自動的通路
  • 浏覽器位址欄會發生變化

設定重定向

  • 設定響應碼
response.setStatus(302);      
  • 設定響應頭
response.setHeader("location", "/bntang/servlet2");      
Response

封裝的重寫向

  • 每次都要設定狀态碼,和​

    ​location​

    ​ 比較麻煩
  • 内部提供了一個封裝好了的一個方法
response.sendRedirect("/bntang/servlet2");      
Response

定時重新整理重定向

response.setHeader("refresh", "5;url=https://www.cnblogs.com/BNTang/");      
  • 5:代表​

    ​5秒​

  • url 的值為 5秒後要去跳轉的位址
Response

設定響應體

通過write的方式來寫

  • 格式如下:
response.getwrite().wirte(“要寫的内容”)      
  • 預設情況下寫的中文内容會亂碼
  • 把寫的内容存到緩存區中使用的是​

    ​ISO8859-1​

    ​ 的編碼的方式進行存儲的
  • ​ISO8859-1​

    ​ 不支援中文,是以會亂碼
  • 在存之前可以設定存放的編碼,如下:
response.setCharacterEncoding("UTF-8");      
Response
  • 告知浏覽器使用的是​

    ​utf-8​

    ​ 編碼的方式,如下:
response.setHeader("Content-Type", "text/html;charset=UTF-8");      
Response
  • 設定寫出的内容如下:
response.getWriter().write("小灰灰");      
Response
  • 上面的代碼隻需要寫第二句就行,tomcat 看到設定了為​

    ​utf-8​

    ​ 的編碼
  • 它在存資料的時候也會使用​

    ​utf-8​

    ​ 的編碼
  • 使用封裝的寫法,如下:
response.setContentType("text/html;charset=UTF-8");      
Response
  • 測試的方式就行自己啟動伺服器在浏覽器當中請求​

    ​Servlet​

    ​ 即可驗證

通過OutPutStream的方式來寫

FileInputSteam

方法名 作用
read 讀取一個位元組
read(byte[] b) 一次讀取多個位元組,并存放到數組 b 中
  • ​read​

    ​:讀取一個位元組,讀取的結果是一個 int 類型的 assic 碼
  • 讀取到檔案結尾的時候,傳回的是一個​

    ​-1​

    ​,讀取方式如下:
FileInputStream fileInputStream = new FileInputStream("BNTang.txt");      
System.out.println(fileInputStream.read());      
Response
  • ​read(byte[] b)​

    ​:上面是一次一滴一滴給你,這種是一次裝一桶水再給你,傳回的是讀取了幾個位元組
byte[] bytes = new byte[10];      
int count = fileInputStream.read(bytes);      
System.out.println(Arrays.toString(bytes));      
Response
  • 讀取全部的資料,代碼如下:
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    FileInputStream fileInputStream = new FileInputStream("BNTang.txt");
    byte[] bytes = new byte[5];

    int len = 0;
    while ((len = fileInputStream.read(bytes)) > 0) {
        System.out.println(new String(bytes, 0, len));
    }

    fileInputStream.close();
}      
Response
  • 之前讀的代碼也記得需要關閉流,釋放資源

FileOutputSteam

  • 一下的方法是進行寫出用的我這裡就不示範了,同上
方法名 作用
write() 一次性寫一個字元
write(buffer) 一次性寫多個字元
write(buffer,0,len) 一次性寫指定個數的字元
  • ​response​

    ​ 注意點
  • ​getWrite()​

    ​​ 和​

    ​getOutputSteam​

    ​ 不能同時調用

繼續閱讀