Spring MVC(四)
阿新 • • 發佈:2020-10-12
攔截器的定義
(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方法。