SSM-SpringMVC-深入SpringMVC元件-攔截器
攔截器的定義
需要實作org.springframework.web.servlet.HandlerInterceptor接口,該接口有三個方法:
- preHandle:在處理器之前執行的前置方法,傳回一個布爾值,會影響後面SpringMVC的流程
- postHandle:處理器之後執行的後置方法,處理器的邏輯完成後運作它
- afterCompletion:無論是否産生異常都會渲染視圖後執行方法
攔截器的執行流程
開發攔截器
必須實作HandlerInterceptor接口,SpringMVC攔截器設計:
當XML配置檔案加入元素< mvc:annotation-driven >或者使用java配置注解@EnableWebMcv時,系統會初始化攔截器ConversionServiceExposingInterceptor,它是一個被SpringMVC系統預設加載的攔截器,主要作用是根據配置在控制器上的注解來完成對應的功能。
HandlerInterceptorAdapter是一個公共攔截器:
public class Roleinterceptor extends HandlerInterceptorAdapter {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.err.println("preHandle");
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.err.println("postHandle");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.err.println("afterCompletion");
}
}
還需要在SpringMVC配置檔案中配置才能使用:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/role/*.do"></mvc:mapping>
<bean class="com.ssm.interceptor.RoleInterCeptor"/>
</mvc:interceptor>
</mvc:interceptors>
用元素< mvc:interceptors >配置攔截器,裡面可以配置多個攔截器,< mvc:mapping >的屬性path,告訴SpringMVC該攔截器攔截什麼請求,使用一個正則式的比對
多個攔截器執行的順序
性path,告訴SpringMVC該攔截器攔截什麼請求,使用一個正則式的比對
多個攔截器執行的順序
按照配置順序運作,先進入前置方法是按配置順序執行,然後運作處理器代碼,最後後置方法,後置方法和處理方法是按照配置逆序運作的