字節(jié)流可以寫任何數(shù)據(jù),字符流只能寫字符數(shù)據(jù)
getOutputStream字節(jié)流,getWriter字符流
1、response的outputStream輸出中文問題?
程序以什么碼表輸出了,程序就一定要控制瀏覽器以什么編碼打開:
response.setHeader("Content-type","text/html;charset=UTF-8");
String data = "中國";
OutputStream out = response.getOutputStream();
out.write(data.getBytes("UTF-8");
也可用html技術(shù)中<meta>標簽模擬一個Http響應頭來控制模擬器的行為:
String data = "中國";
OutputStream out = response.getOutputStream();
out.write("<meta http-equiv='content-type'? content='text/html';charset=UTF-8'>".getBytes());
out.write(data.getBytes("UTF-8");
2、response常見應用
1)向客戶端輸出中文數(shù)據(jù)
A.分別以OutputStream和PrintWriter輸出
B.使用HTML語言里的<meta>標簽來控制瀏覽器行為
2)文件下載和中文文件的下載
如果下載文件是中文文件,則文件需要經(jīng)過url編碼
3)輸出隨機圖片
4)發(fā)送http頭,控制瀏覽器定時刷新網(wǎng)頁(REFRESH)
5)發(fā)送http頭,控制瀏覽器禁止緩存當前文檔內(nèi)容
3.response實現(xiàn)請求重定向:response.sendRedirect("/day06/index.jsp");
等價于
response.setStatus(302);?
?response.setHeader("location", "/day06/index.jsp");
所以最好不要使用請求重定向,因為它會導致兩次服務器請求,但是平時登錄頁面,購物這種情況最好使用請求重定向,不用轉(zhuǎn)發(fā)的原因是,如果刷新會重新出來之前的頁面(例如購物車顯示頁面,刷新會不停的出來購物車顯示頁面),重定向就不會出現(xiàn)這個問題,京東使用的是轉(zhuǎn)發(fā)。
重定向特點:<1>瀏覽器會向服務器發(fā)送兩次,意味著就有2個request\response
<2>用重定向技術(shù),瀏覽器地址欄會發(fā)生變化
<3>用戶登錄和顯示購物車時,通常會用到重定向技術(shù)
4、Reponse細節(jié)問題
(1)getOutputStream和getWriter()方法分別用于得到輸出二進制數(shù)據(jù)、輸出文本數(shù)據(jù)的ServletOutputStream、Printwriter對象
(2)getOutputStream和getWriter()方法這兩個方法互斥,一次請求,調(diào)用其中任何一個方法后,不能再調(diào)用另一方法,否則會拋異常:java.lang.IllegalStateException:getOutputStream() has already bean...但是使用重定向就不會出現(xiàn)這個問題,因為是兩次response請求
(3)