3月25日 ? EL獲取對(duì)象JSTL學(xué)生展示
(一)監(jiān)聽器的概述
1、什么是監(jiān)聽器
? ? 監(jiān)聽器就是一個(gè)實(shí)現(xiàn)了特定接口的Java類,這個(gè)Java類用于監(jiān)聽另一個(gè)Java類的方法調(diào)用,或者屬性的改變。當(dāng)被監(jiān)聽對(duì)象發(fā)生上述事件后,監(jiān)聽器某個(gè)方法將會(huì)立即被執(zhí)行
2、監(jiān)聽器的用途
? ? 用來監(jiān)聽其他對(duì)象的變化的,主要應(yīng)用在圖形化界面的開發(fā)上
? ? 例如Java中的GUI、Android等,都有大量的監(jiān)聽器的使用
3、監(jiān)聽器的術(shù)語(yǔ)
????事件源:指的是被監(jiān)聽對(duì)象(汽車)
????監(jiān)聽器:指的是監(jiān)聽的對(duì)象(報(bào)警器)
????事件源和監(jiān)聽器綁定:在汽車上安裝報(bào)警器
????事件:指的是事件源對(duì)象的改變(踹了汽車一腳),主要功能是獲得事件源對(duì)象
(二)監(jiān)聽器的入門
1、監(jiān)聽器的入門程序
(三)Servlet中的監(jiān)聽器
一、Servlet中的監(jiān)聽器簡(jiǎn)介
? ? 在Servlet中定義了多種類型的監(jiān)聽器,它們用于監(jiān)聽的事件源分別是ServletContext、HttpSession和ServletRequest這三個(gè)域?qū)ο?/p>
二、Servlet中的監(jiān)聽器的分類
1、一類:監(jiān)聽三個(gè)域?qū)ο蟮膭?chuàng)建和銷毀的監(jiān)聽器(三個(gè))
2、二類:監(jiān)聽三個(gè)域?qū)ο蟮膶傩宰兏▽傩蕴砑?、移除、替換)的監(jiān)聽器(三個(gè))
3、三類:監(jiān)聽HttpSession中JavaBean的狀態(tài)改變(鈍化、活化、綁定、解除綁定)的監(jiān)聽(兩個(gè))
(四)ServletContextListener監(jiān)聽器的使用
一、ServletContextListener監(jiān)聽器的作用
? ? 用來監(jiān)聽ServletContext域?qū)ο蟮膭?chuàng)建和銷毀的監(jiān)聽器
二、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)聽器的方法
1、監(jiān)聽ServletContext對(duì)象的創(chuàng)建
?? ??? ?contextInitialized(ServletContextEvent sce)
2、監(jiān)聽ServletContext對(duì)象的銷毀
?? ??? ?contextDestroyed(ServletContextEvent sce)
四、編寫監(jiān)聽器
1、監(jiān)聽器的代碼
2、監(jiān)聽器的配置
五、ServletContextListener的企業(yè)用途
1、加載框架的配置文件
Spring框架提供了一個(gè)核心監(jiān)聽器叫ContextLoaderListener
2、定時(shí)任務(wù)調(diào)度
(五)HttpSessionListener監(jiān)聽器的使用
一、HttpSessionListener監(jiān)聽器作用
? ? 用來監(jiān)聽HttpSession對(duì)象的創(chuàng)建和銷毀
二、HttpSession創(chuàng)建和銷毀
? ? 創(chuàng)建:
?? ??? ?服務(wù)器端第一次調(diào)用getSession()方法的時(shí)候
? ? 銷毀:
?? ??? ?非正常關(guān)閉服務(wù)器(正常關(guān)閉服務(wù)器Session會(huì)被序列化)
?? ?? ? Session過期(默認(rèn)過期時(shí)間30分鐘)
?? ?? ? 手動(dòng)調(diào)用session.invalidate()方法
三、HttpSessionListener監(jiān)聽器的方法
1、監(jiān)聽HttpSession對(duì)象創(chuàng)建
????????sessionCreated(HttpSessionEvent se)
2、監(jiān)聽HttpSession對(duì)象銷毀
????????sessionDestroyed(HttpSessionEvent se)
四、編寫監(jiān)聽器監(jiān)聽HttpSession對(duì)象創(chuàng)建和銷毀
1、監(jiān)聽器的代碼
2、監(jiān)聽器的配置
3、問題:
? ? 訪問HTML是否會(huì)創(chuàng)建Session?
? ? 訪問JSP是否會(huì)創(chuàng)建Session?
? ? 訪問Servlet是否會(huì)創(chuàng)建Session?
(六)ServletRequestListener監(jiān)聽器的使用
一、ServletRequestListener監(jiān)聽器的作用
? ? 用于監(jiān)聽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)聽器的方法
1、監(jiān)聽ServletRequest對(duì)象的創(chuàng)建
?? ??? ?requestInitialized(ServletRequestEvent sre)
2、監(jiān)聽ServletRequest對(duì)象的銷毀
?? ??? ?requestDestroyed(ServletRequestEvent sre)
四、編寫監(jiān)聽器代碼
1、監(jiān)聽器代碼
2、監(jiān)聽器配置
3、問題:
????訪問HTML頁(yè)面是否創(chuàng)建請(qǐng)求對(duì)象?會(huì)
????訪問JSP頁(yè)面是否創(chuàng)建請(qǐng)求對(duì)象?會(huì)
????訪問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)聽器
4、創(chuàng)建JSP頁(yè)面
(八)監(jiān)聽三個(gè)域?qū)ο蟮膶傩宰兏谋O(jiān)聽器
一、三類監(jiān)聽器
1、ServletContextAttributeListener
監(jiān)聽ServletContext對(duì)象中的屬性變更(屬性添加、移除、替換)的監(jiān)聽器
attributeAdded(ServletContextAttributeEvent event)
attributeRemoved(ServletContextAttributeEvent event)
attributeReplaced(ServletContextAttributeEvent event)
2、HttpSessionAttributeListener
監(jiān)聽HttpSession對(duì)象中的屬性變更(屬性添加、移除、替換)的監(jiān)聽器
attributeAdded(HttpSessionBindingEvent event)
attributeRemoved(HttpSessionBindingEvent event)
attributeReplaced(HttpSessionBindingEvent event)
3、ServletRequestAttributeListener
監(jiān)聽ServletRequest對(duì)象中的屬性變更(屬性添加、移除、替換)的監(jiān)聽器
attributeAdded(ServletRequestAttributeEvent srae)
attributeRemoved(ServletRequestAttributeEvent srae)
attributeReplaced(ServletRequestAttributeEvent srae)
二、演示第二類監(jiān)聽器
1、演示HttpSessionAttributeListener
2、配置監(jiān)聽器
3、編寫測(cè)試的JSP
(九)監(jiān)聽HttpSession中Java類狀態(tài)改變的監(jiān)聽器
一、第三類監(jiān)聽器概述
1、保存在Session域中的Java類可以有多種狀態(tài):綁定到Session中、從Session中解除綁定、隨Session對(duì)象持久化到一個(gè)存儲(chǔ)設(shè)備中(鈍化)、隨Session對(duì)象從一個(gè)存儲(chǔ)設(shè)備中恢復(fù)(活化)
2、Servlet規(guī)范中中定義了兩個(gè)特殊的監(jiān)聽的接口,來幫助Java類了解自己在Session域中的狀態(tài),分別是:
HttpSessionBindingListener接口
HttpSessionActivationListener接口
實(shí)現(xiàn)了這兩個(gè)接口的類,是不需要在web.xml中進(jìn)行配置的
二、HttpSessionBindingListener監(jiān)聽器
1、監(jiān)聽Java類在HttpSession中的綁定和解除綁定的狀態(tài)的監(jiān)聽器
?? ??? ?valueBound(HttpSessionBindingEvent event)
?? ??? ?valueUnbound(HttpSessionBindingEvent event)
2、測(cè)試代碼
三、HttpSessionActivationListener監(jiān)聽器
1、監(jiān)聽HttpSession中Java類的鈍化和活化的監(jiān)聽器
?? ??? ?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