http://blog.csdn.net/hy6688_/article/details/38666569
最近在開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,他們四者的區別和聯系。我現在還沒有很好的把控,等學到的時候一起做總結吧。
- 誰能舉個通俗易懂的例子告訴我IAAS,SAAS,PAAS的區別?
- 服務器與容器
- 常見NIO框架
- Nginx/Apache 和Apache Tomcat 的區別
- tomcat結合nginx使用小結
- java nio框架netty 與tomcat的關系
- Nginx、Lighttpd與Apache的區別
- Apache vs Lighttpd vs Nginx對比
- 數據庫
- mybatis
- MyBatis傳入多個參數的問題
- MS
- JMS(Java消息服務)入門教程
- ActiveMQ
- JMS簡介與ActiveMQ實戰
- JMS-使用消息隊列優化網站性能
- 深入淺出JMS(一)--JMS基本概念
- 深入淺出JMS(二)--ActiveMQ簡單介紹以及安裝
- 深入淺出JMS(三)--ActiveMQ簡單的HelloWorld實例
- RabbitMq、ActiveMq、ZeroMq、kafka之間的比較,資料匯總
- kafka
- zookeeper
- 集群與負載
- 單機到分布式集群
- 日志
- 從Log4j遷移到LogBack的理由
- 角色權限
- shiro
- Shiro的認證和權限控制
- Spring 整合 Apache Shiro 實現各等級的權限管理
- 安全
- basic
- Servlet、Filter、Listener深入理解
- filter與servlet的比較
- Servlet Filter