從四個方面來區分:
概念
servlet是一種運行在服務器端的Java應用程序,獨立於平台和協議,可以動態的生成web頁面,它工作於客戶端請求和服務器的中間層
filter是一個可以復用的代碼片段,可以用來轉換請求,響應以及頭信息,filter不能產生請求和響應,他只能在請求到達servlet之前對請求進行修改,或者在請求返回客戶端之前對響應進行處理
生命周期
servlet是在系統啟動或者請求到達servlet時,通過init()方法進行初始化,一旦被裝入了web服務器,一般不會從Web服務器刪除,直到服務器關閉才會調用 destroy()方法進行銷毀。每次請求,Request都會被初始化,響應請求后,請求被銷毀。但是servlet不會隨着請求的銷毀而銷毀
如果某個Servlet配置了 <load-on-startup >1 </load-on-startup >,該Servlet也是在Tomcat(Servlet容器)啟動時初始化。
如果Servlet沒有配置<load-on-startup >1 </load-on-startup >,該Servlet不會在Tomcat啟動時初始化,而是在請求到來時初始化。
filter
是在系統啟動的時候通過init()初始化的,每次請求都只會調用dofiter方法進行處理,服務器停止的時候調用destroy()進行銷毀
注意:服務器關閉時,servlet和filter依次銷毀
職責
servlet
可以動態創建基於客戶請求的頁面;可以讀取客戶端發來的隱藏數據和顯示數據;可以和其他的服務器資源進行通訊;通過狀態代碼和響應頭向客戶端返回數據。
filter
主要是對請求到達servlet之前對請求和請求頭信息進行前處理,和對數據返回客戶端之前進行后處理
區別
servlet的流程比較短,url來了之后就對其進行處理,處理完就返回數據或者轉向另一個頁面
filter的流程比較長,在一個filter處理之后還可以轉向另一個filter進行處理,然后再交給servlet,但是servlet處理之后不能向下傳遞了。
filter可用來進行字符編碼的過濾,檢測用戶是否登陸的過濾,禁止頁面緩存等