filter與servlet的比較

最近在開java的東西,還記得剛開始使用servlet是在調試一個ajax的時候,那時候不知道如何使用,就知道寫一個路徑去調用,老是提示404錯誤,覺得是相對路徑與絕對路徑的問題,到最後本身一點點的調通了,知道servlet是須要服務器編譯運行,是須要配置web.xml的。到學習filter,發現他們的套路徹底是同樣的,也須要在web.xml中進行相應的配置。能夠說是基本同樣的,我不由要問,他們之間有什麼異同呢。

        遇到問題的時候也是學習的時候,我就在網上找了點相關的資料,與你們分享一下:
        主要從以下四個方面介紹他們之間的區別:
                1.概念。
                2.生命週期。
                3.職責。html

                4.執行過程。java

 

    1、概念:
 
         一、servlet:servlet是一種運行服務器端的java應用程序,具備獨立於平臺和協議的特性,而且能夠動態的生成web頁面,它工做在客戶端請求與服務器響應的中間層。
 
         二、filter:filter是一個能夠複用的代碼片斷,能夠用來轉換HTTP請求、響應和頭信息。Filter不像Servlet,它不能產生一個請求或者響應,它只是修改對某一資源的請求,或者修改從某一的響應。


       2、生命週期:
 
        一、servlet:servlet的生命週期始於它被裝入web服務器的內存時,並在web服務器終止或從新裝入servlet時結束。servlet一旦被裝入web服務器,通常不會從web服務器內存中刪除,直至web服務器關閉或從新結束。
        (1)、裝入:啓動服務器時加載Servlet的實例;
        (2)、初始化:web服務器啓動時或web服務器接收到請求時,或者二者之間的某個時刻啓動。初始化工做有init()方法負責執行完成;
        (3)、調用:從第一次到之後的屢次訪問,都是隻調用doGet()或doPost()方法;
        (4)、銷燬:中止服務器時調用destroy()方法,銷燬實例。 
 
        二、filter:(必定要實現javax.servlet包的Filter接口的三個方法init()、doFilter()、destroy(),空實現也行)
        (1)、啓動服務器時加載過濾器的實例,並調用init()方法來初始化實例;
        (2)、每一次請求時都只調用方法doFilter()進行處理;web

        (3)、中止服務器時調用destroy()方法,銷燬實例。ajax

 

 

  3、職責
 
       一、servlet:
 
        建立並返回一個包含基於客戶請求性質的動態內容的完整的html頁面;
        建立可嵌入到現有的html頁面中的一部分html頁面(html片斷);
        讀取客戶端發來的隱藏數據;
        讀取客戶端發來的顯示數據;
        與其餘服務器資源(包括數據庫和java的應用程序)進行通訊;
        經過狀態代碼和響應頭向客戶端發送隱藏數據。
 
       二、filter:
 
        filter可以在一個請求到達servlet以前預處理用戶請求,也能夠在離開servlet時處理http響應:
        在執行servlet以前,首先執行filter程序,併爲之作一些預處理工做;
        根據程序須要修改請求和響應;
        在servlet被調用以後截獲servlet的執行


數據庫

        4、區別:緩存

      1,servlet 流程是短的,url傳來以後,就對其進行處理,以後返回或轉向到某一本身指定的頁面。它主要用來在 業務處理以前進行控制.
        2,filter 流程是線性的, url傳來以後,檢查以後,可保持原來的流程繼續向下執行,被下一個filter, servlet接收等,而servlet 處理以後,不會繼續向下傳遞。filter功能可用來保持流程繼續按照原來的方式進行下去,或者主導流程,而servlet的功能主要用來主導流程。
         filter可用來進行字符編碼的過濾,檢測用戶是否登錄的過濾,禁止頁面緩存等


服務器

 5、執行流程圖:學習

 

         一、servlet:編碼

               

          二、filter:url

           

 

總結:

 

        剛剛開始java的學習,對於二者的理解也只有這些了,可是在個人學習過程當中,發現其實不止是有這兩個的比較,還有listener和interceptor,他們四者的區別和聯繫。我如今尚未很好的把控,等學到的時候一塊兒作總結吧。

相關文章
相關標籤/搜索