Javaweb学习笔记之HttpServletResponse(四):content-type 响应头的作用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29331365/article/details/90175203

content-type 响应头包含两部分内容:

一、设置服务器发送给浏览器的数据类型;

1、response.setContentType("text/html"):浏览器会将当前页面按照 html 进行解析

浏览器解析结果为:

 

2、response.setContentType("text/xml"):浏览器会将当前页面按照 XML 进行解析

 浏览器解析结果为:

 3、response.setContentType("image/png"):浏览器会以图片的方式解析当前页面

浏览器解析结果为:

 

4、设置以下载方式打开文件:

 

浏览器解析结果为:

 

二、设置服务器发送给浏览器的数据编码方式;

没有指定编码时浏览器解析结果为:乱码

 

乱码原因:

浏览器和服务器通信底层是通过 socket 实现的,而 socket 数据传输只能是字节数据,所以 response.getWriter().write("data") 发送的字符数据需要先转换成字节数据。

tomcat 服务器默认使用的编码为 iso-8859-1,所以服务器将字符数据转换成字节数据的方法为:byte[] buf = data.getBytes("iso-8859-1"); 而浏览器使用的编码方式为 UTF-8,即浏览器解析服务器发送过来的数据使用的方法为:new String(buf, "utf-8");由于编码方式和解码方式不一致,所以导致乱码的产生。

解决乱码问题可以使用 setContentType() 方法设置服务器的编码方式,如下:

设置服务器编码方式还有一个方法:response.setCharacterEncoding("utf-8"); 效果和 response.setContentType("text/html;charset=utf-8"); 一样。

如果服务器使用 response.getOutputStream().write(b); 方式发送数据给浏览器,则 response.setCharacterEncoding("utf-8"); 没有效果,因为 response.getOutputStream().write() 发送的就是字节数据,不需要服务器再进行编码了。

注意:服务器使用 utf-8 编码时,如果浏览器不是使用 utf-8 编码,也会出现乱码;如下:把浏览器的编码方式改为 GB2312 时,中文也会变成乱码。

三、完美解决中文乱码问题:

1、前端网页通过 <meta charset="UTF-8"> 方法指定 form 表单数据使用的编码方式;

2、服务器端通过 request.setCharacterEncoding("utf-8"); 方法指定服务器解析浏览器发送数据的解码方式;

3、服务器端通过 response.setContentType("text/html;charset=utf-8"); 方法指定服务器发送给浏览器的数据采用的编码方式;

服务器解析浏览器发送的数据出现乱码问题见:https://blog.csdn.net/qq_29331365/article/details/90174866

猜你喜欢

转载自blog.csdn.net/qq_29331365/article/details/90175203