1 SpringMVC攔截器
1.1 攔截器(interceptor)的作用
Spring MVC 的攔截器類似於 Servlet 開發中的過濾器 Filter,用於對處理器進行預處理和後處理。
將攔截器按一定的順序聯結成一條鏈,這條鏈稱為攔截器鏈(Interceptor Chain)。在訪問被攔截的方法或字段時,攔截器鏈中的攔截器就會按其之前定義的順序被調用。攔截器也是AOP具體思想的體現。
1.2 攔截器和過濾器區別
|
區別
|
過濾器
|
攔截器
|
|
適用範圍
|
時servlet規範中的一部分,任何Java Web工程都可以使用
|
是SpringMVC 框架自己的,只有使用了SpringMVC框架的工程才能使用
|
|
攔截範圍
|
在 url-pattern 中配置了/*之後,可以對所有要訪問的資源攔截
|
只會攔截訪問的控制器方法,如果訪問的是jsp、html、css、image或js是不會進行攔截的
|
1.3 攔截器快速入門
步驟:
- 創建攔截器類實現HandlerInterceptor接口
- 配置攔截器(spring-mvc.xml)
- 測試攔截器的攔截效果
1.4 攔截器的執行順序
先配置的preHandle先執行,先配置的postHandle、afterCompletion後執行
1.5 攔截器方法説明
|
方法名
|
説明
|
|
preHandle()
|
方法將在請求處理之前進行調用,該方法的返回值是布爾值Boolean類型的,當它返回為false時,表示請求結束,後續的Interceptor和Controller都不會再執行;當返回值為true時就會繼續調用下一個Interceptor的preHandle方法
|
|
postHandle()
|
該方法是在當前請求進行處理之後被調用,前提是preHandle方法的返回值為true時才能被調用哦個,且它會在DispatcherServlet進行視圖返回渲染之前被調用,所以我們可以在這個方法中對Controller處理之後的ModelAndView對象進行操作
|
|
afterCompletion()
|
該方法將在整個請求結束之後,也就是在DispatcherServlet渲染了對應的視圖之後執行,前提是preHandle方法的返回值為true時才能被調用
|