servlet 攔截器、過濾器、監聽器區別

       過濾器,是在JavaWeb中,你傳入的request,response提早過濾掉一些信息,或者提早設置一些參數,而後在傳入Servlet或者Struts2的,action進行業務邏輯,好比過濾掉非法URL(不是login.do的請求地址,若是用戶沒有登陸都過濾掉),或者再傳入Servlet或者java

        Struts2的action前統一設置字符集,或者去除掉一些非法字符web

         攔截器,是在面向切面編程的就是在你的service或者一個方法,前調用方法,或者再方法後調用一個方法好比動態代理就是攔截器的簡單實現,再你調用方法前打印字符串(或者作其它業務邏輯操做),也能夠在你調用方法後打印出字符串,甚至在你拋出異常的時間作業務邏輯的操做。編程

攔截器與過濾器的區別:服務器

攔截器是基於java反射機制的,而過濾器是基於函數回調。函數

攔截器不依賴於Servlet容器,過濾器依賴於Servlet容器。spa

攔截器只能對action請求起做用,而過濾器則能夠對幾乎全部的請求起做用。代理

攔截器能夠訪問action上下文、值棧裏的對象,而過濾器不能訪問。對象

在action的生命週期中,攔截器能夠屢次被調用,而過濾器只能在容器初始化時被調用一次。接口

執行順序 :過濾前 - 攔截前 - Action處理 - 攔截後 -
  過濾後。我的認爲過濾是一個橫向的過程,首先把客戶端提交的內容進行過濾(例如未登陸用戶不能訪問內部頁面的處理);過濾經過後,攔截器將檢查用戶提交數
  據的驗證,作一些前期的數據處理,接着把處理後的數據發給對應的Action;Action處理完成返回後,攔截器還能夠作其餘過程,再向上返回到過濾器的後續操做。

  監聽器:這個東西在c/s模式裏面常常用到,他會對特定的事件產生產生一個處理。監聽在不少模式下用到。好比說觀察者模式,就是一個監聽來的。又好比struts2能夠用監聽來啓動。Servlet監聽器用於監聽一些重要事件的發生,監聽器對象能夠在事情發生前、發生後能夠作一些必要的處理。
  比如若是說Servlet的監聽器Listener,它是實現了javax.servlet.ServletContextListener
  接口的服務器端程序,它也是隨web應用的啓動而啓動,只初始化一次,隨web應用的中止而銷燬。主要做用是:
  作一些初始化的內容添加工做、設置一些基本的內容、好比一些參數或者是一些固定的對象等等。生命週期

相關文章
相關標籤/搜索