過濾器Filter


過濾器Filter

過濾器的概念:

1.過濾作用,對從客戶端向服務器端發(fā)送的請求進行過濾,也可以對服務器端返回的響應進行處理。

2.它使用戶可以改變一個request和修改一個 response.。

3.Filter 不是一個servlet,它不能產生一個response,但是它能夠在一個request到達servlet之 前預處理request,也可以在 response離開servlet時處理response。換句話說,filter其實是客戶端與servlet中間的一個傳遞者,并且它可以對要傳遞 的東西進行修改。

注意:過濾器是用來攔截請求和響應的,不能產生響應,而servlet是用來處理請求并產生響應的。

開發(fā)filter的兩個基本步驟

1.編寫java類實現(xiàn)Filter接口,并實現(xiàn)其 do Filter方法

do Fiter

亂碼處理好后,必須放行,若沒放行,則會卡死

2.在 web.xml 文件中使用<filter>和<filter-mapping>元素對編寫的filter類進行注冊,并設置它所能攔截的資源。


web.xml

/* :表示攔截所有的請求

Filter的三種典型應用:

1.可以在Filter中根據(jù)條件決定是否調用chain.doFilter(request, response)方法,即是否讓目標資源執(zhí)行

2.在讓目標資源執(zhí)行之前,可以對request\response作預處理,再讓目標資源執(zhí)行

3.在目標資源執(zhí)行之后,可以捕獲目標資源的執(zhí)行結果,從而實現(xiàn)一些特殊的功能

Filter鏈:

在一個web工程中,可以開發(fā)編寫多個Filter,這些Filter組合起來稱之為一個Filter鏈.web服務器根據(jù)Filter在web.xml文件中的注冊順序,決定先調用哪個Filter,當?shù)谝粋€Filter的doFilter方法被調用時,web服務器會創(chuàng)建一個代表Filter鏈的FilterChain對象傳遞給該方法。在doFilter方法中,開發(fā)人員如果調用了FilterChain對象的doFilter方法,則web服務器會檢查FilterChain對象中是否還有filter,如果有,則調用第2個filter,如果沒有,則調用目標資源。

Filter的生命周期:

Filter的創(chuàng)建:????????項目已發(fā)布,服務器啟動

Filter的創(chuàng)建和銷毀由WEB服務器負責。 web 應用程序啟動時,web 服務器將創(chuàng)建Filter 的實例對象,并調用其init方法,完成對象的初始化功能,從而為后續(xù)的用戶請求作好攔截的準備工作,filter對象只會創(chuàng)建一次,init方法也只會執(zhí)行一次。通過init方法的參數(shù),可獲得代表當前filter配置信息的FilterConfig對象。

Filter的銷毀:????????服務器關閉

Web容器調用destroy方法銷毀Filter。destroy方法在Filter的生命周期中僅執(zhí)行一次。在destroy方法中,可以釋放過濾器使用的資源。

FilterCfig接口:

例:

(一)處理網(wǎng)站的GET/POST請求亂碼

1.編寫java類,實現(xiàn)Filter接口

2.在web.xml 文件中配置<filter>和<filter-mapping>

(二)處理網(wǎng)站中未登陸訪問需要登陸的地址(點擊+拼接)

1.需要從sesion域中獲取當前登陸狀態(tài),根據(jù)需要轉型后,做出判斷,指定相應限制條件

2.web.xml 配置, <url-pattern ></url-pattern>? 配置相應網(wǎng)址地址,防止過濾失效

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容