[TOC]
# 什么是監聽器?
監聽器就是監聽某個對象的的狀態變化的組件
監聽器的相關概念:
事件源:被監聽的對象 ----- 三個域對象 request session servletContext
監聽器:監聽事件源對象 事件源對象的狀態的變化都會觸發監聽器 ---- 6+2
注冊監聽器:將監聽器與事件源進行綁定
響應行為:監聽器監聽到事件源的狀態變化時 所涉及的功能代碼 ---- 程序員編寫代碼
# 監聽器有哪些?
第一維度:按照被監聽的對象劃分:ServletRequest域 HttpSession域 ServletContext域
第二維度:監聽的內容分:監聽域對象的創建與銷毀的 監聽域對象的屬性變化的

# 監聽三大域對象的創建與銷毀的監聽器
## 監聽ServletContext域的創建與銷毀的監聽器ServletContextListener
1)Servlet域的生命周期
何時創建:服務器啟動創建
何時銷毀:服務器關閉銷毀
2)監聽器的編寫步驟:
a、編寫一個監聽器類去實現監聽器接口
b、覆蓋監聽器的方法
c、需要在web.xml中進行配置---注冊
3)監聽的方法
寫個自定義的MyServletContextListener類實現ServletContextListener就可以
~~~
package mytest;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
//獲取被監聽的對象
ServletContext servletContext = arg0.getServletContext();
//和上面一樣,不過類型是Object,是通用的方法
Object source = arg0.getSource();
System.out.println("ServletContext銷毀了");
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("ServletContext創建了");
}
}
~~~
4)配置文件:
~~~
<!-- 注冊監聽器 -->
<listener>
<listener-class>mytest.MyServletContextListener</listener-class>
</listener>
~~~
5)ServletContextListener監聽器的主要作用
a、初始化的工作:初始化對象 初始化數據 ---- 加載數據庫驅動 連接池的初始 化
b、加載一些初始化的配置文件 --- spring的配置文件
c、任務調度----定時器----Timer/TimerTask
~~~
// 開啟一個任務調度器 util包下的
Timer timer = new Timer();
// task任務 firstTimer:第一次執行時間 period:間隔執行時間
// timer.schedule(task, firstTime, period);
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("定時任務---");
}
}, new Date(), 5000);// 5秒鐘
~~~
## 監聽Httpsession域的創建于銷毀的監聽器HttpSessionListener
1)HttpSession對象的生命周期
何時創建:第一次調用request.getSession時創建
何時銷毀:服務器關閉銷毀 session過期 手動銷毀
2)HttpSessionListener的方法

## 監聽ServletRequest域創建與銷毀的監聽器ServletRequestListener
1)ServletRequest的生命周期
創建:每一次請求都會創建request
銷毀:請求結束
2)ServletRequestListener的方法

# 監聽三大域對象的屬性變化的
(1)域對象的通用的方法:
setAttribute(name,value)
--- 觸發添加屬性的監聽器的方法
--- 觸發修改屬性的監聽器的方法
getAttribute(name)
removeAttribute(name)
--- 觸發刪除屬性的監聽器的方法
(2)ServletContextAttibuteListener監聽器

(3) HttpSessionAttributeListener監聽器(同上)
(4) ServletRequestAriibuteListenr監聽器(同上)
# session中的綁定的對象相關的監聽器(對象感知監聽器)
一個對象要鈍化,要實現序列化接口,
那個對象放到session中需要某個功能就需要實現下面的監聽器的接口
(1)即將要被綁定到session中的對象有幾種狀態
綁定狀態:就一個對象被放到session域中
解綁狀態:就是這個對象從session域中移除了
鈍化狀態:是將session內存中的對象持久化(序列化)到磁盤
活化狀態:就是將磁盤上的對象再次恢復到session內存中
(2)綁定與解綁的監聽器HttpSessionBindingListener

