spring mvc中文亂碼

今天搭建spring3 mvc框架的時候,發現居然又出現了亂碼(萬惡的iso編碼啊),想起之前解決post提交亂碼問題一般都是寫一個filter,在filter中實現編碼的轉換,配置方法是是在web.xml中加入以下代碼:

[html] view plaincopy
  1. <filter>    
  2.     <filter-name>Character Encoding</filter-name>    
  3.     <filter-class>com.filter.CharacterEncodingFilter</filter-class>    
  4.     <init-param>    
  5.         <param-name>encoding</param-name>    
  6.         <param-value>UTF-8</param-value>    
  7.     </init-param>    
  8. </filter>    
  9. <filter-mapping>    
  10.     <filter-name>Character Encoding</filter-name>    
  11.     <url-pattern>/*</url-pattern>    
  12. </filter-mapping>  

其中:com.filter.CharacterEncodingFilter是自己實現的過濾器,具體寫法可以參考tomcat6中webapps\examples\WEB-INF\classes\filters下SetCharacterEncodingFilter這個類。

 

覺得這樣做有點麻煩,百度了一下,發spring中自帶了一個設置編碼的過濾器org.springframework.web.filter.CharacterEncodingFilter,所以在web.xml中可以改成這樣:

[html] view plaincopy
  1. <filter>    
  2.     <filter-name>Character Encoding</filter-name>    
  3.     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>    
  4.     <init-param>    
  5.         <param-name>encoding</param-name>    
  6.         <param-value>UTF-8</param-value>    
  7.     </init-param>    
  8. </filter>    
  9. <filter-mapping>    
  10.     <filter-name>Character Encoding</filter-name>    
  11.     <url-pattern>/*</url-pattern>    
  12. </filter-mapping>  

 

這樣就不用自己寫過濾器了。

但是還是覺得有點麻煩,因爲使用spring mvc的時候,已經在web.xml中設置了servlet:

[html] view plaincopy
  1. <servlet>  
  2.  <servlet-name>spring</servlet-name>  
  3.  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  4.  <load-on-startup>1</load-on-startup>  
  5. </servlet>  
  6.   
  7. <servlet-mapping>  
  8.  <servlet-name>spring</servlet-name>  
  9.  <url-pattern>*.do</url-pattern>  
  10. </servlet-mapping>  

上面已經對請求做了一次過濾,如果再加一個過濾器感覺有點多餘,直接改一下DispatcherServlet這個類,使它具有修改編碼的功能不是更好?於是就寫了一個新的類,繼承自DispatcherServlet,代碼如下:

[java] view plaincopy
  1. package com.mocha.servlet;  
  2.   
  3. import javax.servlet.ServletConfig;  
  4. import javax.servlet.ServletException;  
  5. import javax.servlet.http.HttpServletRequest;  
  6. import javax.servlet.http.HttpServletResponse;  
  7. import org.springframework.web.servlet.DispatcherServlet;  
  8.   
  9. public class EncodingDispatcherServlet extends DispatcherServlet {  
  10.  private String encoding;  
  11.   
  12.  public void init(ServletConfig config) throws ServletException {  
  13.   encoding = config.getInitParameter("encoding");  
  14.   super.init(config);  
  15.  }  
  16.   
  17.  protected void doService(HttpServletRequest request, HttpServletResponse response) throws Exception {  
  18.   request.setCharacterEncoding(encoding);  
  19.   super.doService(request, response);  
  20.  }  
  21. }  

然後將web.xml中的配置改爲:

[html] view plaincopy
  1. <servlet>  
  2.  <servlet-name>spring</servlet-name>  
  3.  <servlet-class>com.mocha.servlet.EncodingDispatcherServlet</servlet-class>  
  4.  <load-on-startup>1</load-on-startup>  
  5.  <init-param>  
  6.   <param-name>encoding</param-name>  
  7.   <param-value>UTF-8</param-value>  
  8.  </init-param>  
  9. </servlet>  
  10.   
  11. <servlet-mapping>  
  12.  <servlet-name>spring</servlet-name>  
  13.  <url-pattern>*.do</url-pattern>  
  14. </servlet-mapping>  

 OK,亂碼消失,現在總結一下亂碼的問題,get方法亂碼解決方法一般是將tomcat中conf目錄下server.xml文件中加入

[html] view plaincopy
  1. <Connector port="8080" maxHttpHeaderSize="8192"    
  2.                maxThreads="150" minSpareThreads="25" maxSpareThreads="75"    
  3.                enableLookups="false" redirectPort="8443" acceptCount="100"    
  4.                connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />  

而post方法解決亂碼是設置一個專門處理編碼轉換的filter或者servlet。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章