servlet の request の文字エンコードを一括で設定する

元ネタはこちら。
Request のエンコードを指定する

具体的には javax.servlet.Filter インターフェースを継承した以下のようなクラスを作れば良い。

package jp.mydns.akanekodou.filter;

import java.io.*;
import javax.servlet.*;

public class EncodingFilter implements Filter {
    private String encoding;

    public void init(FilterConfig config) throws ServletException {
        encoding = config.getInitParameter("encoding");
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        request.setCharacterEncoding(encoding);

        chain.doFilter(request, response);
    }

    public void destroy() {}
}

init メソッドは Filter の最初の実行時に 1 回だけ実行されるメソッドで、ここでパラメータ名 encoding のパラメータ値を取りだして変数に格納する。destroy メソッドは特に何もする必要はないのでこの記述で良い(ただし省略は出来ない)。

パラメータは web.xml で指定する。以下の内容を web.xml に追加する。

<filter>
    <filter-name>Encoding</filter-name>
    <filter-class>filter.EncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>Encoding</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

utf-8 のところは適宜使用したい文字エンコーディングに合わせる。これで servlet ごとに request のエンコーディングを指定しなくとも一括で文字エンコーディングを指定できる。