Java web技術(shù)應(yīng)用---監(jiān)聽(tīng)器

監(jiān)聽(tīng)器的定義

(專門用于對(duì)其他對(duì)象身上發(fā)生的事件或狀態(tài)改變進(jìn)行監(jiān)聽(tīng)和相應(yīng)處理的對(duì)象,當(dāng)被監(jiān)視的對(duì)象發(fā)生變化時(shí),立即采取相應(yīng)的行動(dòng))

定義:Servlet規(guī)范中定義的一種特殊的類掩缓,用于監(jiān)聽(tīng)ServletContext睛藻、HttpSession和ServletRequest等域?qū)ο蟮膭?chuàng)建與銷毀時(shí)間蓄诽,以及用于監(jiān)聽(tīng)域?qū)ο蟮膶傩园l(fā)生修改的事件功偿,監(jiān)聽(tīng)器對(duì)象可以在事件發(fā)生前、發(fā)生后做一些必要的處理

WEB應(yīng)用中的監(jiān)聽(tīng)器:

由Servlet規(guī)范提供的座慰,可以監(jiān)視客戶端的請(qǐng)求以及服務(wù)端的操作陨舱,同時(shí)可以監(jiān)視1.ServletContext(application,容器創(chuàng)建并且初始化的版仔,范圍整個(gè)Web應(yīng)用游盲,整個(gè)Web應(yīng)用只有一個(gè)application對(duì)象,Web容器關(guān)閉就會(huì)銷毀application對(duì)象)蛮粮、

2.HttpSession(session益缎,是一種保存上下文的機(jī)制,針對(duì)每一個(gè)會(huì)話然想,放在服務(wù)器端莺奔,通過(guò)session的id進(jìn)行區(qū)分的,瀏覽器和服務(wù)器結(jié)束后变泄,就會(huì)把session進(jìn)行銷毀)令哟、

3.ServletRequest(request恼琼,客戶發(fā)送請(qǐng)求時(shí),容器就會(huì)創(chuàng)建一個(gè)ServletRequest對(duì)象屏富,進(jìn)行封裝請(qǐng)求數(shù)據(jù)晴竞,同時(shí)會(huì)創(chuàng)建一個(gè)ServletResponse對(duì)象,進(jìn)行封裝響應(yīng)數(shù)據(jù)狠半,訪問(wèn)請(qǐng)求結(jié)束之后噩死,request對(duì)象就會(huì)被銷毀)。


image.png

image.png

第一個(gè)監(jiān)聽(tīng)器案例

步驟1:創(chuàng)建一個(gè)類并實(shí)現(xiàn)ServletContextListener接口(javax.servlet),并且實(shí)現(xiàn)了contextInitialized方法和contextDestroyed方法


image.png

image.png

步驟2:web.xml配置監(jiān)聽(tīng)對(duì)象

image.png

監(jiān)聽(tīng)器的啟動(dòng)順序
注冊(cè)順序加載監(jiān)聽(tīng)器神年,如果注冊(cè)含有過(guò)濾器甜滨、監(jiān)聽(tīng)器、Servlet瘤袖,
監(jiān)聽(tīng)器優(yōu)先級(jí)>過(guò)濾器優(yōu)先級(jí)>Servlet優(yōu)先級(jí)

監(jiān)聽(tīng)器的分類

按監(jiān)聽(tīng)的對(duì)象劃分
【a】用于監(jiān)聽(tīng)?wèi)?yīng)用程序環(huán)境對(duì)象(ServletContext)的事件監(jiān)聽(tīng)器。
【b】用于監(jiān)聽(tīng)用戶會(huì)話對(duì)象(HttpSession)的事件監(jiān)聽(tīng)器
【c】用于監(jiān)聽(tīng)請(qǐng)求消息對(duì)象(ServletRequest)的事件監(jiān)聽(tīng)器
按監(jiān)聽(tīng)的事件劃分
【a】監(jiān)聽(tīng)域?qū)ο笞陨淼膭?chuàng)建和銷毀的事件監(jiān)聽(tīng)器
定義:監(jiān)聽(tīng)的對(duì)象包括ServletContext昂验、HttpSession捂敌、ServletRequest,Servlet規(guī)范中定義了三個(gè)接口ServletContextListener既琴、HttpSessionListener占婉、ServletRequestListener來(lái)監(jiān)聽(tīng)這三個(gè)對(duì)象的創(chuàng)建及銷毀事件。
【b】監(jiān)聽(tīng)域?qū)ο笾械膶傩缘脑黾雍蛣h除的事件監(jiān)聽(tīng)器
【c】監(jiān)聽(tīng)綁定到HttpSession域中的某個(gè)對(duì)象的狀態(tài)的事件監(jiān)聽(tīng)器
ServletContext事件監(jiān)聽(tīng)器
ServletContext的創(chuàng)建及銷毀:ServletContext實(shí)現(xiàn)了ServletContextListener接口來(lái)監(jiān)聽(tīng)該對(duì)象的創(chuàng)建及銷毀事件甫恩,一個(gè)Web應(yīng)用下可以創(chuàng)建多個(gè)ServletContextListener逆济,但是一個(gè)Web應(yīng)用中只有一ServletContext對(duì)象,ServletContextListener對(duì)象的contextInitialized方法和contextDestroyed方法(主要用于數(shù)據(jù)庫(kù)連接關(guān)閉時(shí)磺箕,可以釋放一些資源奖慌,以免過(guò)度的占用),方法里的參數(shù)ServletContextEvent可以獲取ServletContext以及獲取一些初始化參數(shù)松靡。

