見出し画像

Java訓練#40(フィルタ)

今日の授業

今日はフィルタについて学びました。それについて解説します。

フィルタとは

サーブレットやJSPで書かないといけない共通のコードなどを記述したファイルの事です。これを作ることによって複数のサーブレットファイルを作る時などプログラムをより簡潔にする事ができます。
また、フィルタはサーブレットやJSPへのリクエスト時、ブラウザへのレスポンス時に自動で実行されます。

フィルタを作成する時はJava(サーブレット)で作成し、Filterインタフェースを実装します。そして、Filterインタフェースの3つのメソッドをオーバーライドする必要があります。
そのメソッドは次の3つです。
・doFilterメソッド
・init メソッド
・destoroyメソッド

サンプルコード

package tool;

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;

//フィルタを適用するサーブレットやJSPを指定する ※アスタリスク(*)は全ファイル指定
@WebFilter(urlPatterns = { "/*" })
public class EncodingFilter implements Filter {

	public void doFilter(
			ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {

     //フィルタで適用したいコード
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");

     //複数フィルタがある場合に使用
		chain.doFilter(request, response);
	}
	public void init(FilterConfig filterConfig) {}
	public void destroy() {}
}

doFilterメソッドには共通の処理の設定を記述し更に、chain.doFilter(request, response)を記述します。これでプログラムを書いたJSPやサーブレットを呼び出す事ができます。

init メソッドは初期値の設定を行い、destoroyメソッドはフィルタを破棄する設定を行います。しかし今回の授業では詳しく触れなかったので、オーバーライドだけして、処理は何も書きませんでした。

フィルタは複数作ることができます。しかし、実行される順番に注意しなければなりません。

実行される順番とは、chain.doFilter(request, response)メソッドでサーブレットやJSPを呼び出すのですが、まずchain.doFilterメソッドの上で記述された物が、ブラウザからリクエストが送られて「フィルタ1→フィルタ2→サーブレット」と実行されます。次にサーブレットからレスポンスが送られて「フィルタ2→フィルタ1→ブラウザ」とchain.doFilterメソッドの下で記述された物が返ってきます。

フィルタを適用するには「web.xml」か「アノテーション」で設定します。

「web.xml」では、タグはservletで作った物と一緒でservletとなってる所がfilterに変わるだけです。

<filter-class>はフィルタがある住所を記述します。
<url-pattern>にはサーブレットの同じ住所を記述して下さい

公共職業訓練を受講する為に必要な事を下の記事で書いてます。
良かったらご覧下さい↓↓↓


最後まで読んで頂きありがとうございました。

少しでも勉強になった、役に立ったと思ったら「 サポート」 で貴方のお気持ちを頂けると嬉しいです。
今後の励みにもなります。是非よろしくお願いします。


この記事が気に入ったらサポートをしてみませんか?