在學習java EE的過程中,我們一定會接觸這兩個小傢伙,而且面試過程中也是常見考題,那麼他們究竟是什麼
Servlet:是一種運行在服務器端的1java應用程序,具有平臺獨立性和協議的特性,可以動態的生成web頁面,位於客戶端請求和服務器響應的中間層。servlet的主要功能有:
(1) 創建並返回一個包含基於客戶請求性質的動態內容的完整的 HTML頁面。
(2) 創建可嵌入到現有 HTML 頁面中的一部分 HTML 頁面(HTML 片段)。
(3) 與其它服務器資源(包括數據庫和基於 Java 的應用程序)進行通信。
(4) 用多個客戶機處理連接,接收多個客戶機的輸入,並將結果廣播到多個客戶機上。例如,Servlet 可以是多參與者的遊戲服務器。
(5) 當允許在單連接方式下傳送數據的情況下,在瀏覽器上打開服務器至applet的新連接,並將該連
接保持在打開狀態。當允許客戶機和服務器簡單、高效地執行會話的情況下,applet也可以啓動客戶瀏覽器和服務器之間的連接。可以通過定製協議或標準(如 IIOP)進行通信。
(6) 對特殊的處理採用 MIME 類型過濾數據,例如圖像轉換和服務器端包括(SSI)。
(7) 將定製的處理提供給所有服務器的標準例行程序。例如,Servlet 可以修改如何認證用戶。
servlet的生命週期:servlet的生命週期始於將他裝入web服務器的內存時,並在終止或重新裝入Servlet時結束
(1)、裝入:啓動服務器時加載Servlet的實例;
(2)、初始化:web服務器啓動時或web服務器接收到請求時,或者兩者之間的某個時刻啓動。初始化工作有init()方法負責執行完成;
(3)、調用:從第一次到以後的多次訪問,都是隻調用doGet()或doPost()方法;
(4)、銷燬:停止服務器時調用destroy()方法,銷燬實例。
Filter:filter是一個可以複用的代碼片段,可以用來轉換Http請求、響應和頭信息,它使用戶可以改變一個request和修改response,Filter不是Servlet,他不能產生一個response,他能夠在一個request到達servlet之前預處理request,也可以在離開Servlet時,處理response
filter的功能:
1)、在servlet被調用之前截獲;
2)、在servlet被調用之前檢查servlet request;
3)、根據需要修改request頭和request數據;
4)、根據需要修改response頭和response數據;
5)、在servlet被調用之後截獲.
Filter的生命週期:(一定要實現javax.servlet包的Filter接口的三個方法init()、doFilter()、destroy(),空實現也行)
(1)、啓動服務器時加載過濾器的實例,並調用init()方法來初始化實例;
(2)、每一次請求時都只調用方法doFilter()進行處理;
(3)、停止服務器時調用destroy()方法,銷燬實例。
兩者之間的區別:
1、servlet流程是短的,url傳來之後對其進行處理,之後返回或者轉向某一自己定義的頁面,他主要用來在業務處理之前進行控制
2、filter 流程是線性的, url傳來之後,檢查之後,可保持原來的流程繼續向下執行,被下一個filter, servlet接收等,而servlet 處理之後,不會繼續向下傳遞。filter功能可用來保持流程繼續按照原來的方式進行下去,或者主導流程,而servlet的功能主要用來主導流程。
filter可用來進行字符編碼的過濾,檢測用戶是否登陸的過濾,禁止頁面緩存等
https://blog.csdn.net/xiaojie119120/article/details/73274759
https://blog.csdn.net/sundenskyqq/article/details/8549932
Spring的Interceptor和Servlet的filter有什麼區別?
(1)攔截器是基於java反射實現的,過濾器是基於函數回調的
(2)Filter的執行順序是按照.xml文件配置的順序執行,Interceptor可以按照順序執行,也可以通過order控制
(3)Filter由servlet容器支持,Interceptor由Spring框架支持
(4)Filter只能使用在Web程序上,Intercepter還可以應用於Application和Swing程序
(5)Filter只能在Servlet前後使用,攔截器能夠深入到方法前後,異常拋出前後等