Http響應Response詳解
1. HttpServletResponse概述:
在建立Servlet時會覆蓋service()方法,或doGet()/doPost(),這些方法都有兩個引數,一個為代表請求的request和代表響應response。service方法中的response的型別是ServletResponse,而doGet/doPost方法的response的型別是HttpServletResponse,HttpServletResponse是ServletResponse的子介面,功能和方法更加強大。
2. response的執行流程
3. 通過抓包工具抓取http響應
4. http響應頭資訊詳解
類似於請求訊息中的請求頭,其格式和請求頭資訊格式一樣,即響應頭:響應頭值。
1). Server :該響應頭是伺服器告訴瀏覽器,當前響應的服務型別和版本。
2). Content-Type響應頭:伺服器告訴瀏覽器響應內容是什麼型別,以及採用的是什麼字元編碼。該響應頭的值現在為:text/html;charset=utf-8。說明響應資訊的型別是文字型別中的html,使用的字元編碼是utf-8。
3). Content-Length響應頭:伺服器告訴瀏覽器,Content-Length響應頭表明了響應實體的大小,該響應內容的長度現在是312個位元組。
4). Date響應頭:表示是伺服器是在什麼時候響應回瀏覽器,注意這裡的時間是按照美國時間來計算。
5). Accept-Ranges: bytes - 該響應頭表明伺服器支援Range請求,以及伺服器所支援的單位是位元組(這也是唯一可用的單位).我們還能知道:伺服器支援斷點續傳,以及支援同時下載檔案的多個部分,也就是說下載工具可以利用範圍請求加速下載該檔案.Accept-Ranges: none
6). Last-Modified:伺服器上檔案的最後修改時間
5 . 設定response內容
response 代表響應, 可以通過該物件分別設定Http響應: 響應行 響應頭 響應體
1) 通過response設定響應行:
設定響應的狀態碼: setStatus(int sc)
2) 通過response設定響應頭
(其中,add表示新增,而set表示設定)
addHeader(String name, String value)
addIntHeader(String name, int value)
addDateHeader(String name, long date)
setHeader(String name, String value)
setDateHeader(String name, long date)
setIntHeader(String name, int value)
3) 通過response設定響應體
響應體設定文字
獲得字元流,通過字元流的write(
String s)
方法可以將字串設定到response 緩衝區中,隨後Tomcat會將response緩衝區中的 內容組裝成Http響應返回給瀏覽 器端。
關於設定中文的亂碼問題
原因:response緩衝區的預設編碼是iso8859-1,此碼錶中沒有中文,可以通過 response的setCharacterEncoding(
String charset)
設定response的編碼
但我發現客戶端還是不能正常顯示文字
原因:我們將response緩衝區的編碼設定成UTF-8,但瀏覽器的預設編碼是本地系 統的編碼,因為我們都是中文系統,所以客戶端瀏覽器的預設編碼是GBK,我們可以 手動修改瀏覽器的編碼是UTF-8。
還可以在程式碼中指定瀏覽器解析頁面的編碼方式,
通過response的setContentType(
String type)
方法指定頁面解析時的編碼是UTF-8
response.setContentType("text/html;charset=UTF-8");
上面的程式碼不僅可以指定瀏覽器解析頁面時的編碼,同時也內含 setCharacterEncoding的功能,所以在實際開發中只要編寫 response.setContentType("text/html;charset=UTF-8");就可以解決頁面輸出中文亂碼問題。
響應頭設定位元組
ServletOutputStream
getOutputStream()
獲得位元組流,通過該位元組流的write(byte[] bytes)可以向response緩衝區中寫入字 節,在由Tomcat伺服器將位元組內容組成Http響應返回給瀏覽器。