JavaWeb之Response——重定向與解決中文亂碼問題

1)HttpServletResponse 概述html

咱們在建立 Servlet 時會覆蓋 service() 方法,或 doGet()/doPost(),這些方法都有兩個參數,分別是表明請求的 request 和表明響應 response。(今天咱們主要來講說 response)web

 

service 方法中的 response 的類型是 ServletResponse,而 doGet/doPost 方法的 response 的類型是 HttpServletResponse,HttpServletResponse 是ServletResponse 的子接口,功能和方法更增強大,因此今天咱們來學習的就是 HttpServletResponse。瀏覽器

 

2)response 的運行流程緩存

當咱們經過頁面請求 web 應用的時候,Tomcat 就會建立一個 request 對象,和一個 response 對象一塊兒傳進 Servlet 中,而後 Tomcat 會把response 緩衝區中的內容取出來 包裝成一個 http 響應返回頁面~服務器

 

由於 response 表明響應,因此咱們能夠經過該對象分別設置 Http 響應的響應行,響應頭和響應體學習

 

3)經過response設置響應行編碼

經常使用的狀態碼以下:spa

200 :請求成功。htm

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 中的兩句代碼簡化成爲一行

這個是Sun公司爲咱們封裝好玩的呦~

 

 

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");就能夠解決頁面輸出中文亂碼問題了。

相關文章
相關標籤/搜索