Servlet學習(五)——通過response設置響應體及中文亂碼問題
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設置響應體及中文亂碼問題