響應概述、response的運行流程、設置響應頭、行、體、重定向、案例-完成文件下載


一、HttpServletResponse

1.HttpServletResponse(響應)概述

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

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

2.response的運行流程

 

 

請求只能獲取, 響應可以配置。響應會有一個緩沖區。

 

 

 

 

 

 

 

 

 1.通過抓包工具抓取Http

 

 

3.通過response設置響應行

設置響應行的狀態碼

setStatus(int sc)

 

利用設置302狀態碼跳轉頁面

 

 

 

 

4.重定向

請求服務器兩次,地址欄變化。

 




 

Location在下面的設置響應頭有講解

        

 

1.通過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 代表重定向地址

 


設置自動跳轉頁面

 


這個和剛才的Location一樣,也是用的setHeader方法

 

 

1.通過response設置響應體

(1)響應體設置文本

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

 

(2)響應頭設置字節

ServletOutputStream  getOutputStream()

獲得字節流,通過該字節流的write(byte[] bytes)可以向response緩沖區中寫入字     節,在由Tomcat服務器將字節內容組成Http響應返回給瀏覽器。

 

(3)解決響應體中文亂碼問題

 

 

 


5.案例-完成文件下載

 

在網頁配置里寫

 


 


運行代碼

 

 

 


 

這就完成了,但是這個樣子如果還是不行那就是瀏覽器的問題了,不同瀏覽器編碼不一樣,所以得獲取請求里面的請求頭看看是哪一個瀏覽器版本,然后在解決。

 

解決亂碼方法如下(不要記憶--了解):

//獲取User-Agent獲取客戶端瀏覽器到底是哪個瀏覽器

String agent=request.getHeader("User-Agent");

String filenameEncoder=“”;

if (agent.contains("MSIE")) {

                   // IE瀏覽器

                   filenameEncoder= URLEncoder.encode(filename, "utf-8");

                   filenameEncoder= filenameEncoder.replace("+", " ");

} else if (agent.contains("Firefox")) {

                   // 火狐瀏覽器

BASE64Encoder base64Encoder = new BASE64Encoder();

                   filenameEncoder= "=?utf-8?B?"

                                     + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";

} else {

                   // 其它瀏覽器

                   filenameEncoder= URLEncoder.encode(filename, "utf-8");                               

}

 

其中agent就是請求頭User-Agent的值

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM