Skip to content

Instantly share code, notes, and snippets.

@shinchit
Last active August 29, 2015 14:03
Show Gist options
  • Save shinchit/444552b1fbb3e317d058 to your computer and use it in GitHub Desktop.
Save shinchit/444552b1fbb3e317d058 to your computer and use it in GitHub Desktop.
Javaによる文字コードの指定(Servlet Filter使用)
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class CharacterEncodingFilter implements Filter {
  private String encoding = null;
// このクラスが初めて実行される時のみ一度だけコールされるメソッド。初期化に使う。
// マルチスレッドの環境においては、最初のスレッドがこのクラスを呼び出した時のみ実行される。
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
    // web.xmlにて設定されている文字コードを取得
    this.encoding = filterConfig.getInitParameter("encoding");
  }
// リクエストの度に呼び出されるメソッド。フィルターとしての機能はここに記述する。
  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
   // リクエストボディの文字コードを設定
    request.setCharacterEncoding(this.encoding);
    // レスポンスの文字コード(およびコンテントタイプのCharset)を設定
    response.setContentType("text/html; charset=" + this.encoding);
    // 次のフィルターに処理をパスする(続くフィルターがなければServlet本体の処理が呼び出される)
    chain.doFilter(request, response);
  }
// このフィルタクラスを使う最後のスレッドが処理を終えた後、このクラスの参照が廃棄されるタイミング
// で1度だけ実行されるメソッド。リソースの解放など終了処理を行う。
  @Override
public void destroy() {}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment