過濾器
1、什么是過濾器?
Servlet規范中定義的一種特殊的組件,用來攔截容器的調用過程。容器收到請求之后,首先調用過濾器,然后再調用Servlet
2、過濾器的執行流程: 流程圖中可以看出 過濾器和Servlet共享同一個request和response對象
單個過濾器的執行流程:
多個過濾器的執行流程:
3、過濾器的優先級
一個Web應用中,可以有多個過濾器,它們的優先級由位於web.xml文件中的聲明順序決定,具體是按照<filter-mapping>的順序來決定的。如下代碼所示,filter1和filter2都已經注冊,執行順序是filter2 ,filter1 。
fiter:init()---啟動服務
servlet:init()
fiter:service()---請求
servlet:service()
servlet:destroy()
fiter:destroy()---關閉服務
5、如何編寫過濾器?
a 實現Filter接口,並覆蓋三個方法(destroy,init,doFilter),過濾邏輯在doFilter方法中實現
b 容器啟動之后會立即創建過濾器實例(只會創建一個),接下來會調用init方法(只執行一次)
FilterConfig:可以用來讀取初始化參數
c 容器會調用doFilter方法來處理請求
FilterChain(過濾器鏈):如果調用了該對象的doFilter方法則請求繼續向后執行,否則中斷請求不再向后執行
d 容器在銷毀過濾器實例之前會調用destroy方法(只執行一次)
web.xml中注冊過濾器
監聽器
1、什么是監聽器?
servlet規范中定義的一種特殊的組件,用來監聽容器產生的事件並進行相應的處理。容器會為每個監聽器只創建一個實例。
容器一般會產生什么事件?
綁定數據相關事件
容器調用了session,request,servletContext的setAttribute,removeAttribute產生的事件
生命周期相關事件
容器創建銷毀session,request,servletContext等。
2、監聽器相關概念:
事件源:被監聽的對象。 三個域對象 request session servletContext
監聽器:監聽事件源對象 事件源對象的狀態的變化都會觸發監聽器
3、 監聽器的分類:
第一維度:
按照被監聽的對象分:ServletRequest域 HttpSession域 ServletContext域
第二維度:
按照監聽的內容分: 監聽域對象的創建與銷毀的 監聽域對象的屬性變化的
總結如圖:
ServletContextListener監聽器的主要作用:
1 初始化的工作:初始化對象 初始化數據 ---- 加載數據庫驅動 連接池的初始化
2 加載一些初始化的配置文件 --- spring的配置文件
3 任務調度:定時器----Timer/TimerTask
4、如何編寫監聽器呢?
a)編寫一個監聽器類去實現監聽器接口
b)覆蓋監聽器的方法
c)需要在web.xml中進行配置---注冊
5、三種監聽域的生命周期
ServletRequest
何時創建:每一次請求都會創建request
何時銷毀:請求結束
HttpSession
何時創建:第一次調用request.getSession時創建
何時銷毀:服務器關閉銷毀 session過期 手動銷毀
ServletContext
何時創建:服務器啟動創建
何時銷毀:服務器關閉銷毀