关于Tomcat中接收Get与Post请求编码格式与乱码相关问题

我发现最近我是被各种乱码搞到怀疑人生。。。今天在学习请求转发的时候偶然研究了一哈Tomcat服务器URL的默认编码格式与Gett与Post请求的相关联系。。。

Tomcat将使用ISO-8859-1作为整个URL的默认字符编码

web项目使用Tomcat作为服务器时,会遇到GET或者POST请求乱码的问题。

、GET请求乱码

由于GET请求是将参数拼接到URL上向服务器发起请求的。在Tomcat接收到请求时,会先将URL解码。而默认的编码方式为"ISO-8859-1",解码后自然会产生乱码。

解决方法:(server.xml文件在Tomcat安装目录的conf目录下。。。Tomcat//conf//server.xml)

1、将server.xml中的<Connector>元素上的URIEncoding属性设置为特定的值(例如,URIEncoding="UTF-8")。

2、将服务器server.xml中的<Connector>元素上的useBodyEncodingForURI属性设置为true。

同时注意响应编码格式的设置

二、POST请求乱码

关于POST请求方式乱码的问题,这个比较。。。无解一点。。。我遇到的乱码问题是通过对前台数据进行重新编码解决的。。

遇到POST请求乱码的码友们可以借鉴一哈。。。

设置完响应编码格式,获取请求信息之后,对获取到的前台数据用String进行重新编码即可。。。

关于Tomcat服务器GET与POST请求乱码问题还有官方文档可以借鉴!!!

Tomcat will use ISO-8859-1 as the default character encoding of the entire URL, including the query string ("GET parameters") (though see Tomcat 8 notice below).
There are two ways to specify how GET parameters are interpreted:

Set the URIEncoding attribute on the <Connector> element in server.xml to something specific (e.g. URIEncoding="UTF-8").

Set the useBodyEncodingForURI attribute on the <Connector> element in server.xml to true. This will cause the Connector to use the request
 body's encoding for GET parameters.
In Tomcat 8 starting with 8.0.0 (8.0.0-RC3, to be specific), the default value of URIEncoding attribute on the <Connector> element depends on "strict servlet compliance"
 setting. The default value (strict compliance is off) ofURIEncoding is now UTF-8. If "strict servlet compliance" is enabled, the default value is ISO-8859-1.

POST requests should specify the encoding of the parameters and values they send. Since many clients fail to set an explicit encoding, the default is used (ISO-8859-1).


官方建议:

Using UTF-8 as your character encoding for everything is a safe bet. This should work for pretty much every situation.
In order to completely switch to using UTF-8, you need to make the following changes:

Set URIEncoding="UTF-8" on your <Connector> in server.xml. References: HTTP
 Connector, AJP Connector.

Use a character encoding filter with the default
 encoding set to UTF-8
Change all your JSPs to include charset name in their contentType.
For example, use <%@page contentType="text/html; charset=UTF-8" %> for the usual JSP pages and <jsp:directive.page contentType="text/html; charset=UTF-8" /> for the pages in
 XML syntax (aka JSP Documents).
Change all your servlets to set the content type for responses and to include charset name in the content type to be UTF-8.
Use response.setContentType("text/html; charset=UTF-8") or response.setCharacterEncoding("UTF-8").
Change any content-generation libraries you use (Velocity, Freemarker, etc.) to use UTF-8 and to specify UTF-8 in the content type of the responses that they generate.
Disable any valves or filters that may read request parameters before your character encoding filter or jsp page has a chance to set the encoding to UTF-8. For more information see
 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值