読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

サーブレットの文字化け対策にサーブレットフィルタを使う。そのためのweb.xmlの設定など。

JavaEE
<スポンサーリンク>

サーブレットフィルタのweb.xmlの設定とサンプルコード

画面から送られてきた文字に対して、フィルタを通すことで指定した文字コードを強制的に適用することができる。

イメージとしてはこんな感じ。

<<画面>> → <<サーブレットフィルタ>> → <<サーブレット>>

ここでフィルタを通すことで、指定した文字コードを適用し、それをサーブレットに引き渡すことができる。
では、どうするかというと、まずはEncodingを設定するサーブレットフィルタを作成する。
サーブレットフィルタのサンプルはこんな感じ。

package filter;

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 EncodingFilter implements Filter {
	private String encoding = null;

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

	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
						throws ServletException, IOException {
		req.setCharacterEncoding(encoding);
		chain.doFilter(req, res);
	}

	public void destroy() {
		encoding = null;
	}
}

それで、このサーブレットフィルタを使うには、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>

このweb.xmlのencodingに適用したい文字コードを指定することで、フィルタ側でその文字コードを設定してくれる。

詳しく学習するならこの本

作ればわかる!Google App Engine for Javaプログラミング

作ればわかる!Google App Engine for Javaプログラミング