總結下Servlet,Filter,Listener,Interceptor

servlet是一種運行服務器端的java應用程序,它工作在客戶端請求與服務器響應的中間層。Servlet 的主要功能在於交互式地瀏覽和修改數據,生成動態 Web 內容。

filter是一個可以複用的代碼片段,可以用來轉換HTTP請求、響應和頭信息。Filter不像Servlet,它不能產生一個請求或者響應,它只是修改對某一資源的請求,或者修改對某一的響應。
Servlet中的過濾器Filter是實現了javax.servlet.Filter接口的服務器端程序,主要的用途是過濾字符編碼、做一些業務邏輯判斷等。其工作原理是,只要你在web.xml文件配置好要攔截的客戶端請求,它都會幫你攔截到請求,此時你就可以對請求或響應(Request、Response)統一設置編碼,簡化操作;同時還可進行邏輯判斷,如用戶是否已經登陸、有沒有權限訪問該頁面等等工作。它是隨你的web應用啓動而啓動的,只初始化一次,以後就可以攔截相關請求,只有當你的web應用停止或重新部署的時候才銷燬。Filter可認爲是Servlet的一種“變種”,它主要用於對用戶請求進行預處理,也可以對HttpServletResponse進行後處理,是個典型的處理鏈。它與Servlet的區別在於:它不能直接向用戶生成響應。完整的流程是:Filter對用戶請求進行預處理,接着將請求交給Servlet進行處理並生成響應,最後Filter再對服務器響應進行後處理。(struts2本身就依託於一個總過濾器)

listener:監聽器。通過listener可以監聽web服務器中某一個執行動作,並根據其要求作出相應的響應。通俗的語言說就是在application,session,request三個對象創建消亡或者往其中添加修改刪除屬性時自動執行代碼的功能組件。比如spring 的總監聽器會在服務器啓動的時候實例化我們配置的bean對象 、 hibernate 的 session 的監聽器會監聽session的活動和生命週期,負責創建,關閉session等活動。
Servlet的監聽器Listener,它是實現了javax.servlet.ServletContextListener 接口的服務器端程序,它也是隨web應用的啓動而啓動,只初始化一次,隨web應用的停止而銷燬。主要作用是: 做一些初始化的內容添加工作、設置一些基本的內容、比如一些參數或者是一些固定的對象等等。

interceptor:是在面向切面編程的,就是在你的service或者一個方法,前調用一個方法,或者在方法後調用一個方法,是基於JAVA的反射機制。比如動態代理就是攔截器的簡單實現,在你調用方法前打印出字符串(或者做其它業務邏輯的操作),也可以在你調用方法後打印出字符串,甚至在你拋出異常的時候做業務邏輯的操作。

servlet、filter、listener是配置到web.xml中(web.xml 的加載順序是:context-param -> listener -> filter -> servlet ),interceptor不配置到web.xml中,struts的攔截器配置到struts.xml中。spring的攔截器配置到spring.xml中。 

Filter與Interceptor :攔截器是基於Java的反射機制的,而過濾器是基於函數回調。從靈活性上說攔截器功能更強大些,Filter能做的事情,他都能做,而且可以在請求前,請求後執行,比較靈活。Filter主要是針對URL地址做一個編碼的事情、過濾掉沒用的參數、安全校驗(比較泛的,比如登錄不登錄之類),太細的話,還是建議用interceptor。不過還是根據不同情況選擇合適的。

參考:https://blog.csdn.net/sundenskyqq/article/details/8549932

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章