(3)鈍化與活化的監聽器HttpSessionActivationListener
可以通過配置文件 指定對象鈍化時間 --- 對象多長時間不用被鈍化
在META-INF下創建一個context.xml

~~~
<Context>
<!-- maxIdleSwap:session中的對象多長時間不使用就鈍化 -->
<!-- directory:鈍化后的對象的文件寫到磁盤的哪個目錄下 配置鈍化的對象文件在 work/catalina/localhost/鈍化文件 -->
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
<Store className="org.apache.catalina.session.FileStore" directory="study" />
</Manager>
</Context>
~~~

- 基礎
- 編譯和安裝
- scanner類(鍵盤錄入)
- Random類(隨機數)
- 數組
- 方法
- 類
- ArrayList集合
- char與int
- eclipse
- IDEA
- 變量與常量
- 常用API
- String,StringBuffer,StringBuilder
- 正則,Date,DateFormat,Calendar
- 包裝類,System,Math,Arrays,BigInteger,BigDecimal
- 集合,迭代器,增強for,泛型
- List,set,判斷集合唯一
- map,Entry,HashMap,Collections
- 異常
- IO
- File
- 遞歸
- 字節流
- 字符流
- IO流分類
- 轉換流
- 緩沖流
- 流的操作規律
- properties
- 序列化流與反序列化流
- 打印流
- commons-IO
- IO流總結
- 多線程
- 線程池
- 線程安全
- 線程同步
- 死鎖
- lock接口
- ThreadLoad
- 等待喚醒機制
- 線程狀態
- jdbc
- DBUtils
- 連接池DBCP
- c3p0連接池
- 網絡編程
- 多線程socket上傳圖片
- 反射
- xml
- 設計模式
- 裝飾器模式
- web service
- tomcat
- Servlet
- response
- request
- session和cookie
- JSP
- EL
- JSTL
- 事務
- 監聽器Listener
- 過濾器Filter
- json
- linux安裝軟件
- 反射詳解
- 類加載器和注解
- 動態代理
- jedis
- Hibernate
- 簡介
- 創建映射文件
- Hibernate核心配置文件
- 事務和增刪改查
- HibernateUtils
- 持久化對象的三種狀態
- 檢索方式
- query
- Criteria
- SQLQuery
- 持久化類
- 主鍵生成策略
- 緩存
- 事務管理
- 關系映射
- 注解
- 優化
- struts2
- 搭建
- 配置詳解
- Action
- 結果跳轉方式
- 訪問ServletAPI方式
- 如何獲得參數
- OGNL表達式
- valueStack 值棧
- Interceptor攔截器
- spring
- 導包
- IOC和DI
- Bean獲取與實例化
- Bean屬性注入
- spring注解
- 注解分層
- junit整合
- aop
- 動態代理實現
- cglib代理實現
- aop名詞
- spring的aop
- aop-xml詳解
- aop-注解詳解
- 代理方式選擇
- jdbcTemplate
- spring事務管理
- 回滾注意
- 事務傳播屬性
- MyBatis
- MyBatis簡介
- 入門程序
- 與jdbc hibernate不同
- 原始Dao開發
- Mapper動態代理方式
- SqlMapConfig.xml配置文件
- 輸入參數pojo包裝類
- resultMap
- 動態sql
- 一對一關聯
- 一對多
- 整合spring
- 逆向工程
- maven
- maven簡介
- 倉庫
- maven目錄結構
- maven常用命令
- 生命周期
- eclipse中maven插件
- 入門程序
- 整合struct
- 依賴范圍
- 添加插件
- idea配置
- jar包沖突
- 分模塊開發
- 構建可執行的jar包(包含依賴jar包)
- springMVC
- 處理流程
- java面試
- java版本升級
- java1-8版本變更
- java9新特性
- 鎖
- java資料
- idea
- jdk版本切換
- log4j
- 入門實例
- 基本使用方法
- Web中使用Log4j
- spring中使用log4j
- java代碼優化