2011-02-24 93 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> 

这就是全部。