Engineer Blog開発者ブログ

2018.10.22

TERASOLUNA(Spring)ネタ① Controller実行前後に処理を入れる

Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY

 

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」を「/*」にします。 
 

Contact
お問い合わせ

電話番号0120 - 889 - 236
受付時間:平日 9:00-18:00