Java Web 之 Request Respone

  1. response概述

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

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

設置響應頭信息;
發送狀態碼;
設置響應正文;
重定向;
2. response響應正文

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

PrintWriter out = response.getWriter():獲取字符流;
ServletOutputStream out = response.getOutputStream():獲取字節流;

當然,如果響應正文內容爲字符,那麼使用response.getWriter(),如果響應內容是字節,例如下載時,那麼可以使用response.getOutputStream()。

注意,在一個請求中,不能同時使用這兩個流!也就是說,要麼你使用repsonse.getWriter(),要麼使用response.getOutputStream(),但不能同時使用這兩個流。不然會拋出IllegalStateException異常。

  1. 字符響應流

字符編碼
在使用response.getWriter()時需要注意默認字符編碼爲ISO-8859-1,如果希望設置字符流的字符編碼爲utf-8,可以使用response.setCharaceterEncoding(“utf-8”)來設置。這樣可以保證輸出給客戶端的字符都是使用UTF-8編碼的!

但客戶端瀏覽器並不知道響應數據是什麼編碼的!如果希望通知客戶端使用UTF-8來解讀響應數據,那麼還是使用response.setContentType(“text/html;charset=utf-8”)方法比較好,因爲這個方法不僅會調用response.setCharaceterEncoding(“utf-8”),還會設置content-type響應頭,客戶端瀏覽器會使用content-type頭來解讀響應數據。

緩衝區
response.getWriter()是PrintWriter類型,所以它有緩衝區,緩衝區的默認大小爲8KB。也就是說,在響應數據沒有輸出8KB之前,數據都是存放在緩衝區中,而不會立刻發送到客戶端。當Servlet執行結束後,服務器纔會去刷新流,使緩衝區中的數據發送到客戶端。

如果希望響應數據馬上發送給客戶端:

向流中寫入大於8KB的數據;
調用response.flushBuffer()方法來手動刷新緩衝區;
4. 設置響應頭信息

  可以使用response對象的setHeader()方法來設置響應頭!使用該方法設置的響應頭最終會發送給客戶端瀏覽器!

response.setHeader(“content-type”, “text/html;charset=utf-8”):設置content-type響應頭,該頭的作用是告訴瀏覽器響應內容爲html類型,編碼爲utf-8。而且同時會設置response的字符流編碼爲utf-8,即response.setCharaceterEncoding(“utf-8”);
response.setHeader(“Refresh”,”5; URL=http://www.baidu.com“):5秒後自動跳轉到百度主頁。
5. 設置狀態碼及其他方法

response.setContentType(“text/html;charset=utf-8”):等同與調用response.setHeader(“content-type”, “text/html;charset=utf-8”);
response.setCharacterEncoding(“utf-8”):設置字符響應流的字符編碼爲utf-8;
response.setStatus(200):設置狀態碼;
response.sendError(404, “您要查找的資源不存在”):當發送錯誤狀態碼時,Tomcat會跳轉到固定的錯誤頁面去,但可以顯示錯誤信息。
6. 重定向

  1. 什麼是重定向

當你訪問http://www.sun.com時,你會發現瀏覽器地址欄中的URL會變成http://www.oracle.com/us/sun/index.htm,這就是重定向了。

重定向是服務器通知瀏覽器去訪問另一個地址,即再發出另一個請求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章