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