1. 程式人生 > 實用技巧 >Servlet中的過濾器和監聽器

Servlet中的過濾器和監聽器

1.什麼是過濾器?

  Servlet規範中定義的一種特殊的元件,用來攔截容器的呼叫過程。容器收到請求之後,首先呼叫過濾器,然後再呼叫Servlet

2.生命週期:

1、servlet:servlet的生命週期始於它被裝入web伺服器的記憶體時,並在web伺服器終止或重新裝入servlet時結束。servlet一旦被裝入web伺服器,一般不會從web伺服器記憶體中刪除,直至web伺服器關閉或重新結束。
(1)、裝入:啟動伺服器時載入Servlet的例項;
(2)、初始化:web伺服器啟動時或web伺服器接收到請求時,或者兩者之間的某個時刻啟動。初始化工作有init()方法負責執行完成;

(3)、呼叫:從第一次到以後的多次訪問,都是隻呼叫doGet()或doPost()方法;
(4)、銷燬:停止伺服器時呼叫destroy()方法。

2、filter:(一定要實現javax.servlet包的Filter介面的三個方法init()、doFilter()、destroy(),空實現也行)
(1)、啟動伺服器時載入過濾器的例項,並呼叫init()方法來初始化例項;
(2)、每一次請求時都只調用方法doFilter()進行處理;
(3)、停止伺服器時呼叫destroy()方法。

3、listener:類似於servlet和filter

web.xml的載入順序是:context- param->listener->filter->servlet

4、interceptor:以struts的攔截器為例,載入了struts.xml以後,初始化相應攔截器。當action請求來時呼叫intercept方法,伺服器停止銷燬interceptor。

3.過濾器的執行流程

Øweb.xml中註冊過濾器

 <!-- 過濾器 -->
        <filter>
              <filter-name>filter1</filter-name>
              <filter-class>web.CommentFilter</filter-class
>         </filter>         <filter-mapping>            <filter-name>filter1</filter-name>            <url-pattern>/comment</url-pattern>         </filter-mapping>

4.什麼是監聽器?

   servlet規範中定義的一種特殊的元件,用來監聽容器產生的事件並進行相應的處理。容器會為每個監聽器只建立一個例項。

5.監聽器的分類:

       第一維度:

          按照被監聽的物件分:ServletRequest域 HttpSession域 ServletContext域

       第二維度:

          按照監聽的內容分: 監聽域物件的建立與銷燬的 監聽域物件的屬性變化的

 總結如圖:

    

6.如何編寫監聽器呢?

    a)編寫一個監聽器類去實現監聽器介面

    b)覆蓋監聽器的方法

    c)需要在web.xml中進行配置---註冊

7.過濾器和攔截器的區別與聯絡:

  a)攔截器是基於java反射機制的,而過濾器是基於函式回撥的。

  b)過濾器依賴與servlet容器,而攔截器不依賴與servlet容器。

  c)攔截器只能對Action請求起作用,而過濾器則可以對幾乎所有請求起作用。

  d)攔截器可以訪問Action上下文、值棧裡的物件,而過濾器不能。

  e)在Action的生命週期中,攔截器可以多次呼叫,而過濾器只能在容器初始化時被呼叫一次


                      

                      成功的祕訣在於永不改變既定的目標