Request のエンコードを指定する
Servlet におりて、Request からパラメータの値を取得する場合にエンコードの指定を行わないと
2 byte 文字は文字化けを起こしてしまいます。
文字コードを指定する方法には、Request のメソッド (Servlet 2.3 以降) の
request.setCharacterEncoding(文字コード);
がありますが、全ての Servlet で記述するのは非常に面倒で、漏れが発生しやすいです。
そこで、Filter を使用します。
利用方法は、まず最初に以下のようなクラスを作成します。
クラス例
import java.io.*;
import javax.servlet.*;
public class EncodingFilter implements Filter {
private String encoding_;
public void init(FilterConfig filterConfig) throws ServletException {
encoding_ = filterConfig.getInitParameter("encoding");
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding_);
chain.doFilter(request, response);
}
public void destroy() {
}
}
そして、 web.xml に以下のような記述を追加します。
web.xml 例
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>Windows-31J</param-value>
</init-param>
</filter>
<param-name> を Key にして <param-value> で指定されたエンコードで全ての Request が処理されます。
|