過濾器Filter
過濾器的概念:
1.過濾作用盹沈,對從客戶端向服務(wù)器端發(fā)送的請求進(jìn)行過濾咱士,也可以對服務(wù)器端返回的響應(yīng)進(jìn)行處理影斑。
2.它使用戶可以改變一個request和修改一個 response.框仔。
3.Filter 不是一個servlet惠遏,它不能產(chǎn)生一個response砾跃,但是它能夠在一個request到達(dá)servlet之 前預(yù)處理request,也可以在 response離開servlet時處理response节吮。換句話說蜓席,filter其實(shí)是客戶端與servlet中間的一個傳遞者,并且它可以對要傳遞 的東西進(jìn)行修改课锌。
注意:過濾器是用來攔截請求和響應(yīng)的厨内,不能產(chǎn)生響應(yīng),而servlet是用來處理請求并產(chǎn)生響應(yīng)的渺贤。
開發(fā)filter的兩個基本步驟
1.編寫java類實(shí)現(xiàn)Filter接口,并實(shí)現(xiàn)其 do Filter方法
亂碼處理好后,必須放行,若沒放行,則會卡死
2.在 web.xml 文件中使用<filter>和<filter-mapping>元素對編寫的filter類進(jìn)行注冊雏胃,并設(shè)置它所能攔截的資源。
/* :表示攔截所有的請求
Filter的三種典型應(yīng)用:
1.可以在Filter中根據(jù)條件決定是否調(diào)用chain.doFilter(request, response)方法志鞍,即是否讓目標(biāo)資源執(zhí)行
2.在讓目標(biāo)資源執(zhí)行之前瞭亮,可以對request\response作預(yù)處理,再讓目標(biāo)資源執(zhí)行
3.在目標(biāo)資源執(zhí)行之后固棚,可以捕獲目標(biāo)資源的執(zhí)行結(jié)果统翩,從而實(shí)現(xiàn)一些特殊的功能
Filter鏈:
在一個web工程中仙蚜,可以開發(fā)編寫多個Filter,這些Filter組合起來稱之為一個Filter鏈.web服務(wù)器根據(jù)Filter在web.xml文件中的注冊順序厂汗,決定先調(diào)用哪個Filter委粉,當(dāng)?shù)谝粋€Filter的doFilter方法被調(diào)用時,web服務(wù)器會創(chuàng)建一個代表Filter鏈的FilterChain對象傳遞給該方法娶桦。在doFilter方法中贾节,開發(fā)人員如果調(diào)用了FilterChain對象的doFilter方法,則web服務(wù)器會檢查FilterChain對象中是否還有filter衷畦,如果有栗涂,則調(diào)用第2個filter,如果沒有祈争,則調(diào)用目標(biāo)資源斤程。
Filter的生命周期:
Filter的創(chuàng)建:????????項(xiàng)目已發(fā)布,服務(wù)器啟動
Filter的創(chuàng)建和銷毀由WEB服務(wù)器負(fù)責(zé)。 web 應(yīng)用程序啟動時菩混,web 服務(wù)器將創(chuàng)建Filter 的實(shí)例對象暖释,并調(diào)用其init方法,完成對象的初始化功能墨吓,從而為后續(xù)的用戶請求作好攔截的準(zhǔn)備工作,filter對象只會創(chuàng)建一次纹磺,init方法也只會執(zhí)行一次帖烘。通過init方法的參數(shù),可獲得代表當(dāng)前filter配置信息的FilterConfig對象橄杨。
Filter的銷毀:????????服務(wù)器關(guān)閉
Web容器調(diào)用destroy方法銷毀Filter秘症。destroy方法在Filter的生命周期中僅執(zhí)行一次。在destroy方法中式矫,可以釋放過濾器使用的資源乡摹。
FilterCfig接口:
例:
(一)處理網(wǎng)站的GET/POST請求亂碼
1.編寫java類,實(shí)現(xiàn)Filter接口
2.在web.xml 文件中配置<filter>和<filter-mapping>
(二)處理網(wǎng)站中未登陸訪問需要登陸的地址(點(diǎn)擊+拼接)
1.需要從sesion域中獲取當(dāng)前登陸狀態(tài),根據(jù)需要轉(zhuǎn)型后,做出判斷,指定相應(yīng)限制條件
2.web.xml 配置, <url-pattern ></url-pattern>? 配置相應(yīng)網(wǎng)址地址,防止過濾失效