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 のエンコーディングを指定しなくとも一括で文字エンコーディングを指定できる。