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不能同時調用,重定向語句一般作為終結代碼。
