お知らせ
2018年10月22日
TERASOLUNA(Spring)ネタ① Controller実行前後に処理を入れる
SAStrutsでは、AbstractInterceptorなどを使ってAction処理の前後に処理を挟むことができるので、
TERASOLUNAでも同じ事ができる筈なので、調べた結果、「HandlerInterceptor」とやらがヒットしたので使ってみました。
※実際に使ったのは業務上なので、ここでは簡単なサンプルとします。
●HandlerInterceptorのJavaDoc
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/handler/HandlerInterceptorAdapter.html
使い方は非常に簡単で、「HandlerInterceptorAdapter」を継承したクラスを一つ用意しまし。
public class TestInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { System.out.println("①コントローラ実行前(Controllerにリクエストが届く前)に処理。") } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { System.out.println("②JSPの描画前に処理される。"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handle, Exception ex) { System.out.println("③JSPの描画後に処理される。"); } }
次に、上記のInterceptorを使えるようにcontext.xmlを設定します。
<beans xmlns="http://www.springframework.org/schema/beans" ~略~> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/*/TestView/init"/> <bean class="mvctest.SampleInterceptor" /> </mvc:interceptor> </mvc:interceptors> </beans>
これで、任意のコンテキストパスで「TestView/init」を実行すると、Interceptorが動作します。
TestViewの任意のメソッド実行時に発動したい場合は「/init」を「/*」にします。