filter與servlet的比較

來源:互聯網
上載者:User

標籤:java   filter   servlet   

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

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

                4.執行過程。


    一、概念:
 
         1、servlet:servlet是一種運行伺服器端的java應用程式,具有獨立於平台和協議的特性,並且可以動態產生web頁面,它工作在用戶端請求與伺服器響應的中介層。
 
         2、filter:filter是一個可以複用的程式碼片段,可以用來轉換HTTP請求、響應和頭資訊。Filter不像Servlet,它不能產生一個請求或者響應,它只是修改對某一資源的請求,或者修改從某一的響應。


       二、生命週期:
 
        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()方法,銷毀執行個體。



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


        四、區別:

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


 五、執行流程圖:


         1、servlet:

               

          2、filter:

           


總結:

        剛剛開始java的學習,對於兩者的理解也只有這些了,但是在我的學習過程中,發現其實不止是有這兩個的比較,還有listener和interceptor,他們四者的區別和聯絡。我現在還沒有很好的把控,等學到的時候一起做總結吧。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.