servlet和filter的區別


今天被人問到 servlet和filter的區別  ,在我印象中 servlet和filter是兩種不同的東西 , 怎么還問區別 在我看來區別大了但又不知道怎么說,  當場都懵逼了 。 趕緊問問度娘 ,得到以下答案 。給自己一個答案

主要從如下四個方面介紹他們之間的區別:

                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()方法,銷毀實例。 
     個人理解的servlet生命周期 :默認第一次訪問時 創建servlet對象 調用intn()方法初始化 ,每次訪問都調用serves()服務 處理請求給與響應 ,關閉服務器時調用destroy()銷毀servlet對象。
        2、filter:(一定要實現javax.servlet包的Filter接口的三個方法init()、doFilter()、destroy(),空實現也行)
        (1)、啟動服務器時加載過濾器的實例,並調用init()方法來初始化實例;
        (2)、每一次請求時都只調用方法doFilter()進行處理;

        (3)、停止服務器時調用destroy()方法,銷毀實例。

 

    個人理解 :當服務器啟動時 創建filter對象 調用intn()方法初始化,每次請求都調用dofilter()方法處理 關閉服務器時調用destroy()方法銷毀對象

 

三 職責

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

      個人理解 :servlet是處理請求給與響應的 filter主要是為servlet服務的 

 

  四、區別:    

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

 


免責聲明!

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



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