1)HttpServletResponse 概述
我們在創建 Servlet 時會覆蓋 service() 方法,或 doGet()/doPost(),這些方法都有兩個參數,分別是代表請求的 request 和代表響應 response。(今天我們主要來說說 response)
service 方法中的 response 的類型是 ServletResponse,而 doGet/doPost 方法的 response 的類型是 HttpServletResponse,HttpServletResponse 是ServletResponse 的子接口,功能和方法更加強大,所以今天我們來學習的就是 HttpServletResponse。
2)response 的運行流程
當我們通過頁面請求 web 應用的時候,Tomcat 就會創建一個 request 對象,和一個 response 對象一起傳進 Servlet 中,然后 Tomcat 會把response 緩沖區中的內容取出來 包裝成一個 http 響應返回頁面~
因為 response 代表響應,所以我們可以通過該對象分別設置 Http 響應的響應行,響應頭和響應體
3)通過response設置響應行
常用的狀態碼如下:
200 :請求成功。
302 :請求重定向。
304 :請求資源沒有改變,訪問本地緩存。
404 :請求資源不存在。
500 :服務器內部錯誤。
通過setStatus(int sc)方法可以設置響應行的狀態碼。
4)通過 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表示設置(會替換掉先前的內容)
5)重定向
重定向的意思:重新選擇路徑的過程就是一個重定向的過程。
下面用代碼來演示一下:
首先設置狀態碼302,然后設置頁面的路徑~
這樣在我們訪問 Servlet1 的時候,頁面就會跳轉到 Servlet2 。
這個就是重定向了~我們也可以把 Servlet1 中的兩句代碼簡化成為一行
6)通過 response 設置響應體 響應體設置文本 PrintWriter getWriter() 獲得字符流,通過字符流的 write(String s) 方法可以將字符串設置到 response 緩沖區中,隨后 Tomcat 會將 response 緩沖區中的內容組裝成 Http 響應返回給瀏覽器端。 關於設置中文的亂碼問題 response 緩沖區的默認編碼是 iso8859-1,此碼表中沒有中文,可以通過setCharacterEncoding(String charset)設置 response 的編碼。但是這樣客戶端還是不能正常顯示文字。 因為瀏覽器的默認編碼是本地系統的編碼,因為我們都是中文系統,所以客戶端瀏覽器的默認編碼是 GBK。 我們可以通過 response 的setContentType(String type)方法指定頁面解析時的編碼是UTF-8。 因為該方法含有setCharacterEncoding的功能,所以在實際開發中只要編寫 response.setContentType("text/html;charset=UTF-8");就可以解決頁面輸出中文亂碼問題了。