【024期】JavaWeb面試題(五):Filter和Listener

lanyu發表於2021-09-09

開篇介紹

大家好,我是Java最全面試題庫的提褲姐,今天這篇是JavaWeb系列的第五篇,主要總結了JavaWeb中Filter和Listener相關的問題,在後續,會沿著第一篇開篇的知識線路一直總結下去,做到日更!如果我能做到百日百更,希望你也可以跟著百日百刷,一百天養成一個好習慣。

什麼是過濾器?

定義:
依賴於servlet容器;
在實現上基於函式回撥,可以對幾乎所有請求進行過濾;
缺點是一個過濾器例項只能在容器初始化時呼叫一次;

作用
用來做一些過濾操作,獲取我們想要獲取的資料:
在過濾器中修改字元編碼;
在過濾器中修改HttpServletRequest的一些引數,包括:過濾低俗文字、危險字元等。

什麼是監聽器?

定義:
實現了javax.servlet.ServletContextListener 介面的伺服器端程式;
隨web應用的啟動而啟動;只初始化一次;
隨web應用的停止而銷燬;

作用:
做一些初始化的內容新增工作、設定一些基本的內容、比如一些引數或者是一些固定的物件等等。如SpringMVC的監聽器org.springframework.web.context.ContextLoaderListener,實現了SpringMVC容器的載入Bean物件建立DispatchServlet初始化等。

什麼是攔截器?

依賴於web框架,在SpringMVC中就是依賴於SpringMVC框架;
在實現上基於Java的反射機制,屬於面向切面程式設計(AOP)的一種運用;
缺點是隻能對controller請求進行攔截,對其他的一些比如直接訪問靜態資源的請求則沒辦法進行攔截處理;

由於攔截器是基於web框架的呼叫,因此可以使用Spring的依賴注入(DI)進行一些業務操作,同時一個攔截器例項在一個controller生命週期之內可以多次呼叫。

過濾器和攔截器的區別?

攔截器 過濾器
基於Java反射機制 基於函式回撥
不依賴Servlet容器 依賴Servlet容器
只能對action起作用 幾乎對所有請求起作用
可以訪問action上下文,值棧裡的物件 可以訪問action上下文,值棧裡的物件
在Action生命週期中,攔截器可以多次被呼叫 過濾器只能在容器初始化時被呼叫一次
攔截器不能修改request 過濾器可以修改request
攔截器可以呼叫IOC容器中的各種依賴 過濾器不能呼叫IOC容器中的各種依賴
攔截器可以詳細到每個方法 過濾器只能在請求的前後使用

過濾器主要是過濾出要的東西,如requeset中的資訊;攔截器在做安全方面用的比較多,比如終止一些流程

Servlet與Filter的區別?

Filter是一種特別的Servlet,它們的作用是完全不一樣的。
Servlet是用來處理請求的,而Filter是用來過濾檢查請求的。

web.xml 的作用?

用於配置Web應用的相關資訊
如:監聽器(listener)、過濾器(filter)、 Servlet、相關引數、會話超時時間、安全驗證方式、錯誤頁面等。

filter的生命週期?

  • 啟動伺服器時載入過濾器的例項,並呼叫init()方法來初始化例項;
  • 每一次請求時都只呼叫方法doFilter()進行處理;
  • 停止伺服器時呼叫destroy()方法,銷燬例項。

需要實現javax.servlet包的Filter介面的三個方法init()doFilter()destroy()

什麼是servlet?

servlet是執行在web伺服器中的小型java程式,通常透過HTTP協議接受和相應來自web客戶端的請求。

  • Servlet對像,由Servlet容器建立。通常這個容器就是tomcat。
  • Servlet是一個介面:位於javax.servlet包中。

Servlet的生命週期?

servlet被例項化後,呼叫init方法。請求到達時,執行service()方法,呼叫doGet()、doPost()等方法。當伺服器決定將例項銷燬時呼叫destroy()方法。

  • init():第一次請求資源的時候,執行且只執行一次init方法。
  • service():第二次往後,執行service方法,執行多次。在這個方法內部,根據請求方式的不同,進而繼續呼叫不同的doGet和doPost方法。
  • destory():當Servlet伺服器正常關閉時,執行destroy方法,只執行一次

Servlet和 CGI的區別?

Servlet透過多執行緒的方式執行service方法,一個例項可以服務於多個請求,並且例項一般不會被銷燬。而CGI對每個請求都產生新的程式,服務完成後就銷燬,所以效率上低於Servlet。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2035/viewspace-2825942/,如需轉載,請註明出處,否則將追究法律責任。

相關文章