【java web】JSP中form表單中文亂碼的解決嘗試
阿新 • • 發佈:2018-12-21
在人生中的第一個實際專案中,我遇到了一個很困擾的問題,就是在內管系統中,我做了一個測試頁面,用來測試向對方介面傳遞引數,我使用了jsp的form表單向後端傳遞引數,在本地啟動服務,進行測試都沒有問題,沒有出現中文亂碼的情況,但是提交到測試環境進行驗證時,卻出現了亂碼的情況,就像這樣:
作為新手,廢話不多說,打log,看問題出在哪裡。
我的日誌打在兩個地方,一:接收前端form表單傳遞的引數時;二:處理後返回給前端做回顯時。日誌結果如下:
顯然,後端接收到的引數就是亂碼的,所以問題並不是後端的處理。那麼傳遞引數亂碼的原因是什麼呢?為什麼本地起服務測試後,就沒有問題,而在測試環境中這個問題就會暴露出來?
原來是和我們測試環境的tomcat的配置有關係,在<Connector>標籤內並沒有加註編碼方式,導致tomcat處理的引數都使用了ISO-8859-1,中文傳遞的時候是亂碼也就不奇怪了。
作為一個小白,當然是不能輕易去動環境中的配置,於是我採用了【Filter+Controller】的方式進行修改。
首先,在web.xml中新增如下配置資訊:
<filter> <filter-name>encoding-filter</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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encoding-filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
這個過程是引入filter.CharacterEncodingFilter,並將過濾器的作用範圍定義為全域性。
然後將control層接收前端返回的引數的方式改為HttpServletRequest,並通過getParameter()接收引數,程式碼如下:
public ModelAndView test(HttpServletRequest request){
String name = request.getParameter("name");
...........
}
這樣就解決了這次的中文亂碼的問題。