サーブレットにはフィルタ処理と言う物が存在し、サーブレットや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 コメント:
コメントを投稿