servlet のロケーションを一括で指定する
前回 id:redcat_prog:20111030 で書いたように、servlet の文字エンコーディングを一括で指定することが filter によって可能であったが、それをさらに発展させてロケーションも一括で指定してしまおうというのが今回の目的。
package jp.mydns.akanekodou.filter; import java.io.*; import javax.servlet.*; import java.util.Locale; public class EncodingFilter implements Filter { private String encoding; private String language; public void init(FilterConfig config) throws ServletException { encoding = config.getInitParameter("encoding"); language = config.getInitParameter("language"); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { request.setCharacterEncoding(encoding); response.setLocale(new Locale(language)); chain.doFilter(request, response); } public void destroy() {} }
追加したのは 4 行。java.util.Locale を import して、新たに language というプライベート変数を用意し、init メソッドで web.xml からパラメータを読み込む。そして response.setLocale で、指定した言語に相当する Locale クラスをセットしている。こうしておいて 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> <init-param> <param-name>language</param-name> <param-value>ja</param-value> </init-param> </filter>
のように書いておく。前回の分から init-param が一つ増えている。これで servlet 実行時には
Content-Type : text/html; charset=utf-8 Content-Language : ja
という header が追加されているはずである。お手軽なのでお勧め。ただしこれはあくまで servlet にのみ適用されるもので、servlet ではない生の HTML ファイルには作用しないので注意。