tomcat中请求的乱码处理

tomcat在接收到请求后的编码问题处理

乱码问题的产生

在浏览器向服务器发送请求参数的过程中,浏览器以什么编码打开的表单页面,就用什么编码来发送这个页面提交的数据。

而在服务器接收请求参数的时候,如果处理请求参数使用的编码方式与浏览器发送请求参数时使用的编码方式不一致,就会产生乱码问题。

乱码问题的解决

POST请求

在测试中发现,tomcat服务器默认以ISO8859-1的编码解析数据,因此如果需要在参数中解析中文,需要设置

request.setCharacterEncoding("utf-8");

明确的通知服务器以浏览器发送过来的编码解析数据,如果浏览器是utf-8的编码,就以utf-8的编码解析数据,这样就就解决了POST请求中的乱码问题。

GET请求

对于get请求提交的数据,在不同版本的tomcat中有不同的处理方式,在tomcat8及以上的版本,服务器默认以utf-8的编码方式处理请求参数,这一点可以从tomcat8官方文档中可以看出

URIEncoding: This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, UTF-8 will be used unless the org.apache.catalina.STRICT_SERVLET_COMPLIANCE system property is set to true in which case ISO-8859-1 will be used.

而对于tomcat8以下的版本,服务器会默认以ISO8859-1的编码方式处理请求参数,在tomcat7官方文档中可以看出

URIEncoding: This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, ISO-8859-1 will be used.

因此在tomcat8及以上版本的tomcat服务器中,如果浏览器页面是utf-8编码,就不用设置get请求的请求参数编码处理方式,服务器默认就会用utf-8的方式处理请求参数,而在tomcat8以下的tomcat服务器中,需要我们手动编解码处理请求参数,如下所示。

String username = request.getParameter("username");
username = new String(username.getBytes("iso8859-1"),"utf-8");

另外,在tomcat目录下的/conf中的server.xml中我们也可以手动配置tomcat默认的编码方式,在
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>这段代码中添加一个URIEncoding参数,可以配置tomcat的默认编码方式。

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值