1. 程式人生 > >JavaEE之HttpServletResponse

JavaEE之HttpServletResponse

依次 doget tin 變化 eth writer tomcat服務 response 同時

HttpServletResponse概述

我們在創建Servlet時會覆蓋service()方法,或doGet()/doPost(),這些方法都有兩個參數,一個為代表請求的request和代表響應response。

service方法中的response的類型是ServletResponse,而doGet/doPost方法的response的類型是HttpServletResponse,HttpServletResponse是ServletResponse的子接口,功能和方法更加強大。

response的運行流程

技術分享圖片

通過抓包工具抓取Http響應

技術分享圖片

因為response代表響應,所以我們可以通過該對象分別設置Http響應的響應行,響應頭和響應體

通過response設置響應行

設置響應行的狀態碼

setStatus(int sc)

通過response設置響應頭

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)

其中,add表示添加,而set表示設置

重定向需要:1.狀態碼:302

2.響應頭:location 代表重定向地址

依次請求訪問服務器兩次,地址欄會發生變化

通過response設置響應體

響應體設置文本

PrintWriter getWriter()

獲得字符流,通過字符流的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響應返回給瀏覽器。

案例-完成文件下載

文件下載的實質就是文件拷貝,將文件從服務器端拷貝到瀏覽器端。所以文件下載需 要IO技術將服務器端的文件使用InputStream讀取到,在使用 ServletOutputStream寫到response緩沖區中

代碼如下:

技術分享圖片

上述代碼可以將圖片從服務器端傳輸到瀏覽器,但瀏覽器直接解析圖片顯示在頁面上, 而不是提供下載,我們需要設置兩個響應頭,告知瀏覽器文件的類型和文件的打開方 式。

1)告知瀏覽器文件的類型:response.setContentType(文件的MIME類型);

2)告示瀏覽器文件的打開方式是下載:

response.setHeader("Content-Disposition","attachment;filename=文件名稱");

代碼如下:

技術分享圖片

但是,如果下載中文文件,頁面在下載時會出現中文亂碼或不能顯示文件名的情況, 原因是不同的瀏覽器默認對下載文件的編碼方式不同,ie是UTF-8編碼方式,而火狐 瀏覽器是Base64編碼方式。所裏這裏需要解決瀏覽器兼容性問題,解決瀏覽器兼容 性問題的首要任務是要辨別訪問者是ie還是火狐(其他),通過Http請求體中的一 個屬性可以辨別

技術分享圖片

技術分享圖片

response細節點:

  1. response獲得的流不需要手動關閉,web容器(tomcat容器)會幫助我們關閉,
  2. getWriter和getOutputStream不能同時調用
  3. 重定向語句一般作為終結代碼

JavaEE之HttpServletResponse