1. 程式人生 > >Filter、Servlet和Listener區別與聯絡

Filter、Servlet和Listener區別與聯絡


1. Servlet

可以用來建立並返回一個包含基於客戶請求性質的動態內容的完整的html頁面;可以建立可嵌入到現有的html頁面中的一部分html頁面(html片段);可以讀取客戶端發來的隱藏資料;可以 讀取客戶端發來的顯示資料;可以與其他伺服器資源(包括資料庫和java的應用程式)進行通訊;也可以 通過狀態程式碼和響應頭向客戶端傳送隱藏資料。


2. Filter

          實現了javax.servlet.Filter介面,因此一定要實現javax.servlet包的Filter介面的三個方法init()、doFilter()、destroy(),空實現也行。Filter不像Servlet,它不能產生一個請求或者響應,它只是修改對某一資源的請求,或者修改對某一資源的響應。在啟動伺服器時會載入過濾器的例項,並呼叫init()方法來初始化例項;當每一次請求時都只調用方法doFilter()進行處理;停止伺服器時呼叫destroy()方法,銷燬例項。

讓我們通過圖來理解Servlet和Filter

Servlet:


Filter:


另外Servlet 的流程是短的,url傳來之後,就對其進行處理,之後返回或轉向到某一自己指定的頁面。它主要用來在 業務處理之前進行控制。而Filter 的流程是線性的, url傳來之後,檢查之後,可保持原來的流程繼續向下執行,被下一個Filter, Servlet接收等,而Servlet 處理之後,不會繼續向下傳遞。Filter功能可用來保持流程繼續按照原來的方式進行下去,或者主導流程,而Servlet的功能主要用來主導流程。Filter可用來進行字元編碼的過濾,檢測使用者是否登陸的過濾,禁止頁面快取等


3. Listener

Servlet,Filter都是針對url之類的,而Listener是針對物件的操作的,如session的建立,session.setAttribute的發生,在這樣的事件發生時做一些事情。

下面讓我們結合web.xml的內容進行理解


很明顯的可以看出對於Servlet的Filter我們都需要配置url,而對於Listener則不需要。

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