攔截器和過濾器的區別


攔截器與過濾器的區別:

1、過濾器和攔截器觸發時機不一樣,過濾器是在請求進入容器后,但請求進入servlet之前進行預處理的。請求結束返回也是,是在servlet處理完后,返回給前端之前。
如下圖:

 

 

2、攔截器可以獲取IOC容器中的各個bean,而過濾器就不行,因為攔截器是spring提供並管理的,spring的功能可以被攔截器使用,在攔截器里注入一個service,可以調用業務邏輯。而過濾器是JavaEE標准,只需依賴servlet api ,不需要依賴spring。

過濾器攔截器運行先后步驟:

其中第2步,SpringMVC的機制是由DispaterServlet來分發請求給不同的Controller,其實這一步是在Servlet的service()方法中執行的.

3、過濾器的實現基於回調函數。而攔截器(代理模式)的實現基於反射,代理分靜態代理和動態代理,動態代理是攔截器的簡單實現。

何時使用攔截器?何時使用過濾器?

  • 如果是非spring項目,那么攔截器不能用,只能使用過濾器。
  • 如果是處理controller前后,既可以使用攔截器也可以使用過濾器。
  • 如果是處理dispaterServlet前后,只能使用過濾器。
  •  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM