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

Posted 会飞的咸鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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设置响应体及中文乱码问题的主要内容,如果未能解决你的问题,请参考以下文章

servlet响应解析

Servlet之Response对象

servlet中request和response区别。

Servlet--重定向

Servlet学习——response

JavaWeb学习笔记之Servlet九大内置对象