servlet的監聽器、過濾器、攔截器的區別


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

1.監聽器(listener):在request、session、application三個對象創建消亡或者往其中增/刪/改屬性時自動執行指定代碼的功能組件。

生命周期:隨web應用的啟動而啟動,只初始化一次,隨web應用的停止而銷毀。

作用:做一些初始化的內容添加工作、設置一些基本的內容、比如一些參數或者是一些固定的對象等等。

2.過濾器(filter):攔截請求,filter能夠在一個請求到達控制層之前預處理用戶請求,也可以在離開控制層時處理http響應,進行一些設置以及邏輯判斷,然后再傳入servlet或者struts的 action進行業務邏輯,基於函數回調。

 生命周期:它是隨你的web應用啟動而啟動的,只初始化一次,以后就可以攔截相關請求,只有當你的web應用停止或重新部署的時候才銷毀。

 作用:1、對請求或響應(Request、Response)統一設置統一編碼,簡化操作;

            2、進行邏輯判斷,如用戶是否已經登陸、有沒有權限訪問該頁面等等工作。

            3、過濾掉非法url

3.攔截器(interceptor):攔截器是在面向切面編程中應用的,基於JAVA的反射機制,在一個業務邏輯(某個方法)前、后調用另一個方法。

servlet:servlet是一種運行服務器端的java應用程序,具有獨立於平台和協議的特性,並且可以動態的生成web頁面,它工作在客戶端請求與服務器響應的中間層。

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

 

概念

  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中,struts的攔截器配置到struts。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.interceptor

  加載配置文件后初始化攔截器,當有對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.interceptor

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

  區別

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

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

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

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

  可用來進行:Spring整合Struts,為Struts的action注入屬性,web應用定時任務的實現,在線人數的統計等;

  4,interceptor攔截器,類似於filter,不過在struts中配置,不是在web.xml,並且不是針對url的而是針對action的,當頁面提交時,進行過濾操作;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM