您好,登錄后才能下訂單哦!
今天給大家介紹一下SpringMVC中攔截器的實現是怎樣的。文章的內容小編覺得不錯,現在給大家分享一下,覺得有需要的朋友可以了解一下,希望對大家有所幫助,下面跟著小編的思路一起來閱讀吧。
SpringMVC 中的 Interceptor 攔截器是非常重要和相當有用的,它的主要作用是攔截指定的用戶請求,并進行相應的預處理與后處理。
其攔截的時間點在“處理器映射器根據用戶提交的請求映射出了所要執行的處理器類,并且也找到了要執行該處理器類的處理器適配器,在處理器適配器執行處理器之前”。
當然,在處理器映射器映射出所要執行的處理器類時,已經將攔截器與處理器組合為了一個處理器執行鏈,并返回給了中央調度器。
過濾器是servlet規范的一部分,任何javaweb工具都能夠使用。
過濾器基于回調函數。
攔截器是spring的AOP思想的具體應用,攔截器是基于反射機制。
攔截器是springmvc自己的,只有springmvc框架的工程才能使用。
攔截器只會攔截訪問的控制方法,對靜態資源,不走controller的資源是不用的。
攔截器可以獲取IOC容器中的各個bean,而過濾器就不行,這點很重要,在攔截器里注入一個service,可
以調用業務邏輯。
自定義攔截器,需要實現 HandlerInterceptor 接口。而該接口中含有三個方法:
? preHandle(request,response, Object handler):
該方法在處理器方法執行之前執行。其返回值為 boolean,若為 true,則緊接著會執行處理器方法,且會將 afterCompletion()方法放入到一個專門的方法棧中等待執行。
? postHandle(request,response, Object handler,modelAndView):
該方法在處理器方法執行之后執行。處理器方法若最終未被執行,則該方法不會執行。
由于該方法是在處理器方法執行完后執行,且該方法參數中包含 ModelAndView,所以該方法可以修改處理器方法的處理結果數據,且可以修改跳轉方向。
? afterCompletion(request,response, Object handler, Exception ex): 當 preHandle()方法返回 true 時,會將該方法放到專門的方法棧中,等到對請求進行響應的所有
工作完成之后才執行該方法。即該方法是在中央調度器渲染(數據填充)了響應頁面之后執行的,此時對 ModelAndView 再操作也對響應無濟于事。
afterCompletion 最后執行的方法,清除資源,例如在 Controller 方法中加入數據
package com.dongmu.interceptor; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Interceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("攔截器在處理器方法執行前攔截。"); return true; } public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("攔截器在處理器方法執行后處理"); public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("攔截器一定會執行的方法"); }
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.dongmu.interceptor.Interceptor"/> </mvc:interceptor> </mvc:interceptors>
當有多個攔截器時,形成攔截器鏈。攔截器鏈的執行順序,與其注冊順序一致。需要再次強調一點的是,當某一個攔截器的 preHandle()方法返回 true 并被執行到時,會向一個專門的方法棧中放入該攔截器的 afterCompletion()方法。
注意:每次通過servlet,也就是處理器controller的請求都會經過攔截器。(指定路徑的情況下)
以上就是SpringMVC中攔截器的實現是怎樣的的全部內容了,更多與SpringMVC中攔截器的實現是怎樣的相關的內容可以搜索億速云之前的文章或者瀏覽下面的文章進行學習哈!相信小編會給大家增添更多知識,希望大家能夠支持一下億速云!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。