Servlet学习(五)——通过response设置响应体及中文乱码问题

时间:2023-03-09 06:53:07
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");

图解原因:

Servlet学习(五)——通过response设置响应体及中文乱码问题

具体代码:

Servlet学习(五)——通过response设置响应体及中文乱码问题

在实际开发中,通常使用封装后的response.setContentType("text/html;charset=UTF-8");

以上就可以解决页面输出中文乱码问题。

2、响应体设置字节

ServletOutputStream out=response.getOutputStream();

获得字节流,通过该字节流的write(byte[] bytes)可以向response缓冲区中写入字节,再由Tomcat服务器将字节内容组成Http响应返回给浏览器。

案例:页面输出图片a.jpg

 package com.itheima.context;

 import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream; import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class ByteServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//使用response获得字节输出流
ServletOutputStream out=response.getOutputStream();
//获得服务器上的图片
String realPath=this.getServletContext().getRealPath("a.jpg");
InputStream in=new FileInputStream(realPath); int len=0;
byte[] buffer=new byte[1024];
while((len=in.read(buffer))>0){
out.write(buffer,0,len);
} in.close();
out.close();
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}

运行程序,客户端页面显示图片a