带有Tomcat的Geronimo中的默认编码

时间:2011-02-24 14:10:34

标签: tomcat encoding geronimo

我正在寻找使用Tomcat为Geronimo 3的HTTP响应设置默认字符编码的功能方法。似乎有很多解决方法,但没有任何方法可以轻松地在某些文件中设置某些属性,就像Apache Httpd一样。 (Apache Httpd使用AddDefaultCharset用于所有回复。)我已尝试将属性useBodyEncodingForURIURIEncoding添加到<connector>中的var/catalina/server.xml元素。

<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作为回应。另一个解决方案是在应用程序中更改标题(例如通过过滤器或阀门),但我没有找到它系统性

1 个答案:

答案 0 :(得分: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>

就是这样。