概要
過去の記事でEclipse + Springでサンプルプロジェクトが動作するところまで紹介しました
今回はそのサンプルプロジェクトを使って「Interceptor」という仕組みを試してみました
環境
- Mac OS X 10.10.3
- Eclipse Luna 4.4.1
- Spring Framework 4.1.6
※それ以外のバージョンは過去の記事に書いてあるバージョンと同じです
サンプルプロジェクト作成
過去の記事を参考に作成してください
Spring Framework のバージョンが最新でない場合は pom.xml 「org.springframework-version」のバージョン記載部分を最新のバージョンに変更してください
Interceptor実装
そもそも Interceptor って何という話ですが、簡単に言うとある処理をする前後に任意の処理を実行させる仕組みのことです
共通処理等で使われることが多く、例えばロギングやシリアライズを必ず実施しなければいけない場合で使われます
servlet-context.xml の修正
servlet-context.xml
はsrc/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml
にあります
ここにInterceptorを使用する定義を記載します
<!-- for Interceptor -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<beans:bean class="com.sample.test.RequestInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
ポイントはpath
の部分とclass
の部分です
path
で指定したURIにアクセスした場合にclass
で指定したInterceptorクラスのメソッドが実行されます
The prefix “mvc” for element “mvc:interceptors” is not bound.
というエラーが出る場合は servlet-context.xml の冒頭のbeans
タブに以下を記載してください
xmlns:mvc="http://www.springframework.org/schema/mvc"
Interceptor クラスの実装
今回はcom.sample.test.RequestInterceptor
というクラスを作成してAPIのメイン処理に入る前にリクエスト情報をダンプしてみたいと思います
package com.sample.test;
import java.util.Collections;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class RequestInterceptor extends HandlerInterceptorAdapter {
@SuppressWarnings("unchecked")
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("Dumping request parameters");
for (Object name : Collections.<Object>list(request.getParameterNames())) {
String value = request.getParameter((String) name);
System.out.println(name.toString() + ":" + value);
}
return true;
}
}
true を return することで次の処理に移ります
false を指定すると次の処理には行かずこの処理で終了します
とりあえず上記ではリクエスト時のパラメータ情報をSystem.out
しているだけです
ここまで作成できればあとは実行するだけです
動作確認
プロジェクトを右クリックして「Run on Server」でアプリを起動してみましょう
http://localhost:8080/test/?hoge=fuga
という感じでアクセスすると Eclipse のコンソールに
Dumping request parameters
hoge:fuga
という感じで出力されると思います
紹介は以上です
Interceptor は便利な機能だと思います
0 件のコメント:
コメントを投稿