天天看點

過濾器filter、攔截器intercepter、監聽器listener、servlet差別一、概念二、生命周期三、職責四、差別

一、概念

      1、servlet:servlet是一種運作伺服器端的java應用程式,具有獨立于平台和協定的特性,

可以動态生成web頁面它工作在用戶端請求與伺服器響應的中間層;

  2、filter:filter是一個可以複用的代碼片段,可以用來轉換HTTP請求,響應和頭資訊。

它不能産生一個請求或者響應,它隻是修改對某一資源的請求或者響應;

  3、listener:監聽器,通過listener可以堅挺web伺服器中某一執行動作,并根據其要求作出相應的響應。

就是在application,session,request三個對象建立消亡或者往其中添加修改删除屬性時自動執行代碼的功能元件;

  4、interceptor:攔截器是對過濾器更加細化的應用,他不僅可以應用在service方法前後還可以應用到其他方法的前後

攔截器;

  5、servlet,filter,listener是配置到web.xml中,interceptor不配置到web.xml中,spring的攔截器配置到spring.xml中;

二、生命周期

1.servlet

       servle的生命周期開始于被裝入web伺服器的記憶體中,并在web服務終止或者重新裝入servlet的時候結束;

       servlet一旦被裝入web伺服器,一般不會從web伺服器記憶體中删除;直到web伺服器關閉;

  裝入:啟動伺服器時加載servlet的執行個體;

  初始化:web伺服器接收到請求時,或者兩者之間的某個時刻啟動,調用init()

  調用:從第一次到以後的多次通路,都隻調用doGet()或dopost)()方法;

  銷毀;停止伺服器時調用destroy()方法,銷毀執行個體;

2.filter

       需要實作javax.servlet包的Filter接口的三個方法init(),doFilter(),destroy();

  加載:啟動伺服器時加載過濾器的執行個體,并調用init()方法;

  調用:每次請求的時候隻調用方法doFilter()進行處理;

  銷毀:伺服器關閉前調用destroy()方法,銷毀執行個體;

3.listener

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

4.intercepter

        加載配置檔案後初始化攔截器,當有對action的請求的時候,調用interceptor方法,最後也是根據伺服器停止進行銷毀;

三、職責

1.servlet  

       建立并傳回一個包含基于客戶請求性質的動态内容的完整的html頁面

  建立可嵌入到現有的html頁面中的一部分html頁面(html片段)

  讀取用戶端發來的隐藏資料

  讀取用戶端發來的顯示資料

  與其他伺服器資源(包括資料庫和java的應用程式)進行通信

2.filter

       filter能夠在一個請求到達servlet之前預處理使用者請求,也可以在離開servlet時處理http響應:

  在執行servlet之前,首先執行filter程式,并為之做一些預處理工作;

  在servlet被調用之後截獲servlet的執行

3.listener

       servlet2.4規範提供了8個listener接口,可以将其分為三類,分别如下;

  第一類:與HttpContext有關的listener接口,包括:ServletContextListener、ServletContextAttributeListener

  第二類:與HttpSession有關的listner接口。包括:HttpSessionListener、HttpSessionAttributeListener、

HttpSessionBindingListener、 HttpSessionActivationListener、

  第三類:與ServletRequest有關的Listener接口,包括:ServletRequestListener、ServletRequestAttributeListener

4.intercepter

       與過濾器類似,通過層層攔截,處理使用者的請求和響應;

四、差別

1.servlet  

       servlet 流程是短的,url傳來之後,就對其進行處理,之後傳回或轉向到某一自己指定的頁面。它主要用來在 業務處理之前進行控制.

2.filter

        filter 流程是線性的, url傳來之後,檢查之後,可保持原來的流程繼續向下執行,被下一個filter, servlet接收等,而servlet 處理之後,不會繼續向下傳遞。filter功能可用來保持流程繼續按照原來的方式進行下去,或者主導流程,而servlet的功能主要用來主導流程。

   filter可用來進行字元編碼的過濾,檢測使用者是否登陸的過濾,禁止頁面緩存等

3.listener

       servlet,filter都是針對url之類的,而listener是針對對象的操作的,如session的建立,session.setAttribute的發生,在這樣的事件發生時做一些事情。

  可用來進行:web應用定時任務的實作,線上人數的統計等;

4.intercepter

       interceptor攔截器,類似于filter,不過不是針對url的而是針對controller的,當頁面送出時,進行過濾操作;