response


response對象功能分為4中:

設置響應頭信息、發送狀態碼setStatus、設置響應體、重定向

response是響應對象,想客戶端輸入響應體可以使用response的響應流:

response.getWrite();獲取字符流,response.OutputStream()獲取字節流,一個請求中不能同時使用兩個流,否則會拋出IllegalArgumentException不合法的參數異常。

使用response.getWrite()時需要注意默認的編碼是ISO-8859-1編碼,使用response.setCharacterEncoding("UTF-8"),來保證輸出給客戶端是字符是UTF-8

response緩沖區的編碼設置成UTF-8,但瀏覽器的默認編碼是本地系 統的編碼,客戶端瀏覽器的默認編碼是GBK,需要動修改瀏覽器的編碼是UTF-8

通過response.setContentType("text/html;charset=UTF-8")來進行設置客戶端的瀏覽器解析編碼setContentType()同時具有setCharacterEncoding的功能,所以在實際開發中只要編寫 response.setContentType("text/html;charset=UTF-8");就可以解決頁面輸出中文亂碼問題。

response.getWriter()PrintWriter類型,所以它有緩沖區,緩沖區的默認大小為8KB。也就是說,在響應數據沒有輸出8KB之前,數據都是存放在緩沖區中,而不會立刻發送到客戶端。當Servlet執行結束后,服務器才會去刷新流,使緩沖區中的數據發送到客戶端。

如果希望響應數據馬上發送給客戶端:

 向流中寫入大於8KB的數據;

 調用response.flushBuffer()方法來手動刷新緩沖區;

響應頭

可以使用response對象的setHeader()方法來設置響應頭!使用該方法設置的響應頭最終會發送給客戶端瀏覽器

response.setHeader(“content-type”, “text/html;charset=utf-8”):設置content-type響應頭,該頭的作用是告訴瀏覽器響應內容為html類型,編碼為utf-8。而且同時會設置response的字符流編碼為utf-8,即response.setCharaceterEncoding(“utf-8”);l response.setHeader("Refresh","5; URL=http://www.baidu.com"):5秒后自動跳轉

亂碼解決方式

 

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

 

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的值

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

 


免責聲明!

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



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