Spring MVC 攔截器(2)-WebRequestInterceptor

上一節小博老師給你們介紹了SpringMVC中使用HandlerInterceptor接口實現攔截器的方法,今天小博老師先給你們介紹另一種攔截器的實現方式WebRequestInterceptor。咱們先來看一下WebRequestInterceptor接口的源碼結構:session

WebRequestInterceptor接口同HandlerInterceptor接口同樣定義了三個方法,preHandle 、postHandle 以及afterCompletion。兩個接口的方法名都相同,調用次序也相同。即preHandle是在請求處理以前調用;postHandle實在請求處理以後,視圖渲染以前調用;afterCompletion是在視圖渲染以後調用。接下來咱們看看他們的不一樣之處。post

1. 方法參數不一樣。WebRequest是Spring定義的接口,它是對HttpServletRequest的封裝。對WebRequest 進行的操做都將同步到HttpServletRequest 中。WebRequest 的set/getAttribute(name, value, scope)比HttpServletRequest 的set/getAttribute多了一個scope參數。它有三個取值:3d

SCOPE_REQUEST:它的值是0,表示request請求做用範圍。code

SCOPE_SESSION :它的值是1,表示session請求做用範圍。對象

SCOPE_GLOBAL_SESSION :它的值是2 ,表示全局會話做用範圍,即ServletContext上下文做用範圍。blog

2. preHandle 方法。WebRequestInterceptor的該方法返回值爲void,不是boolean。因此該方法不能用於請求阻斷,通常用於資源準備。接口

3. postHandle 方法。preHandle 中準備的數據均可以經過參數WebRequest訪問。ModelMap 是Controller 處理以後返回的Model 對象,能夠經過改變它的屬性來改變Model 對象模型,達到改變視圖渲染效果的目的。ip

4. afterCompletion方法。Exception 參數表示的是當前請求的異常對象,若是Controller 拋出的異常已經被處理過,則Exception對象爲null 。資源

相關文章
相關標籤/搜索