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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM