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>
ブラウザからJSPのURIにリクエストを投げると、以下のように表示される。
フィルタからのメッセージを表示 「Hello Filter」