過濾器
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 類進行注冊惩坑,并設(shè)置它所能攔截
的資源
Filter 接口中有一個 doFilter 方法,當開發(fā)人員編寫好 Filter也拜,并配置對哪
個 web 資源進行攔截后以舒,Web 服務器每次在調(diào)用 web 資源的 service 方法之
前,都會先調(diào)用一下 filter 的 doFilter 方法慢哈。因此可以達到如下效果:
調(diào)用目標資源之前蔓钟,讓一段代碼執(zhí)行。
是否調(diào)用目標資源(即是否讓用戶訪問 web 資源)卵贱。
web 服務器在調(diào)用 doFilter 方法時滥沫,會傳遞一個 filterChain 對象進來,
filterChain 對象是 filter 接口中最重要的一個對象键俱,它提供了一個 doFilter 方法兰绣,
開發(fā)人員可以根據(jù)需求決定是否調(diào)用此方法,調(diào)用該方法编振,則 web 服務器就
會調(diào)用 web 資源的 service 方法缀辩,即 web 資源就會被訪問,否則 web 資源不
會被訪問踪央。(本質(zhì)是放行臀玄,調(diào)用 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è)我們想做一個對在線人數(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ù)。