☕
[Servlet]フィルター(Time Filter:処理時間の測定)機能の実装
◆はじめに
実装後に以下のURLにアクセスします。
すると、以下の仕様の画面が表示されます。
・文字列を入力し、送信ボタンを押す。
・Echo機能を提供するServletが呼び出される。
・送信した文字列が、再度、画面に表示される。
次が本記事で実装方法を紹介する、
Timerの機能を提供するFilterの動作です。
Eclipseのコンソールに、計測されたServletの処理時間が表示されます。
◆Fileterとは
Filterとは、
クライアントからのリクエストがくるとServletの前に実行されるクラスです
複数のServletで同じような処理を行いたい場合などに役に立ちます。
例えば、
Filterをひとつ実装すれば、どの画面からでも
用意したフィルターをかけられるようになるため、
ひとつひとつの画面に個別に実装する手間が省けます。
また、本記事では、Timer 機能を提供するFilterを実装しました。
Servletが呼ばれる前に、Time Filterが呼ばれ、タイマーがスタート。
処理後に、タイマーを停止し、理時間を計測することができます。
今回ご紹介するTime Filterのように、処理時間を計測するFilterだけではありません。
・文字コードを変換
・ログの出力
・ログイン機能 ...etc
様々に実装が可能ですし、複数のFilterを同時にかけることもできます。
◆前提/環境など
本記事は、以下の記事の「InputFunction」プロジェクトをベースに作成しています。
Echo機能のServletの処理時間を計測するため、ご用意ください。
基本的なプロジェクトの構成や、ライブラリについては以下をご覧ください。
また、バリデーション機能については、
以下の記事で実装方法を紹介しています。
こちらは、実装していなくても問題ありません。
※本記事では、 eclipseは以下のバージョンでの画像を使用しています。
日本語化はしていません。
他のversionでの動作は確認しておりません。
◆手順
Time Fliterの実装手順のみご紹介します。
①Filterクラスの用意
・mainフォルダに「filter」のパッケージを作成
・「filter」のパッケージ内に、「TimeFilter.java」を作成
②Time Filterのソースコード
・以下のコードを、「TimeFilter.java」に記述
TimeFilter.java
package filter;
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;
//("/echo")のURLにアクセスした際に呼ばれる
@WebFilter("/echo")
public class TimeFilter implements Filter{
//init
public void init(FilterConfig conf) throws ServletException {
}
//doFilter
@Override
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) {
//処理時間の計測開始
System.out.println("TimeFilter# 時間の計測を開始します。");
long start = System.currentTimeMillis();
try {
// Servletを呼び出す。または、別のfliterを呼び出す。
chain.doFilter(request,response);
}
catch(Exception e) {
System.out.println("Error");
}
//処理時間の計測終了
finally {
long end = System.currentTimeMillis();
System.out.println("TimeFilter# 処理時間は,"+ (end - start) + "ms でした。");
}
}
//destroy
public void destroy() {
}
}
「InputFunction」プロジェクトでは、以上でソースを貼った以外の
ファイルのコードや追加しているライブラリーに関しては、特に変更はありません。
そちらのソースに関しては、以下の記事をご参照ください。
③動作チェック
・Tomcatなどアプリケーションサーバーを起動
・実装後に以下のURLにアクセス
以下の画面が表示されるので、
・テキストボックス文字列を入力
・送信ボタンを押す
Echo機能の仕様は以下です。
・文字列を入力し、送信ボタンを押す。
・Echo機能を提供するServletが呼び出される。
・送信した文字列が、再度、画面に表示される。
因みに、Validation機能の使用は以下です。
・送信された文字列が空欄の場合は、
「この項目は必須入力です。」と文字列が表示される。
そして、正常にTimeFilerが動作していれば、
Eclipseのコンソールに、
計測されたServletの処理時間が表示されているはずです。
以上のようになっていれば、実装完了です。
ちなみに、
「ValidationMessage:null」はバリデーション機能でひっかからなかったのでnullです。
「message:処理時間の計測」は、Echo機能で返す文字列です。
◆さいごに
以上です。いかがだったでしょうか。
Filterの実装はできたでしょうか。
今回のポイントです。
①Filterクラスを作成し、doFilterメソッドにフィルタ処理を記載
②@WebFilter("Filterを呼び出すURL情報")をFilterクラスに記載
③chain.doFilterで、次の処理に移る
コードに関しての詳しい説明に関しては、
あまり書いていません。一応、コード内にコメントをつけてます。
あとは、他の参考に載せている書籍やサイトなど調べてみてください。
最後まで、ご覧いただきありがとうございました。
◆参考
本記事は、以下の書籍を大いに参考にしています。
より詳しく知りたい方は、どうぞ。
・関連記事、その他
Discussion