3 回答

TA貢獻1893條經(jīng)驗 獲得超10個贊
1.HttpServletResponse對象
(1).Web服務(wù)器收到一個http請求,會針對每個請求創(chuàng)建一個HttpServletRequest和HttpServletResponse對象,向客戶端發(fā)送數(shù)據(jù)找HttpServletResponse,從客戶端取數(shù)據(jù)找HttpServletRequest;
(2).HttpServletResponse對象可以向客戶端發(fā)送三種類型的數(shù)據(jù):a.響應(yīng)頭b.狀態(tài)碼c.數(shù)據(jù)
(3).自己去看HttpServletResponse的API
(4).rsponse常見應(yīng)用:
a.使用OutputStream向客戶端寫入中文:
String data = "中國";
OutputStream stream = response.getOutputStream();//獲取一個向Response對象寫入數(shù)據(jù)的流,當(dāng)tomcat服務(wù)器進行響應(yīng)的時候,會將Response中的數(shù)據(jù)寫給瀏覽器
stream.write(data.getBytes("UTF-8"));
//此時在html頁面會出現(xiàn)亂碼,這是因為:服務(wù)器將"中國"按照UTF-8碼表進行編碼,得到對應(yīng)的碼值假設(shè)是98,99,服務(wù)器將碼值發(fā)送給瀏覽器。瀏覽器默認(rèn)按照GB2312進行解碼,在GB2312碼表中對應(yīng)的字符已不是"中國"
正確代碼如下:
response.setHeader("Content-type","text/html;charset=UTF-8");//向瀏覽器發(fā)送一個響應(yīng)頭,設(shè)置瀏覽器的解碼方式為UTF-8
String data = "中國";
OutputStream stream = response.getOutputStream();
stream.write(data.getBytes("UTF-8"));
b.使用Writer向客戶端寫入中文:
PrintWriter writer = response.getWriter();
writer.write("中國");//同樣會出現(xiàn)亂碼,這是因為我們將"中國"寫入response對象時,tomcat服務(wù)器為了將數(shù)據(jù)通過網(wǎng)絡(luò)傳輸給瀏覽器,必須進行編碼,由于沒有指定編碼方式,默認(rèn)采用ISO8859-1,
當(dāng)瀏覽器接收到數(shù)據(jù)后,根據(jù)GBK解碼必然出現(xiàn)亂碼
正確代碼如下:
response.setCharacterEncoding("UTF_8");//設(shè)置Response的編碼方式為UTF-8
response.setHeader("Content-type","text/html;charset=UTF-8");//向瀏覽器發(fā)送一個響應(yīng)頭,設(shè)置瀏覽器的解碼方式為UTF-8,其實設(shè)置了本句,也默認(rèn)設(shè)置了Response的編碼方式為UTF-8,但是開發(fā)中最好兩句結(jié)合起來使用
//response.setContentType("text/html;charset=UTF-8");同上句代碼作用一樣
PrintWriter writer = response.getWriter();
writer.write("中國");
c.使用Response實現(xiàn)文件下載:
String path = this.getServletContext.getRealPath(“/中國.jpg”);
String fileName = path.subString(path.lastIndexOf(“\\”));
Response.setHeader(“content-disposition”,”attachment;filename”+URLENcode r.encode(fileName,”UTF-8”));//設(shè)置響應(yīng)頭,告訴瀏覽器,該響應(yīng)是下載響應(yīng),如果文件名包含中文,必須使用URL編碼

TA貢獻1794條經(jīng)驗 獲得超7個贊
- 3 回答
- 0 關(guān)注
- 609 瀏覽
添加回答
舉報