Listener監聽器java
對某些事件敏感的對象,當事件發生時,調用對象的某個方法,此對象就是監聽器.
javaWeb中的監聽器,主要堅挺WEB服務器中發生的一些事情.(請求的建立與銷燬 session的建立與銷燬
域中數據的變化等.)程序員
如何發開一個監聽器
建立一個類,實現對應的監聽器接口
在web.xml中配置註冊此監聽器
監聽器的生命週期:和過濾器同樣
javaWeb中有那些監聽器
ServletRequestListener:監聽請求(建立與銷燬)web
ServletRequestAttributeListener:監聽請求域(數據的變化:添加 刪除 替換)數據庫
HttpSessionListener:監聽session的建立與銷燬
建立:
若是訪問的是靜態資源,則不會建立session
若是訪問的是JSP,則會建立session
若是訪問的是servlet,若是是用到session則會建立,若是沒有用到,則不會建立
規律:用到session纔會建立.(JSP有Session內置對象,因此必定會建立)
銷燬:
默認是30分鐘後過時自動銷燬.
正常關閉服務器不會銷燬session,會被寫入磁盤,下次啓動是再回復到內存
設置web.xml中根標籤下的<session-config>的標籤,其中的子標籤:<session-timeout>
設置過時時間(單位是分鐘,默認是30)服務器
HttpSessionAttributeListener:監聽session域的數據變化session
HttpSessionBindingListener:監聽特定的javaBean域session的綁定與解綁事件
程序員本身開發的一個類,讓他來實現監聽器接口,這樣綁定域解綁的這個監聽器就
只對這個類的對象進行監聽
不須要在web.xml中配置
綁定:把對像保存到session
解綁:把對象從session移除工具
HttpSessionActivationListener:監聽特定的javaBean鈍化和活化事件
鈍化:特定的javaBean隨session一塊兒從內存寫入磁盤的事件
活化:特定的javaBean隨SESSSIONS.ser文件一塊兒從磁盤恢復到內存的事件
注意:當前javaBean須要被寫入磁盤,因此此javaBean還必須實現序列化接口(java.io.serializable)xml
SerlvetContextListener:監聽web項目的啓動與中止
項目啓動時的資源申請和任務開啓
項目中止時的資源釋放對象
SerlvetContextAttributeListener:SerlvetContext域的數據變化接口
定時發送生日祝福郵件的案例:
需求分析:給當天過生日的用戶發送生日祝福郵件
技術分析:
能從數據庫中去出當天過生日的用戶的信息
SELECT * FROM 代表 WHERE 字段名 LIKE ' ____-07-09% ';
定時任務,以固定的事件週期運行,查找用戶,發送郵件,以固定的事件週期,每隔指定的事件長度,運行一段代碼.
發送郵件:MailUtils
SMTP:simple Mail Transfer Protocol:簡單郵件傳輸協議:發送郵件
默認使用25端口
POP3:Post Office Protocol3:郵局協議第三版:收郵件
默認使用110端口
郵件服務器:
點" 設置 " ---> " 局域網郵件服務器 "
" 單域名 " ---> " itcats.com "( 設置本郵件服務器的域名 )
點" 新帳號 "
帳號:
密碼:
郵件客戶端工具: FoxMail
步驟分析:
建立一個定時任務,每隔24小時運行一次
調用業務邏輯,進行生日祝福郵件發送的操做
業務邏輯中,調用Dao從數據庫中取得今天生日的擁擠的集合
業務邏輯中,遍歷集合,給每一個用戶的郵箱發送郵件
當服務器啓動時,同時啓動定時任務(監聽項目啓動事件)
定時器:
第一步:建立定時器 new Timer()
第二步:調用schedule(task, delay, period)方法
參數: task : 第一個參數,建立一個TimerTask對象,由於TimerTask是抽象類,因此可使用匿名內部類的方式實現
delay:運行此語句後,延遲多少秒開始運行
period:延遲時間後,開始運行定時任務,每隔多少秒開始運行
總結: 監聽器 Listener
servletRequestLitener:監聽那些資源被訪問(WEB項目的訪問記錄)
servletRequestAttributeListener: added/replaced/removed
HttpSessionListener( 粗粒度的監聽用戶的上線和下線 )
建立和在在訪問的目標用到session纔會建立session(HTML必定不會,JSP必定會必定會,Servlet看狀況)
銷燬:過時<session-config><session-timeout>(單位是分鐘)
HttpSessionAttributeLikstener
HttpSessionBindingListener:特定的javaBean和sesion綁定域解綁事件
HttpSessionActivationListener:特定的javaBean鈍化與活化事情(必須同時序列化接口) ServletContextListener:WEB項目的啓動與中止 項目啓動時申請資源 項目中止時釋放資源 項目啓動時啓動任務* ServletContextAttriduteListener