1. 程式人生 > 實用技巧 >Spring MVC(四)

Spring MVC(四)

攔截器的定義

(1)實現HandlerInterceptor介面或者繼承HandlerInterceptor介面的實現類來定義
(2)通過實現WebRequestInterceptor介面或者繼承HandlerInterceptor介面的實現類來定義
以實現HandlerInterceptor介面實現:

public class TestInterceptor implements HandlerInterceptor {
    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println("該方法在控制器的處理請求方法執行完成後執行,即檢視渲染結束後執行,可以通過此方法實現一些資源清理、記錄日誌資訊等工作");
    }
    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        System.out.println("該方法在控制器的處理請求方法呼叫之後、解析檢視之前執行,可以通過此方法對請求域中的模型和檢視做進一步的修改。");
    }
    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        System.out.println("該方法在控制器的處理請求方法前執行,其返回值表示是否中斷後續操作,返回 true 表示繼續向下執行,返回 false 表示中斷後續操作");
        return false;
    }
}

攔截器的配置

<!-- 配置攔截器 -->
<mvc:interceptors>
    <!-- 配置一個全域性攔截器,攔截所有請求 -->
    <bean class="interceptor.TestInterceptor" /> 
    <mvc:interceptor>
        <!-- 配置攔截器作用的路徑 -->
        <mvc:mapping path="/**" />
        <!-- 配置不需要攔截作用的路徑 -->
        <mvc:exclude-mapping path="" />
        <!-- 定義<mvc:interceptor>元素中,表示匹配指定路徑的請求才進行攔截 -->
        <bean class="interceptor.Interceptor1" />
    </mvc:interceptor>
    <mvc:interceptor>
        <!-- 配置攔截器作用的路徑 -->
        <mvc:mapping path="/gotoTest" />
        <!-- 定義在<mvc: interceptor>元素中,表示匹配指定路徑的請求才進行攔截 -->
        <bean class="interceptor.Interceptor2" />
    </mvc:interceptor>
</mvc:interceptors>

(1)/**表示攔截所有路徑
(2)mvc:exclude-mapping子元素進行配置不需要攔截的內容
(3)必須按照<mvc:mapping.../>、<mvc:exclude-mapping.../>、<bean.../> 的順序配置。

多個攔截器

如果是xml配置,則按配置順序,先執行第一個的preHandle方法,再執行第二個的preHandle方法,往下是postHandle和afterCompletion方法。