SpringMVC中post、get亂碼解決
阿新 • • 發佈:2019-02-02
一丶亂碼原因
由於中介軟體為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的處理,媽媽再也不用擔心我們遇到亂碼了!