Controller前後に実行される共通の処理を作る
というメモ。
HandlerInterceptorかWebRequestInterceptorの実装クラスを作り、
設定ファイルに書けば、Contorollerの前後に共通の処理を挟める
ようになる。
- 実装クラス
public class HogeInterceptor implements HandlerInterceptor { private static final Log log = LogFactory.getLog(HogeInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info("preHandle"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { log.info("postHandle"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { log.info("afterCompletion"); } }
- 設定ファイル
<mvc:interceptors> <bean class="jp.gr.java_conf.ykhr.sptest.HogeInterceptor" /> </mvc:interceptors>
特定のパスのみ実行したい場合の設定。
# マニュアルに書いてあっただけで試してない
<mvc:interceptors> <mvc:interceptor> <mapping path="/hoge/*"/> <bean class="jp.gr.java_conf.ykhr.sptest.HogeInterceptor" /> </mvc:interceptor> </mvc:interceptors>
その昔、DispatcherServletを拡張するとか思ってたが
愚かな行為だったようだ・・・。