前幾天有人跟我說(shuō)interceptor跟filter差不多,這個(gè)當(dāng)時(shí)還真把我蒙住了,我知道有區(qū)別,但沒(méi)想清楚,這幾天整理了一下。
首先從表現(xiàn)形式上來(lái)說(shuō),兩者確實(shí)很相似,同樣可以在你寫(xiě)的jsp、servlet代碼的前后加入其它的動(dòng)作,但是兩者是有本質(zhì)區(qū)別的。
1、 filter基于回調(diào)函數(shù),我們需要實(shí)現(xiàn)的filter接口中doFilter方法就是回調(diào)函數(shù),而interceptor則基于java本身的反射機(jī)制,如果對(duì)這種形式不了解,可以去看看java是如何實(shí)現(xiàn)動(dòng)態(tài)代理的,這是aop的基礎(chǔ)。這是兩者最本質(zhì)的區(qū)別。
2、 filter是依賴于servlet容器的,即只能在servlet容器中執(zhí)行,很顯然沒(méi)有servlet容器就無(wú)法來(lái)回調(diào)doFilter方法。而interceptor與servlet容器無(wú)關(guān)。