Going my way

いいなと思ったことをメモしていきます。

JavaEE サーブレットのフィルターの使い方。


Advertisements


サーブレットのフィルタ

フィルタとは、サーブレットのリクエストやサーブレットからのレスポンスに対して、フィルタリングをかけるオブジェクトのこと。
フィルタを通すことで、リクエストが本来ターゲットとしているリソースを実行するまえにリクエストをラップして、ログをとったり、リクエストにオブジェクトを添付したり、ヘッダの値を追加・変更することができる。

■フィルターの仕組みの例

<ブラウザ> ----> <Filter> ----> <jsp>

あるJSPファイルを見ようとすると、定義されたFilterを通るように設定できる。

例えば、

filterMessage.jspにアクセスしようとする。
ブラウザに以下のURLを入力。

http://localhost:8082/web_comp/filterMessage.jsp

すると、以下のように、web.xmlで定義したFilterを通すように設定できる。

<ブラウザ> ----> <HelloFilter> -----> <filterMessage.jsp>

■フィルタの設定方法
web.xmlを定義するだけ。
定義は以下の通り。

	<filter>
	  <filter-name>hellofilter</filter-name>
	  <filter-class>myfilters.HelloFilter</filter-class>
	</filter>
	
	<filter-mapping>
	  <filter-name>hellofilter</filter-name>
	  <url-pattern>/filterMessage.jsp</url-pattern>
	</filter-mapping>

ソースコード

Filterのソースコード

package myfilters;

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 HelloFilter implements Filter{
	private FilterConfig filterConf;
	
	public void init(FilterConfig filterConfig) {
		this.filterConf = filterConfig;
	}
	
	public void doFilter(ServletRequest request,
							ServletResponse response,
							FilterChain chain)
	throws IOException, ServletException {
		
		System.out.println(filterConf + " : Entering...");
		
		request.setAttribute("msgFromFilter","Hello Filter");
		
		chain.doFilter(request, response);
		
		System.out.println(filterConf + " : Exiting...");
		
		filterConf.getServletContext().log(filterConf + ": Filter finished.");
		
	}
	
	public void destroy() {
		this.filterConf = null;
	}
}

Jspソースコード
Filterで設定したメッセージを受け取って、表示する。

<%@ page contentType="text/html; charset=Shift_JIS" %>
<html>
<head>
<title>メッセージ表示</title>
</head>

<body>
<center>
<h3> フィルタからのメッセージを表示</h3>
<%-- リクエストにバンドルされている属性を取得 --%>
<b><%= request.getAttribute("msgFromFilter") %></b>
</center>
</body>
</html>

ブラウザからJSPURIにリクエストを投げると、以下のように表示される。

フィルタからのメッセージを表示

「Hello Filter」