天天看點

SSM-SpringMVC-深入SpringMVC元件-攔截器SSM-SpringMVC-深入SpringMVC元件-攔截器

SSM-SpringMVC-深入SpringMVC元件-攔截器

攔截器的定義

​ 需要實作org.springframework.web.servlet.HandlerInterceptor接口,該接口有三個方法:

  • preHandle:在處理器之前執行的前置方法,傳回一個布爾值,會影響後面SpringMVC的流程
  • postHandle:處理器之後執行的後置方法,處理器的邏輯完成後運作它
  • afterCompletion:無論是否産生異常都會渲染視圖後執行方法

攔截器的執行流程

SSM-SpringMVC-深入SpringMVC元件-攔截器SSM-SpringMVC-深入SpringMVC元件-攔截器

開發攔截器

​ 必須實作HandlerInterceptor接口,SpringMVC攔截器設計:

SSM-SpringMVC-深入SpringMVC元件-攔截器SSM-SpringMVC-深入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該攔截器攔截什麼請求,使用一個正則式的比對

多個攔截器執行的順序

​ 按照配置順序運作,先進入前置方法是按配置順序執行,然後運作處理器代碼,最後後置方法,後置方法和處理方法是按照配置逆序運作的

繼續閱讀