1. 程式人生 > >Servlet學習(五)——通過response設置響應體及中文亂碼問題

Servlet學習(五)——通過response設置響應體及中文亂碼問題

clas rac fileinput etc throws n) htm tom type

1、響應體設置文本

PrintWriter writer=response.getWriter();

獲得字符流,通過字符流的write(String s)方法可以將字符串設置到response 緩沖區中,隨後Tomcat會將response緩沖區中的內容組裝成Http響應返回給瀏覽器端。

關於設置中文亂碼問題:

response緩沖區的默認編碼是iso8859-1,此碼表中沒有中文,可以通過response的setCharacterEncoding(String charset)設置response的編碼;

但我們發現客戶端還是不能正常顯示文字

原因:我們將response緩沖區的編碼設置成UTF-8,但瀏覽器的默認編碼是本地系統的編碼,因為我們都是中文系統,所以客戶端瀏覽器的默認編碼是GBK,

1)我們可以手動修改瀏覽器的編碼是UTF-8

2)我們還可以在代碼中指定瀏覽器解析頁面的編碼方式,通過response的setContentType(String type)方法指定頁面解析時的編碼是UTF-8,response.setContentType("text/html;charset=UTF-8");

圖解原因:

技術分享

具體代碼:

技術分享

在實際開發中,通常使用封裝後的response.setContentType("text/html;charset=UTF-8");

以上就可以解決頁面輸出中文亂碼問題。

2、響應體設置字節

ServletOutputStream out=response.getOutputStream();

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

案例:頁面輸出圖片a.jpg

 1 package com.itheima.context;
 2 
 3 import java.io.FileInputStream;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 
 7 import javax.servlet.ServletException;
 8 import javax.servlet.ServletOutputStream;
9 import javax.servlet.http.HttpServlet; 10 import javax.servlet.http.HttpServletRequest; 11 import javax.servlet.http.HttpServletResponse; 12 13 public class ByteServlet extends HttpServlet { 14 15 public void doGet(HttpServletRequest request, HttpServletResponse response) 16 throws ServletException, IOException { 17 //使用response獲得字節輸出流 18 ServletOutputStream out=response.getOutputStream(); 19 //獲得服務器上的圖片 20 String realPath=this.getServletContext().getRealPath("a.jpg"); 21 InputStream in=new FileInputStream(realPath); 22 23 int len=0; 24 byte[] buffer=new byte[1024]; 25 while((len=in.read(buffer))>0){ 26 out.write(buffer,0,len); 27 } 28 29 in.close(); 30 out.close(); 31 } 32 33 public void doPost(HttpServletRequest request, HttpServletResponse response) 34 throws ServletException, IOException { 35 doGet(request, response); 36 } 37 }

運行程序,客戶端頁面顯示圖片a

Servlet學習(五)——通過response設置響應體及中文亂碼問題