過濾器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方法

亂碼處理好后,必須放行,若沒放行,則會卡死
2.在 web.xml 文件中使用<filter>和<filter-mapping>元素對編寫的filter類進行注冊,并設置它所能攔截的資源。

/* :表示攔截所有的請求
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)址地址,防止過濾失效
