教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢(xún)/投訴熱線:400-618-4000

什么是filter?filter是用來(lái)做什么的?

更新時(shí)間:2020年09月18日14時(shí)12分 來(lái)源:傳智播客 瀏覽次數(shù):

Filter被稱(chēng)作過(guò)濾器或者攔截器,其基本功能就是對(duì)Servlet容器調(diào)用Servlet的過(guò)程進(jìn)行攔截,從而在Servlet進(jìn)行響應(yīng)處理前后實(shí)現(xiàn)一些特殊功能。這就好比現(xiàn)實(shí)中的污水凈化設(shè)備,它可以~~看做~~看作一個(gè)過(guò)濾器,專(zhuān)門(mén)用于過(guò)濾污水雜質(zhì)。圖1描述了Filter在Web應(yīng)用中的攔截過(guò)程,具體如下:

什么是filter


在圖1中,當(dāng)瀏覽器訪問(wèn)服務(wù)器中的目標(biāo)資源時(shí),會(huì)被Filter攔截,在Filter中進(jìn)行預(yù)處理操作,然后再將請(qǐng)求轉(zhuǎn)發(fā)給目標(biāo)資源。當(dāng)服務(wù)器接收到這個(gè)請(qǐng)求后會(huì)對(duì)其進(jìn)行響應(yīng),在服務(wù)器處理響應(yīng)的過(guò)程中,也需要先將響應(yīng)結(jié)果發(fā)送給攔截器,在攔截器中對(duì)響應(yīng)結(jié)果進(jìn)行處理后,才會(huì)發(fā)送給客戶端。

其實(shí),F(xiàn)ilter過(guò)濾器就是一個(gè)實(shí)現(xiàn)了javax.servlet.Filter接口的類(lèi),在javax.servlet.Filter接口中定義了三個(gè)方法,具體如表1所示。

表1 Filter接口中的方法

方法聲明 功能描述
init(FilterConfig filterConfig) 例4-1 init()方法用來(lái)初始化過(guò)濾器,開(kāi)發(fā)人員可以在init()方法中完成與構(gòu)造方法類(lèi)似的初始化功能,如果初始化代碼中要使用到FilterConfig對(duì)象,那么,這些初始化代碼就只能在Filter的init()方法中編寫(xiě),而不能在構(gòu)造方法中編寫(xiě)
doFilter(ServletRequest request,ServletResponse response,FilterChain chain) doFilter()方法有多個(gè)參數(shù),其中,參數(shù)request和response為Web服務(wù)器或Filter鏈中的上一個(gè)Filter傳遞過(guò)來(lái)的請(qǐng)求和響應(yīng)對(duì)象;參數(shù)chain代表當(dāng)前Filter鏈的對(duì)象,在當(dāng)前Filter對(duì)象中的doFilter()方法內(nèi)部需要調(diào)用FilterChain對(duì)象的doFilter()方法,才能把請(qǐng)求交付給Filter鏈中的下一個(gè)Filter或者目標(biāo)程序去處理。
destroy() destroy()方法在Web服務(wù)器卸載Filter對(duì)象之前被調(diào)用,該方法用于釋放被Filter對(duì)象打開(kāi)的資源,例如關(guān)閉數(shù)據(jù)庫(kù)和IO流。

表1中的這三個(gè)方法都是Filter的生命周期方法,其中init()方法在Web應(yīng)用程序加載的時(shí)候調(diào)用,destroy()方法在Web應(yīng)用程序卸載的時(shí)候調(diào)用,這兩個(gè)方法都只會(huì)被調(diào)用一次,而doFilter()方法只要有客戶端請(qǐng)求時(shí)就會(huì)被調(diào)用,并且Filter所有的工作集中在doFilter()方法中。



猜你喜歡:
Java高級(jí)軟件工程師課程

filter的執(zhí)行順序是怎樣的?

Java培訓(xùn)實(shí)戰(zhàn)教程之淺談過(guò)濾器Filter

0 分享到:
和我們?cè)诰€交談!