JavaWeb中的監聽器、過濾器、攔截器、介面卡簡述
概念
-
context-param:
就是一些需要初始化的配置,放入context-param中,從而被監聽器(這裡特指org.springframework.web.context.ContextLoaderListener)監聽,然後載入;
-
監聽器(listener):
就是對專案起到監聽的作用,它能感知到包括request(請求域),session(會話域)和applicaiton(應用程式)的初始化和屬性的變化,活動在整個request和response週期中;
Servlet監聽器用於監聽一些重要事件的發生,監聽器物件可以在事情發生前、發生後可以做一些必要的處理。下面將介紹幾種常用的監聽器
- 分類及介紹:
- ServletContextListener:用於監聽WEB 應用啟動和銷燬的事件,監聽器類需要實現javax.servlet.ServletContextListener 介面。
- ServletContextAttributeListener:用於監聽WEB應用屬性改變的事件,包括:增加屬性、刪除屬性、修改屬性,監聽器類需要實現javax.servlet.ServletContextAttributeListener介面。
- HttpSessionListener:用於監聽Session物件的建立和銷燬,監聽器類需要實現javax.servlet.http.HttpSessionListener介面或者javax.servlet.http.HttpSessionActivationListener介面,或者兩個都實現。
- HttpSessionActivationListener:用於監聽Session物件的鈍化/活化事件,監聽器類需要實現javax.servlet.http.HttpSessionListener介面或者javax.servlet.http.HttpSessionActivationListener介面,或者兩個都實現。(沒用過)
- HttpSessionAttributeListener:用於監聽Session物件屬性的改變事件,監聽器類需要實現javax.servlet.http.HttpSessionAttributeListener介面。 (沒用過)
-
過濾器(filter):
Servlet過濾器是在java servlet規範2.3中定義的,他能夠對servlet容器的請求和響應物件進行檢查和修改。
過濾器是JavaEE標準,採用函式回撥的方式進行。
Servlet過濾器本身並不產生請求和響應物件,他只能提供過濾作用,servlet過濾能夠在servlet被呼叫之前檢查request物件,修改request的header和request內容,在呼叫後檢查response物件,修改response的頭和內容。
Servlet過濾負責過濾的web元件可以是servlet,jsp或html檔案。 就是對請求起到過濾的作用,作用在servlet之前,對請求進行過濾;
-
特點:
過濾器可以檢查和修改request和response物件
過濾器可以被指定url,當訪問到該url時才會觸發過濾
過濾器可以有很多個,串聯使用,形成過濾器鏈。
-
-
servlet:就是對request和response進行處理的容器,它在filter之後執行,servlet其中的一部分就是controller層,還包括渲染檢視層和進入controller之前系統的一些處理部分
-
攔截器(interceptor):就是對請求和響應進行攔截,它作用在servlet的內部,具體來說有三個地方:
- 控制層執行之前
- 控制層執行之後檢視層渲染之前
- 檢視層渲染之後servlet結束之前
總結
context-param-->listener-->filter-->servlet-->interceptor(listener貫穿servlet)
- HandlerInterceptor
其中preHandle、postHandle、afterComplication三個方法執行順序:preHandle——handler——postHandle——view渲染——afterCompl