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

本文详细阐述了HTTP响应头中content-type的作用,包括如何设置数据类型(如text/html、text/xml、image/png等)及下载文件。同时,讨论了服务器与浏览器之间的编码问题,分析了乱码产生的原因,并提供了防止乱码的解决方案,强调了前端表单数据、服务器解析请求及响应数据编码的一致性重要性。
摘要由CSDN通过智能技术生成

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");由于编码方式和解码方式不一致,所以导致乱码的产生。

设置服务器编码方式还有一个方法: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"); 方法指定服务器发送给浏览器的数据采用的编码方式;

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值