2011-02-24 94 views
0

我正在尋找可設置爲Geronimo 3 Tomcat的HTTP響應默認字符編碼功能性的方式。似乎有很多變通的,但又沒辦法輕鬆地設置一些屬性在一些文件中像Apache中的httpd情況。 (apache httpd的具有用於所有響應AddDefaultCharset)。我已經試過添加屬性useBodyEncodingForURIvar/catalina/server.xmlURIEncoding<connector>元素。默認編碼與Tomcat的

<Connector name="TomcatWebConnector" 
    port="${HTTPPort + PortOffset}" 
    address="${ServerHostname}" 
    protocol="HTTP/1.1" 
    connectionTimeout="20000" 
    redirectPort="${HTTPSPort + PortOffset}" 
    useBodyEncodingForURI="true" 
    URIEncoding="UTF-8" 
    executor="DefaultThreadPool"/> 

但它不起作用。我仍然得到標題Content-Type text/html;charset=ISO-8859-1作爲迴應。另一個解決方案是在programaticaly應用改變標頭(例如,通過過濾器或閥),但我並不覺得全身

回答

0

我回到了我兩個月前問過的問題。我現在知道使用過濾器的解決方案不是任何解決方法,而是常見的方法。只要寫一個過濾器類:

 
package eu.barbucha.tests; 

import java.io.IOException; 

import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 

public class EncodingSettingFilter implements Filter { 
    private final String enc = "utf-8"; 

    @Override 
    public void destroy() { 
    } 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse resp, FilterChain fc) 
      throws IOException, ServletException { 
     request.setCharacterEncoding(enc); 
     resp.setCharacterEncoding(enc); 
     fc.doFilter(request, resp); 
    } 

    @Override 
    public void init(FilterConfig arg0) throws ServletException { 
    } 
} 

並與在WEB-INF/web.xml文件中的所有的URI指定過濾器:

 
<filter> 
    <description>Filter setting encoding</description> 
    <filter-name>enc-filter</filter-name> 
    <filter-class>eu.barbucha.tests.EncodingSettingFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>enc-filter</filter-name> 
    <url-pattern>*</url-pattern> 
</filter-mapping> 

這就是全部。