ServletContextListener主要用途:做一些定時(shí)器:可以加載一些全局屬性對(duì)象简僧,可以創(chuàng)建全局的數(shù)據(jù)庫(kù)連接,以及加載一些緩存信息雕欺。

getServletContext():通過(guò)參數(shù)ServletContextEvent獲取ServletContext對(duì)象岛马,并且可以往全局變量ServletContext中存入變量,通過(guò)setAttribute方法屠列,這樣就可以在其他地方進(jìn)行獲取啦逆。
getInitParameter():通過(guò)ServletContext對(duì)象獲取初始化參數(shù)(初始化參數(shù)在web.xml中進(jìn)行配置)。
servletcontextlistener可以用于初始化各種屬性笛洛,或者在結(jié)束時(shí)釋放相關(guān)資源

image.png

HttpSession的事件監(jiān)聽(tīng)器
監(jiān)聽(tīng)域?qū)ο螅℉ttpSession):HttpSession實(shí)現(xiàn)了HttpSessionListener接口夏志,用于監(jiān)聽(tīng)該對(duì)象的創(chuàng)建及銷毀事件,一個(gè)HttpSession對(duì)象可以注冊(cè)多個(gè)HttpSessionListener接口撞蜂,一個(gè)Web應(yīng)用中也可以有多個(gè)HttpSession對(duì)象盲镶,HttpSessionListener有sessionCreated(HttpSessionEvent se)和sessionDestroyed(HttpSessionEvent se)侥袜,分別是session創(chuàng)建和銷毀時(shí)調(diào)用,方法里的參數(shù)可以獲取當(dāng)前創(chuàng)建的HttpSession對(duì)象溉贿。

