一丶乱码原因
由于中间件为Tomcat,用户请求和返回的响应都需要经过tomcat,tomcat默认编码为ISO-8859-1和我们程序的编码(一般为UTF-8)不同,导致post、get请求乱码。
二丶解决方案
Post乱码解决方案:
在web.xml中添加编码过滤器来解决,可以自己编写过滤器,最常用的方法是使用spring提供的编码过滤器:
在Web.xml中增加如下配置(要注意的是它的位置一定要是第一个执行的过滤器)
<!-- 解决post乱码 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
该过滤器要做的其实就是强制为所有请求和响应设置编码格式:
request.setCharacterEncoding(“utf-8”);
response.setCharacterEncoding(“utf-8”);
GET乱码解决方案
针对Get方式的乱码问题,由于参数是通过URL传递的,所以上面通过request设置的编码格式是不起作用的
方法①
修改tomcat目录 的conf/server.xml文件,添加URIEncoding="utf-8"
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
只需增加 URIEncoding="UTF-8" 这一句,然后重启tomcat即可。
方法②
对参数进行重新编码:
String userName new
String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")
ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码
通过以上对POST和GET的处理,妈妈再也不用担心我们遇到乱码了!