0

Tomcat で Geronimo 3 の HTTP 応答のデフォルトの文字エンコーディングを設定する機能的な方法を探しています。多くの回避策があるようですが、Apache Httpd の場合のように、ファイルにプロパティを簡単に設定する方法はありません。(Apache Httpd はAddDefaultCharsetすべての応答に使用されています。) の要素に属性useBodyEncodingForURIと要素を追加しようとURIEncodingしました。<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応答でヘッダーを受け取ります。別の解決策は、アプリケーションのヘッダーをプログラムで変更することです (たとえば、フィルターやバルブを介して) が、 systemicではないと思います。

4

1 に答える 1

0

2 か月前に尋ねた質問に戻りました。フィルターを使用したソリューションは回避策ではなく、一般的な方法であることがわかりました。フィルタクラスを書くだけです:

パッケージ 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 は Filter {
    private final String enc = "utf-8";

    @オーバーライド
    public void destroy() {
    }

    @オーバーライド
    public void doFilter(ServletRequest リクエスト、ServletResponse resp、FilterChain fc)
            IOException、ServletException をスローします {
        request.setCharacterEncoding(enc);
        resp.setCharacterEncoding(enc);
        fc.doFilter(リクエスト、応答);
    }

    @オーバーライド
    public void init(FilterConfig arg0) は ServletException をスローします {
    }
}

そして、WEB-INF/web.xmlファイル内のすべての URI でフィルターを割り当てます。

<フィルター>
    <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 に答える