JavaWeb課程系列
第14章Filter
1.提出問題
1、我們在訪問后臺很多頁面時都需要登錄,只有登錄的用戶才能查看這些頁面,我們需要在每次請求的時候都檢查用戶是否登陸,這樣做很麻煩,有沒有一種方法可以在我們請求之前就幫我們做這些事情。有!
2、我們web應(yīng)用經(jīng)常會接收中文字符,由于可能導(dǎo)致中文亂碼,我們每次都需要在方法的開始使用request.setCharacterEncoding(“utf-8”);能不能在我們要獲取參數(shù)值直接就可以自己設(shè)置好編碼呀。能!
這種問題的解決方法我們想到了一種辦法。那就是在每次請求之前我們先將它攔截起來,當(dāng)我們設(shè)置好一切東西的時候,再將請求放行。類似與我們地鐵站的檢票系統(tǒng)。每個人進站的時候必須刷卡,扣完錢后才可以進站坐車。
web中也有這個機制,我們叫做過濾器。
就是我們接下來學(xué)習(xí)的filter
2.Filter簡介
2.1什么是filter
???????? 1)Filter(過濾器) 的基本功能是對 Servlet 容器調(diào)用 Servlet (JSP)的過程進行攔截,??? 從而在 Servlet 處理請求前和Servlet響應(yīng)請求后實現(xiàn)一些特殊的功能。
???????? 2)在 Servlet API 中定義了三個接口類來開供開發(fā)人員編寫 Filter 程序:Filter, ????? FilterChain, FilterConfig
???????? 3)Filter 程序是一個實現(xiàn)了 Filter 接口的 Java 類,與 Servlet 程序相似,它由 Servlet ?????? 容器進行調(diào)用和執(zhí)行
???????? 4)Filter 程序需要在 web.xml 文件中進行注冊和設(shè)置它所能攔截的資源:Filter 程序??? 可以攔截 Jsp, Servlet, 靜態(tài)圖片文件和靜態(tài) html 文件
2.2 filter的運行原理是什么
這個Servlet過濾器就是我們的filter
1)當(dāng)在 web.xml 中注冊了一個 Filter 來對某個 Servlet 程序進行攔截處理時,這個 Filter 就成了 Tomcat與該 Servlet 程序的通信線路上的一道關(guān)卡,該 Filter 可以對 Servlet 容器發(fā)送給 Servlet 程序的請求和 Servlet 程序回送給 Servlet 容器的響應(yīng)進行攔截,可以決定是否將請求繼續(xù)傳遞給 Servlet 程序,以及對請求和相應(yīng)信息是否進行修改
2)在一個 web 應(yīng)用程序中可以注冊多個 Filter 程序,每個 Filter 程序都可以對一個或一組 Servlet 程序進行攔截。
3)若有多個 Filter 程序?qū)δ硞€ Servlet 程序的訪問過程進行攔截,當(dāng)針對該 Servlet 的訪問請求到達時,web 容器將把這多個 Filter 程序組合成一個 Filter 鏈(過濾器鏈)。Filter 鏈中各個 Filter 的攔截順序與它們在應(yīng)用程序的 web.xml 中映射的順序一致