HttpSessionListener主要用途
統(tǒng)計(jì)在線人數(shù)枫吧,記錄訪問(wèn)日志(在后臺(tái)把訪問(wèn)人的訪問(wèn)時(shí)間和ip做一些統(tǒng)計(jì)數(shù)據(jù))
HttpSession對(duì)象的創(chuàng)建和銷毀:
session對(duì)象的創(chuàng)建是在用戶第一次打開(kāi)瀏覽器,第一次訪問(wèn)Wen應(yīng)用時(shí)宇色,這次對(duì)話Web容器就會(huì)分配一個(gè)session九杂,用戶可以在session里保存一些信息,session對(duì)象的銷毀第一是關(guān)閉服務(wù)器宣蠕,會(huì)調(diào)用銷毀方法例隆,第二種是關(guān)閉瀏覽器session會(huì)被銷毀(session不一定會(huì)立即銷毀,該時(shí)間不是一個(gè)量化的)抢蚀,第三種镀层,不關(guān)閉瀏覽器,session超時(shí)(可以通過(guò)在web.xml中配置


image.png

ServletRequest的監(jiān)聽(tīng)器
ServletRequest對(duì)象的創(chuàng)建和銷毀:ServletRequest的創(chuàng)建和銷毀是實(shí)現(xiàn)了ServletRequestListener接口皿曲,一個(gè)ServletRequest對(duì)象可以注冊(cè)多個(gè)ServletRequestListener接口唱逢,并且實(shí)現(xiàn)了requestInitialized(ServletRequestEvent sre)request創(chuàng)建時(shí)被調(diào)用,requestDestroyed(ServletRequestEvent sre)request銷毀時(shí)調(diào)用屋休。

ServletRequestListener主要用途:讀取request里的參數(shù)坞古,記錄訪問(wèn)歷史、訪問(wèn)路徑劫樟,都可以通過(guò)它來(lái)進(jìn)行監(jiān)聽(tīng)(監(jiān)聽(tīng)到每一個(gè)用戶的訪問(wèn)請(qǐng)求痪枫,請(qǐng)求結(jié)束后就會(huì)執(zhí)行銷毀方法,有g(shù)etServletContext方法和getServletRequest方法)叠艳。


image.png

HttpSession中的對(duì)象狀態(tài)

(1)綁定:通過(guò)setAttribute();
(2)解除綁定:removeAttribute();
(3)鈍化:將session對(duì)象序列化到存儲(chǔ)設(shè)備上
(4)活化:將session對(duì)象從存儲(chǔ)設(shè)備上進(jìn)行恢復(fù)
session鈍化機(jī)制:
(1)把服務(wù)器中不常使用的session對(duì)象暫時(shí)的序列化到系統(tǒng)文件或是數(shù)據(jù)庫(kù)中奶陈,當(dāng)使用時(shí)反序列化到內(nèi)存中,整個(gè)過(guò)程有服務(wù)器自動(dòng)完成虑绵。
(2)session的鈍化機(jī)制由SessionManager管理

Servlet3.0下監(jiān)聽(tīng)器的使用

Servlet2.5下可以定義監(jiān)聽(tīng)器的順序尿瞭,通過(guò)在web.xml中定義,Servlet3.0通過(guò)注解@WebListener實(shí)現(xiàn)這一功能,就不需要在web.xml配置Listener翅睛。


image.png

注意:@WebListener方式不能實(shí)現(xiàn)設(shè)置順序功能

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末声搁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子捕发,更是在濱河造成了極大的恐慌疏旨,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扎酷,死亡現(xiàn)場(chǎng)離奇詭異檐涝,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門谁榜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)幅聘,“玉大人,你說(shuō)我怎么就攤上這事窃植〉圯铮” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵巷怜,是天一觀的道長(zhǎng)葛超。 經(jīng)常有香客問(wèn)我,道長(zhǎng)延塑,這世上最難降的妖魔是什么绣张? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮关带,結(jié)果婚禮上侥涵,老公的妹妹穿的比我還像新娘。我一直安慰自己宋雏,他們只是感情好独令,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著好芭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪冲呢。 梳的紋絲不亂的頭發(fā)上舍败,一...
    開(kāi)封第一講書(shū)人閱讀 52,696評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音敬拓,去河邊找鬼邻薯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛乘凸,可吹牛的內(nèi)容都是我干的厕诡。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼营勤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼灵嫌!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起葛作,我...
    開(kāi)封第一講書(shū)人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤寿羞,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后赂蠢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體绪穆,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了玖院。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菠红。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖难菌,靈堂內(nèi)的尸體忽然破棺而出试溯,到底是詐尸還是另有隱情,我是刑警寧澤扔傅,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布耍共,位于F島的核電站,受9級(jí)特大地震影響猎塞,放射性物質(zhì)發(fā)生泄漏试读。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一荠耽、第九天 我趴在偏房一處隱蔽的房頂上張望钩骇。 院中可真熱鬧,春花似錦铝量、人聲如沸倘屹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)纽匙。三九已至,卻和暖如春拍谐,著一層夾襖步出監(jiān)牢的瞬間烛缔,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工轩拨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留践瓷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓亡蓉,卻偏偏與公主長(zhǎng)得像晕翠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子砍濒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 本文包括:1淋肾、Listener簡(jiǎn)介2、Servlet監(jiān)聽(tīng)器3爸邢、監(jiān)聽(tīng)三個(gè)域?qū)ο髣?chuàng)建和銷毀的事件監(jiān)聽(tīng)器4巫员、監(jiān)聽(tīng)三個(gè)域?qū)?..
    廖少少閱讀 6,087評(píng)論 6 28
  • Web監(jiān)聽(tīng)器有Servlet規(guī)范提供,可監(jiān)聽(tīng)客戶端請(qǐng)求與服務(wù)端操作甲棍。 application:上下文對(duì)象简识,由容器創(chuàng)...
    Hey_Shaw閱讀 236評(píng)論 1 0
  • 監(jiān)聽(tīng)器(listener) 監(jiān)聽(tīng)器簡(jiǎn)介 :監(jiān)聽(tīng)器就是一個(gè)實(shí)現(xiàn)特定接口的普通java程序赶掖,這個(gè)程序?qū)iT用于監(jiān)聽(tīng)另一個(gè)...
    奮斗的老王閱讀 2,517評(píng)論 0 53
  • https://www.cnblogs.com/xdp-gacl/p/3961929.html 一、監(jiān)聽(tīng)器介紹 1...
    提筆忘字_波閱讀 1,027評(píng)論 0 1
  • 一七扰、監(jiān)聽(tīng)器的概覽 監(jiān)聽(tīng)器是指專門用于對(duì)其他對(duì)象身上發(fā)生的事件或狀態(tài)的改變進(jìn)行監(jiān)聽(tīng)和相應(yīng)處理的對(duì)象吱窝,當(dāng)被監(jiān)視的對(duì)象發(fā)...
    不知名的蛋撻閱讀 1,377評(píng)論 0 3