0

我正在寻找功能方法来为带有 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作为回应。另一种解决方案是在应用程序中以编程方式更改标头(例如通过过滤器或阀门),但我不认为它是系统的。

4

1 回答 1

0

我回到了我两个月前提出的问题。我现在知道使用过滤器的解决方案不是任何解决方法,而是常用方法。只需编写一个过滤器类:

包 eu.barbucha.tests;

导入 java.io.IOException;

导入 javax.servlet.Filter;
导入 javax.servlet.FilterChain;
导入 javax.servlet.FilterConfig;
导入 javax.servlet.ServletException;
导入 javax.servlet.ServletRequest;
导入 javax.servlet.ServletResponse;

公共类 EncodingSettingFilter 实现过滤器 {
    私有最终字符串 enc = "utf-8";

    @覆盖
    公共无效销毁(){
    }

    @覆盖
    public void doFilter(ServletRequest request, ServletResponse resp, FilterChain fc)
            抛出 IOException,ServletException {
        request.setCharacterEncoding(enc);
        resp.setCharacterEncoding(enc);
        fc.doFilter(request, resp);
    }

    @覆盖
    公共无效初始化(FilterConfig arg0)抛出 ServletException {
    }
}

并使用文件中的所有 URI 分配过滤器WEB-INF/web.xml

<过滤器>
    <description>过滤器设置编码</description>
    <filter-name>enc-filter</filter-name>
    <filter-class>eu.barbucha.tests.EncodingSettingFilter</filter-class>
</过滤器>
<过滤器映射>
    <filter-name>enc-filter</filter-name>
    <url-pattern>*</url-pattern>
</filter-mapping>

就这样。

于 2011-05-02T08:56:28.300 回答