Spring MVC 的 攔截器 類似於 Servlet 開發中的過濾器 Filter,用於處理器 預處理 和 後處理 。將攔截器依一定的順序聯結成一條鏈,這條鏈稱為 攔截器鏈(Interceptor Chain) 。在存取被攔截的方 法或欄位時,攔截器鏈中的攔截器就會依其先前定義的順序被呼叫。攔截器也是AOP思想的具體實作。
區別 | 過濾器(Filter) | 攔截器(Intercepter) |
使用範圍 | 是servlet 規格的一部分,任何 Java Web 工程使用 | # 框架的工程才能用|
在url-pattern 中設定了/*之後, 對所有要存取的資源中攔截 | 在 |
public class MyHandlerInterceptor1 implements HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { System.out.println("preHandle running..."); return true; } public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { System.out.println("postHandle running..."); } public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { System.out.println("afterCompletion running..."); } }
<!--配置拦截器--> <interceptors> <interceptor> <mapping></mapping> <bean></bean> </interceptor> </interceptors>
@RequestMapping("/quick23") @ResponseBody public ModelAndView quickMethod23() throws IOException, ParseException { System.out.println("目标方法执行...."); ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("name","modelname"); modelAndView.setViewName("index"); return modelAndView; }
#http ://localhost:8080/project/quick23控制台列印結果
##多重攔截器操作
攔截器方法說明
#說明 | |
方法將在請求處理之前進行調用,該方法的返回值是布林值Boolean類型的, 當它返回為false 時,表示請求結束,後續的 Interceptor 和Controller 都不會 值為true 時就會繼續調用下一個Interceptor 的preHandle 方 法 | |
該方法是在當前請求進行處理之後被調用,前提是preHandle 方法的回傳值為 true 時才能被呼叫,且它會在DispatcherServlet 進行視圖返回渲染之前被調 1 操作 | |
該方法將在整個請求結束之後,也就是在DispatcherServlet 渲染了對應的視圖 之後執行,前提是preHandle 方法的返回值為 | # |
以上是Java的SpringMVC攔截器怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!