HttpServletResponse类的介绍和使用+解决响应传递给客户端数据的中文乱码问题

HttpServletResponse类作用

HttpServletResponse类和HttpServletRequest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息
我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来进行设置

他是通过流来给客户端传递数据的

响应有两个流,如下

两个输出流的说明

左边是名称,中间是获取这些流的方法,右边是作用

字节流		getOutputStream()	常用于下载(传递二进制数据)
字符流		getWriter()			常用于回传字符串(非常常用)

两个流同时只能使用一个,也就是用了字节流就不能用字符流了,用了字符流就不能用字节流了
比如我们同时用一下这两个方法:
HttpServletResponse类的介绍和使用+解决响应传递给客户端数据的中文乱码问题_第1张图片然后我们运行HttpServletResponse类的介绍和使用+解决响应传递给客户端数据的中文乱码问题_第2张图片报错了,说我们用了一个就不要用另一个了

向客户端传数据

要求,向客户端回传字符串数据
步骤

获取字符流
向客户端回传数据

我们先定义一个PrintWriter对象来接收获取到的字符流对象
然后通过字符流对象的printin()方法或者write()的方法向客户端回传数据
括号中填入我们需要回传的字符
HttpServletResponse类的介绍和使用+解决响应传递给客户端数据的中文乱码问题_第3张图片这个东西如果只是传递回英文是没有任何问题的,但是如果我们传递的数据中文,则会导致乱码
HttpServletResponse类的介绍和使用+解决响应传递给客户端数据的中文乱码问题_第4张图片

解决中文乱码问题

中文乱码一般都是字符集不匹配的问题,我们先来瞧瞧这个响应的字符集是什么
HttpServletResponse对象的getCharacterEncoding()方法,这个方法的作用就是获得字符集的类型,与之相对的就是我们的setServletResponse一个get一个set
(咱这里查看的都是咱服务器的字符集)
HttpServletResponse类的介绍和使用+解决响应传递给客户端数据的中文乱码问题_第5张图片可以看到这里服务器的字符集是ISO-8859-1,这个字符集不支持中文
我们可以设置一下服务器的编码,但是咱们设置成UTF-8的话我们的google浏览器还是不能正常显示,这就涉及到我们浏览器的编码(字符集)的问题了,这个浏览器一般默认是GBK字符集


注意很重要一点,我们这两个方法的代码部分都必须放在获取流对象的前面,不然会失效

解决方法一 (不推荐)

虽然咱们可以通过设置服务器编码为GBK来解决乱码问题但是也只能应一时之急,如果换了个浏览器可能就不行了,所以我们需要通过服务器来设置浏览器的字符集
HttpServletResponse对象的setHeader()方法

原理:
通过响应头使浏览器使用某种字符集编码

例子:
HttpServletResponse类的介绍和使用+解决响应传递给客户端数据的中文乱码问题_第6张图片
解释:
Content-Type这里就是告诉我们要设置响应头中的什么东西

Content-Type的作用
该实体头的作用是让服务器告诉浏览器它发送的数据属于什么文件类型
当Content-Type 的值设置为text/html会让浏览器把接收到的实体内容以HTML格式解析,然后后面跟着的charset设置我们的字符编码集

看我们的响应头:HttpServletResponse类的介绍和使用+解决响应传递给客户端数据的中文乱码问题_第7张图片可以看到这里浏览器的编码变成了UTF-8,然后我们的服务器编码就和浏览器编码同意都是UTF-8了

方法二 (推荐)

HttpServletResponse对象还有一个方法setContentType()
HttpServletResponse类的介绍和使用+解决响应传递给客户端数据的中文乱码问题_第8张图片这个可以直接在括号里面设置浏览器的编码和对文本的编译(text/html部分是把文本用html页面来解析)

再强调一次:
注意很重要一点,我们这两个方法的代码部分都必须放在获取流对象的前面,不然会失效

到!此!结!束!

你可能感兴趣的:(web,javaweb,servlet)