2019-06-11

過濾器

Filter 即為過濾,用于在 Servlet 之外對 Request 或者 Response 進行修改。

它主要用于對用戶請求進行預處理,也可以對 HttpServletResponse 進行后處理。

使用 Filter 的完整流程: Filter 對用戶請求進行預處理,接著將請求交給 Servlet

進行處理并生成響應,最后 Filter 再對服務器響應進行后處理。在一個 web 應

用中,可以開發(fā)編寫多個 Filter,這些 Filter 組合起來稱之為一個 Filter 鏈。

若是一個過濾器鏈:先配置先執(zhí)行(請求時的執(zhí)行順序);響應時: 以相反的

順序執(zhí)行。


實現(xiàn)過濾

我們可以通過實現(xiàn)一個叫做 javax.servlet.Fileter 的接口來實現(xiàn)一個過濾器,

其中定義了三個方法,init(), doFilter(), destroy()分別在相應的時機執(zhí)行。后期觀

察生命周期。 Filter 的實現(xiàn)只需要兩步:

Step1: 編寫 java 類實現(xiàn) Filter 接口,并實現(xiàn)其 doFilter 方法。

Step2: 在 web.xml 文件中對編寫的 filter 類進行注冊,并設置它所能攔截

的資源

Filter 接口中有一個 doFilter 方法,當開發(fā)人員編寫好 Filter,并配置對哪

個 web 資源進行攔截后,Web 服務器每次在調用 web 資源的 service 方法之

前,都會先調用一下 filter 的 doFilter 方法。因此可以達到如下效果:

調用目標資源之前,讓一段代碼執(zhí)行。

是否調用目標資源(即是否讓用戶訪問 web 資源)。

web 服務器在調用 doFilter 方法時,會傳遞一個 filterChain 對象進來,

filterChain 對象是 filter 接口中最重要的一個對象,它提供了一個 doFilter 方法,

開發(fā)人員可以根據(jù)需求決定是否調用此方法,調用該方法,則 web 服務器就

會調用 web 資源的 service 方法,即 web 資源就會被訪問,否則 web 資源不

會被訪問。(本質是放行,調用 doFilter 方法后,即請求可以到達資源)


url-pattern 的配置:

[if !supportLists]②??????????[endif]置具體路徑/index.html/TestServlet.do

②帶有通配符的配置*.do /* /user/* *.html *.jsp


監(jiān)聽器

web 監(jiān)聽器是一種 Servlet 中的特殊的類,它們能幫助開發(fā)者監(jiān)聽 web 中

的特定事件,比如 ServletContext,HttpSession,ServletRequest 的創(chuàng)建和銷毀;變

量的創(chuàng)建、銷毀和修改等。 可以在某些動作前后增加處理,實現(xiàn)監(jiān)控。例如可

以用來統(tǒng)計在線人數(shù)等。

實現(xiàn)

監(jiān)聽器有三類 8 種:⑴監(jiān)聽生命周期:實現(xiàn)接口ServletRequestListener、

HttpSessionListener、 ServletContextListener⑵監(jiān)聽值的變化:實現(xiàn)接口

ServletRequestAttributeListener、HttpSessionAttributeListener、

ServletContextAttributeListener⑶針對 session 中的對象:監(jiān)聽 session 中的

java 對象(javaBean) 是 javaBean 直接實現(xiàn)監(jiān)聽器的接口。這里我們只做一個簡

單的演示。假設我們想做一個對在線人數(shù)的監(jiān)控。

Step1:創(chuàng)建一個監(jiān)聽器,需要實現(xiàn)某種接口,根據(jù)需求選取

HttpSessionListener

Step2:在 web.xml 中配置該監(jiān)聽器

創(chuàng)建一個類,并實現(xiàn) HttpSessionListener 接口,用來檢測 Session 的創(chuàng)建和

銷毀。在類中定義一個成員變量用來存儲當前的 session 個數(shù)。

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容