1. 程式人生 > >JavaWeb中的監聽器、過濾器、攔截器、介面卡簡述

JavaWeb中的監聽器、過濾器、攔截器、介面卡簡述

概念

  • context-param:

    就是一些需要初始化的配置,放入context-param中,從而被監聽器(這裡特指org.springframework.web.context.ContextLoaderListener)監聽,然後載入;

  • 監聽器(listener):

    就是對專案起到監聽的作用,它能感知到包括request(請求域),session(會話域)和applicaiton(應用程式)的初始化和屬性的變化,活動在整個request和response週期中;

    Servlet監聽器用於監聽一些重要事件的發生,監聽器物件可以在事情發生前、發生後可以做一些必要的處理。下面將介紹幾種常用的監聽器

    • 分類及介紹:
    1. ServletContextListener:用於監聽WEB 應用啟動和銷燬的事件,監聽器類需要實現javax.servlet.ServletContextListener 介面。
    2. ServletContextAttributeListener:用於監聽WEB應用屬性改變的事件,包括:增加屬性、刪除屬性、修改屬性,監聽器類需要實現javax.servlet.ServletContextAttributeListener介面。
    3. HttpSessionListener:用於監聽Session物件的建立和銷燬,監聽器類需要實現javax.servlet.http.HttpSessionListener介面或者javax.servlet.http.HttpSessionActivationListener介面,或者兩個都實現。
    4. HttpSessionActivationListener:用於監聽Session物件的鈍化/活化事件,監聽器類需要實現javax.servlet.http.HttpSessionListener介面或者javax.servlet.http.HttpSessionActivationListener介面,或者兩個都實現。(沒用過)
    5. 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的內部,具體來說有三個地方:

    1. 控制層執行之前
    2. 控制層執行之後檢視層渲染之前
    3. 檢視層渲染之後servlet結束之前

總結

context-param-->listener-->filter-->servlet-->interceptor(listener貫穿servlet)

  • HandlerInterceptor

其中preHandle、postHandle、afterComplication三個方法執行順序:preHandle——handler——postHandle——view渲染——afterCompl