2013年6月21日金曜日

Servlet3.0でのFilter処理の使い方のメモ

サーブレットにはフィルタ処理と言う物が存在し、サーブレットや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に記載しなければなりません。

Written By : // 10:02
Category:

0 コメント:

コメントを投稿

 

About

このブログは筆者の備忘録として色々記載しています。

Blog Archive

Powered by Blogger.