過濾器是一個程序,它先于與之相關(guān)的servlet或jsp頁面運行在服務(wù)器上。過濾器可附加到一個或多個servlet或jsp頁面上,并且可以檢查進入這些資源的請求信息。
在這之后,過濾器可以作如下的選擇:
①以常規(guī)的方式調(diào)用資源(即,調(diào)用servlet或jsp頁面)。
②利用修改過的請求信息調(diào)用資源。
③調(diào)用資源,但在發(fā)送響應(yīng)到客戶機前對其進行修改。
④阻止該資源調(diào)用,代之以轉(zhuǎn)到其他的資源,返回一個特定的狀態(tài)代碼或生成替換輸出。
過濾器的工作原理
在servlet作為過濾器使用時,它可以對客戶的請求進行處理。處理完成后,它會交給下一個過濾器處理,這樣,客戶的請求在過濾鏈里逐個處理,直到請求發(fā)送到目標(biāo)為止。例如,某網(wǎng)站里有提交“修改的注冊信息”的網(wǎng)頁,當(dāng)用戶填寫完修改信息并提交后,服務(wù)器在進行處理時需要做兩項工作:判斷客戶端的會話是否有效;對提交的數(shù)據(jù)進行統(tǒng)一編碼。這兩項工作可以在由兩個過濾器組成的過濾鏈里進行處理。當(dāng)過濾器處理成功后,把提交的數(shù)據(jù)發(fā)送到最終目標(biāo);如果過濾器處理不成功,將把視圖派發(fā)到指定的錯誤頁面。
過濾器的生命周期
public void init(filterconfig filterconfig) throws servletexception;//初始化和我們編寫的servlet程序一樣,filter的創(chuàng)建和銷毀由web服務(wù)器負(fù)責(zé)。 web 應(yīng)用程序啟動時,web 服務(wù)器將創(chuàng)建filter 的實例對象,并調(diào)用其init方法,讀取web.xml配置,完成對象的初始化功能,從而為后續(xù)的用戶請求作好攔截的準(zhǔn)備工作(filter對象只會創(chuàng)建一次,init方法也只會執(zhí)行一次)。開發(fā)人員通過init方法的參數(shù),可獲得代表當(dāng)前filter配置信息的filterconfig對象。
public void dofilter(servletrequest request, servletresponse response, filterchain chain) throws ioexception, servletexception;//攔截請求這個方法完成實際的過濾操作。當(dāng)客戶請求訪問與過濾器關(guān)聯(lián)的url的時候,servlet過濾器將先執(zhí)行dofilter方法。filterchain參數(shù)用于訪問后續(xù)過濾器。
public void destroy();//銷毀filter對象創(chuàng)建后會駐留在內(nèi)存,當(dāng)web應(yīng)用移除或服務(wù)器停止時才銷毀。在web容器卸載 filter 對象之前被調(diào)用。該方法在filter的生命周期中僅執(zhí)行一次。在這個方法中,可以釋放過濾器使用的資源。
推薦教程:《java教程》