2012-09-12 16 views
1

我面臨這個問題。我有一個篩選器根據篩選器的配置(例如,UTF-8)設置請求的字符編碼。這適用於使用struts html:form標籤編碼的表單。但是,如果我使用普通的HTML表單標記,則數據編碼不正確。編碼過濾器,使用html時的struts工作:表格標籤

這是過濾器定義在web.xml:

<filter> 
    <filter-name>Encoding Filter</filter-name> 
    <filter-class>EncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF-8</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>Encoding Filter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

這裏的過濾器:

public class EncodingFilter implements javax.servlet.Filter { 
private String encoding; 
public void init(FilterConfig filterConfig) throws ServletException { 
    this.encoding = filterConfig.getInitParameter("encoding"); 
} 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { 
    request.setCharacterEncoding(encoding); 
    filterChain.doFilter(request, response); 
} 
public void destroy() { 
} 

}

+0

是您的網頁內容類型的字符集設置爲UTF-8?你使用POST還是GET?你看過頁面源代碼來看看struts-tag生成的表單和標準的HTML表單之間的區別嗎? –

+0

問題通過指定method ='post'來解決,html:form被轉換成表單witch方法是post – fatiDev

回答

6

如果使用Struts標籤​​3210並省略METHOD屬性它默認爲POST。 如果使用標準HTML <form>並省略METHOD屬性,則默認爲GET。

Tomcat將處理您的POST和GET不同的參數:

POST:您的過濾器將被使用。請注意,如果客戶端未指定請求字符編碼(您的篩選器始終將其設置爲UTF-8),您應該只設置請求字符編碼。 Tomcat帶有一個過濾器SetCharacterEncodingFilter.java。

GET:Tomcat將使用ISO-8859-1作爲默認字符編碼。有兩種方法來指定參數是如何GET解釋:

  • 將元素在server.xml中特定的東西的URIEncoding屬性(例如的URIEncoding =「UTF-8」)。
  • 將server.xml中元素的useBodyEncodingForURI屬性設置爲true。這將導致連接器爲GET參數使用請求主體的編碼。

這一切:http://wiki.apache.org/tomcat/FAQ/CharacterEncoding

+1

謝謝,這很清楚,這就是我一直在尋找的幾天:) – fatiDev