サーブレットにはフィルタ処理と言う物が存在し、サーブレットやJSPの共通の前後の処理を記載することが出来ます。
使用用途として、文字のエンコーディング何かに使うことが出来ます。これを使用すれば一カ所に前後処理を記載することで、冗長的なコードもすっきりするってわけです。
そこで、ここではフィルター処理を使ったエンコーディングのサンプルをメモとして記載したいと思います。
前提条件
- java 1.7.xx
- Servlet3.0
- Windows XP Pro 32bit
サンプルプログラム
ここでは、全てのリクエスト・レスポンスに対して"utf-8"でエンコーディングする方法をサンプルプログラムとして記載します。package test; 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; import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebInitParam; /** * フィルター名:EncodingFilter * 全てのURLに対して適用 * encoding値:utf-8 */ @WebFilter(filterName = "EncodingFilter", urlPatterns = { "/*" }, initParams = { @WebInitParam(name = "encoding", value = "utf-8") }) public class EncodingFilter implements Filter { /** * Encoding名. */ private String encoding = null; @Override public void init(FilterConfig filterConfig) throws ServletException { //初期化 //パラメータから値を読み込みセット encoding = filterConfig.getInitParameter("encoding"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //リクエストに対してエンコーディングをutf-8にセット request.setCharacterEncoding(encoding); //レスポンスに対してエンコーディングををutf-8にセット response.setCharacterEncoding(encoding); //連続するフィルタがある場合は、次のフィルタを呼び出します。 //最後のフィルタの場合は元の要求処理を呼び出します。 chain.doFilter(request, response); } @Override public void destroy() { } }
注意点は、Servlet3.0のアノテーションは、フィルターの順番を制御することが出来ない為、制御したい場合はweb.xmlに記載しなければなりません。
0 コメント:
コメントを投稿