1. 程式人生 > >SpringMVC中post、get亂碼解決

SpringMVC中post、get亂碼解決

一丶亂碼原因

由於中介軟體為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的處理,媽媽再也不用擔心我們遇到亂碼了!