listener:监听器(加载框架配置文件/执行任务调度/session的优化)
所謂監(jiān)聽器就是一個java類,用來監(jiān)聽其他java類的狀態(tài)變化。
監(jiān)聽器的術(shù)語:
事件源:指被監(jiān)聽的對象(汽車)
監(jiān)聽器:監(jiān)聽的對象(報(bào)警器)
事件源與監(jiān)聽器的綁定:(就是在汽車上安裝報(bào)警器)
事件:事件源的改變(踹汽車一腳)--事件是用來獲得事件源的。
監(jiān)聽器的用途:
一:用來監(jiān)聽其他對象的狀態(tài)變化;
二:主要應(yīng)用在圖形化界面中比較多;
GUI、Android
WEB中的監(jiān)聽器:
事件源:servlet中的三個域?qū)ο?#xff1a;ServletContext,HttpSession,ServletRequest.
監(jiān)聽器:自定義類實(shí)現(xiàn)8個接口。
事件源和監(jiān)聽器的綁定:配置
WEB中的監(jiān)聽器共有三類八種(監(jiān)聽三個域?qū)ο?#xff09;
一類:監(jiān)聽三個域?qū)ο蟮膭?chuàng)建和銷毀;
ServletContextListener
HttpSessionListener
ServletRequestListener
二類:監(jiān)聽三個域?qū)ο蟮膶傩宰兏?#xff08;屬性添加,移除,替換);
ServletContextAttributeListener
HttpSessioinAttributeListener
ServletRequestAttributeListener
三類:監(jiān)聽HttpSession中JavaBean的狀態(tài)改變(綁定,解除綁定,鈍化,活化);
HttpSessionBindingListener (監(jiān)聽綁定,解除綁定)綁定就是把javabean存入session域中,解除就是把javabean移除或用其他值(非javabean值)替換。
HttpSessionActivationListener (監(jiān)聽鈍化,活化) 鈍化即序列化 活化即反序列化
注意:第三類監(jiān)聽器很特殊,不需要進(jìn)行配置,作用在JavaBean上的監(jiān)聽器,JavaBean可以自己感知在Session中的狀態(tài);
? ? 讓需要被監(jiān)聽的javabean implements HttpSessionBindingListener/HttpSessionActivationListener,然后重寫里面的方法即可。
? ? 當(dāng)需要監(jiān)聽某個javabean的鈍化或活化時,該javabean需要實(shí)現(xiàn)序列化接口Serializable,否則會報(bào)錯。(當(dāng)正常關(guān)閉服務(wù)器session域就會發(fā)生鈍化情況,或者通過配置session鈍化時間)
WEB中監(jiān)聽器的使用:
步驟1:編寫一個類實(shí)現(xiàn)監(jiān)聽器的接口;
步驟2:通過配置文件配置監(jiān)聽器;
兩種監(jiān)聽器在企業(yè)中的應(yīng)用:
ServletContextListener
因?yàn)樵摫O(jiān)聽器是監(jiān)聽ServletContext對象的,由于該對象的創(chuàng)建和生命周期的特性可以用來做加載文件或執(zhí)行定時任務(wù)。
作用一:加載框架的配置文件;eg:Spring框架 ContextLoaderListener implements ServletContextListener
作用二:執(zhí)行定時任務(wù)調(diào)度(Timer,TimerTask):(在服務(wù)器啟動的時候,定時去執(zhí)行任務(wù))
| Timer API: | ? |
| void scheduleAtFixedRate(TimerTask task, Date firstTime, long period) | 安排指定的任務(wù)在指定的時間開始進(jìn)行重復(fù)的固定速率執(zhí)行 |
| void scheduleAtFixedRate(TimerTask task, long delay, long period)? | 安排指定的任務(wù)在指定的延遲后開始進(jìn)行重復(fù)的固定速率執(zhí)行。? |
HttpSessionActivationListener
作用:優(yōu)化session
當(dāng)并發(fā)訪問過大的時候,因?yàn)檫^多的session對象對服務(wù)器內(nèi)存造成巨大的浪費(fèi)導(dǎo)致性能的下降,我們可以使用該監(jiān)聽器讓規(guī)定一定時長后不使用的session序列化到硬盤,然后再等用的時候反序列化回來,這樣大大節(jié)省了內(nèi)存,提高了性能。但是我們又不能依賴于服務(wù)器的關(guān)閉和啟動來實(shí)現(xiàn)序列化session,那么我們可以通過配置一個<Context>標(biāo)簽定時序列化session。
<Context>配置的三種路徑:(放到不同的路徑中對session的作用范圍不同)
一:在tomcat/conf/context.xml中配置一個<Context>; //在tomcat中所有虛擬主機(jī)和虛擬路徑都會按照這個配置執(zhí)行。
二:在tomcat/conf/Catalina/localhost/context.xml配置<Context>; //在tomcat中的localhost虛擬主機(jī)中的所有虛擬路徑按照這個配置執(zhí)行。
三:在當(dāng)前工程下的META-INF/context.xml配置<Context>; //當(dāng)前這個工程按照配置執(zhí)行。
<Context>的配置文檔:
1 <Context> 2 <!-- 3 maxIdleSwap:1 表示session1分鐘不用的話就會被自動序列化到硬盤 4 directory:hello 表示序列化后文件存儲的文件夾名稱為hello(work\Catalina\localhost/ProjectName/hello) 5 --> 6 <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1"> 7 <Store className="org.apache.catalina.session.FileStore" directory="hello"/> 8 </Manager> 9 </Context> ?<Context>的配置:?
轉(zhuǎn)載于:https://www.cnblogs.com/laodang/p/9530220.html
總結(jié)
以上是生活随笔為你收集整理的listener:监听器(加载框架配置文件/执行任务调度/session的优化)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySql 中锁的定义
- 下一篇: centOS安装java