一)監(jiān)聽(tīng)器的概述
1、什么是監(jiān)聽(tīng)器
? ? 監(jiān)聽(tīng)器就是一個(gè)實(shí)現(xiàn)了特定接口的Java類郎笆,這個(gè)Java類用于監(jiān)聽(tīng)另一個(gè)Java類的方法調(diào)用题画,或者屬性的改變。當(dāng)被監(jiān)聽(tīng)對(duì)象發(fā)生上述事件后苍息,監(jiān)聽(tīng)器某個(gè)方法將會(huì)立即被執(zhí)行
2、監(jiān)聽(tīng)器的用途
? ? 用來(lái)監(jiān)聽(tīng)其他對(duì)象的變化的表谊,主要應(yīng)用在圖形化界面的開(kāi)發(fā)上
? ? 例如Java中的GUI盖喷、Android等,都有大量的監(jiān)聽(tīng)器的使用
3距辆、監(jiān)聽(tīng)器的術(shù)語(yǔ)
????事件源:指的是被監(jiān)聽(tīng)對(duì)象(汽車)
????監(jiān)聽(tīng)器:指的是監(jiān)聽(tīng)的對(duì)象(報(bào)警器)
????事件源和監(jiān)聽(tīng)器綁定:在汽車上安裝報(bào)警器
????事件:指的是事件源對(duì)象的改變(踹了汽車一腳),主要功能是獲得事件源對(duì)象
(二)監(jiān)聽(tīng)器的入門
1爆土、監(jiān)聽(tīng)器的入門程序
(三)Servlet中的監(jiān)聽(tīng)器
一诸蚕、Servlet中的監(jiān)聽(tīng)器簡(jiǎn)介
? ? 在Servlet中定義了多種類型的監(jiān)聽(tīng)器,它們用于監(jiān)聽(tīng)的事件源分別是ServletContext坏瘩、HttpSession和ServletRequest這三個(gè)域?qū)ο?/p>
二漠魏、Servlet中的監(jiān)聽(tīng)器的分類
1、一類:監(jiān)聽(tīng)三個(gè)域?qū)ο蟮膭?chuàng)建和銷毀的監(jiān)聽(tīng)器(三個(gè))
2破讨、二類:監(jiān)聽(tīng)三個(gè)域?qū)ο蟮膶傩宰兏▽傩蕴砑愚热摇⒁瞥⑻鎿Q)的監(jiān)聽(tīng)器(三個(gè))
3隙笆、三類:監(jiān)聽(tīng)HttpSession中JavaBean的狀態(tài)改變(鈍化升筏、活化、綁定您访、解除綁定)的監(jiān)聽(tīng)(兩個(gè))
(四)ServletContextListener監(jiān)聽(tīng)器的使用
一灵汪、ServletContextListener監(jiān)聽(tīng)器的作用
? ? 用來(lái)監(jiān)聽(tīng)ServletContext域?qū)ο蟮膭?chuàng)建和銷毀的監(jiān)聽(tīng)器
二、ServletContext創(chuàng)建和銷毀
1享言、創(chuàng)建:在服務(wù)器啟動(dòng)的時(shí)候,為每個(gè)Web應(yīng)用創(chuàng)建單獨(dú)的ServletContext對(duì)象
2荧琼、銷毀:在服務(wù)器關(guān)閉的時(shí)候,或者項(xiàng)目從Web服務(wù)器中移除的時(shí)候
三堰乔、ServletContextListener監(jiān)聽(tīng)器的方法
1累舷、監(jiān)聽(tīng)ServletContext對(duì)象的創(chuàng)建
?? ??? ?contextInitialized(ServletContextEvent sce)
2夹孔、監(jiān)聽(tīng)ServletContext對(duì)象的銷毀
?? ??? ?contextDestroyed(ServletContextEvent sce)
四、編寫監(jiān)聽(tīng)器
1只怎、監(jiān)聽(tīng)器的代碼
2怜俐、監(jiān)聽(tīng)器的配置
五、ServletContextListener的企業(yè)用途
1贴谎、加載框架的配置文件
Spring框架提供了一個(gè)核心監(jiān)聽(tīng)器叫ContextLoaderListener
2季稳、定時(shí)任務(wù)調(diào)度
(五)HttpSessionListener監(jiān)聽(tīng)器的使用
一、HttpSessionListener監(jiān)聽(tīng)器作用
? ? 用來(lái)監(jiān)聽(tīng)HttpSession對(duì)象的創(chuàng)建和銷毀
二仲翎、HttpSession創(chuàng)建和銷毀
? ? 創(chuàng)建:
?? ??? ?服務(wù)器端第一次調(diào)用getSession()方法的時(shí)候
? ? 銷毀:
?? ??? ?非正常關(guān)閉服務(wù)器(正常關(guān)閉服務(wù)器Session會(huì)被序列化)
?? ?? ? Session過(guò)期(默認(rèn)過(guò)期時(shí)間30分鐘)
?? ?? ? 手動(dòng)調(diào)用session.invalidate()方法
三铛漓、HttpSessionListener監(jiān)聽(tīng)器的方法
1、監(jiān)聽(tīng)HttpSession對(duì)象創(chuàng)建
????????sessionCreated(HttpSessionEvent se)
2玫坛、監(jiān)聽(tīng)HttpSession對(duì)象銷毀
????????sessionDestroyed(HttpSessionEvent se)
四包晰、編寫監(jiān)聽(tīng)器監(jiān)聽(tīng)HttpSession對(duì)象創(chuàng)建和銷毀
1、監(jiān)聽(tīng)器的代碼
2肠骆、監(jiān)聽(tīng)器的配置
3塞耕、問(wèn)題:
? ? 訪問(wèn)HTML是否會(huì)創(chuàng)建Session?
? ? 訪問(wèn)JSP是否會(huì)創(chuàng)建Session莉钙?
? ? 訪問(wèn)Servlet是否會(huì)創(chuàng)建Session?
(六)ServletRequestListener監(jiān)聽(tīng)器的使用
一停忿、ServletRequestListener監(jiān)聽(tīng)器的作用
? ? 用于監(jiān)聽(tīng)ServletRequest對(duì)象的創(chuàng)建和銷毀
二蚊伞、ServletRequest對(duì)象的創(chuàng)建和銷毀
? ? 創(chuàng)建:從客戶端向服務(wù)器發(fā)送一次請(qǐng)求,服務(wù)器就會(huì)創(chuàng)建Request對(duì)象
? ? 銷毀:服務(wù)器對(duì)這次請(qǐng)求作出了響應(yīng)之后颅停,Request對(duì)象就銷毀了
三掠拳、ServletRequestListener監(jiān)聽(tīng)器的方法
1、監(jiān)聽(tīng)ServletRequest對(duì)象的創(chuàng)建
?? ??? ?requestInitialized(ServletRequestEvent sre)
2喊熟、監(jiān)聽(tīng)ServletRequest對(duì)象的銷毀
?? ??? ?requestDestroyed(ServletRequestEvent sre)
四姐刁、編寫監(jiān)聽(tīng)器代碼
1、監(jiān)聽(tīng)器代碼
2胳泉、監(jiān)聽(tīng)器配置
3岩遗、問(wèn)題:
????訪問(wèn)HTML頁(yè)面是否創(chuàng)建請(qǐng)求對(duì)象?會(huì)
????訪問(wèn)JSP頁(yè)面是否創(chuàng)建請(qǐng)求對(duì)象案铺?會(huì)
????訪問(wèn)Servlet是否創(chuàng)建請(qǐng)求對(duì)象梆靖?會(huì)
(七)統(tǒng)計(jì)當(dāng)前在線人數(shù)的案例
?此時(shí)獲取初始值,進(jìn)行+1操作姑子。
?? ?如果Session銷毀了测僵,獲取該值進(jìn)行-1操作
二谢翎、代碼實(shí)現(xiàn)
1沐旨、創(chuàng)建ServletContextListener進(jìn)行初始化
2、創(chuàng)建HttpSessionListener
3褒侧、配置監(jiān)聽(tīng)器
4谊迄、創(chuàng)建JSP頁(yè)面
(八)監(jiān)聽(tīng)三個(gè)域?qū)ο蟮膶傩宰兏谋O(jiān)聽(tīng)器
一、三類監(jiān)聽(tīng)器
1这吻、ServletContextAttributeListener
監(jiān)聽(tīng)ServletContext對(duì)象中的屬性變更(屬性添加篙议、移除怠硼、替換)的監(jiān)聽(tīng)器
attributeAdded(ServletContextAttributeEvent event)
attributeRemoved(ServletContextAttributeEvent event)
attributeReplaced(ServletContextAttributeEvent event)
2、HttpSessionAttributeListener
監(jiān)聽(tīng)HttpSession對(duì)象中的屬性變更(屬性添加这难、移除葡秒、替換)的監(jiān)聽(tīng)器
attributeAdded(HttpSessionBindingEvent event)
attributeRemoved(HttpSessionBindingEvent event)
attributeReplaced(HttpSessionBindingEvent event)
3、ServletRequestAttributeListener
監(jiān)聽(tīng)ServletRequest對(duì)象中的屬性變更(屬性添加蹋岩、移除学少、替換)的監(jiān)聽(tīng)器
attributeAdded(ServletRequestAttributeEvent srae)
attributeRemoved(ServletRequestAttributeEvent srae)
attributeReplaced(ServletRequestAttributeEvent srae)
二版确、演示第二類監(jiān)聽(tīng)器
1、演示HttpSessionAttributeListener
2绒疗、配置監(jiān)聽(tīng)器
3、編寫測(cè)試的JSP
(九)監(jiān)聽(tīng)HttpSession中Java類狀態(tài)改變的監(jiān)聽(tīng)器
一惕虑、第三類監(jiān)聽(tīng)器概述
1、保存在Session域中的Java類可以有多種狀態(tài):綁定到Session中樱衷、從Session中解除綁定酒唉、隨Session對(duì)象持久化到一個(gè)存儲(chǔ)設(shè)備中(鈍化)、隨Session對(duì)象從一個(gè)存儲(chǔ)設(shè)備中恢復(fù)(活化)
2侄榴、Servlet規(guī)范中中定義了兩個(gè)特殊的監(jiān)聽(tīng)的接口网沾,來(lái)幫助Java類了解自己在Session域中的狀態(tài),分別是:
HttpSessionBindingListener接口
HttpSessionActivationListener接口
實(shí)現(xiàn)了這兩個(gè)接口的類桦山,是不需要在web.xml中進(jìn)行配置的
二醋旦、HttpSessionBindingListener監(jiān)聽(tīng)器
1、監(jiān)聽(tīng)Java類在HttpSession中的綁定和解除綁定的狀態(tài)的監(jiān)聽(tīng)器
?? ??? ?valueBound(HttpSessionBindingEvent event)
?? ??? ?valueUnbound(HttpSessionBindingEvent event)
2钉凌、測(cè)試代碼
三捂人、HttpSessionActivationListener監(jiān)聽(tīng)器
1、監(jiān)聽(tīng)HttpSession中Java類的鈍化和活化的監(jiān)聽(tīng)器
?? ??? ?sessionDidActivate(HttpSessionEvent se)
?? ??? ?sessionWillPassivate(HttpSessionEvent se)
2酸纲、測(cè)試代碼
3论熙、配置完成Session的序列化和反序列化
Context標(biāo)簽可以配置在:
Tomcat/conf/context.xml:所有Tomcat下虛擬主機(jī)和虛擬目錄下的工程都會(huì)序列化Session
Tomcat/conf/Catalina/localhost/context.xml:只有l(wèi)ocalhost虛擬主機(jī)下的所有項(xiàng)目會(huì)序列化Session
工程/META-INF/context.xml:只有當(dāng)前工程才會(huì)序列化Session