1. 程式人生 > >原 過濾器 監聽器 攔截器 區別

原 過濾器 監聽器 攔截器 區別

過濾器,監聽器,攔截器

過濾器:主要的用途是過濾字元編碼,做一些業務邏輯判斷,隨你的web應用啟動而啟動,只初始化一次,以後就可以攔截相關的請求,只有當你的web應用停止或者重新部署的時候才能銷燬。

監聽器:主要作用:做一些初始化的內容新增工作、設定一些基本的內容,比如一些引數或者是一些固定的物件,比如統計線上人數,當session建立時候數值就加1,當session銷燬時候就減1.它是隨著web應用的啟動而啟動,只初始化一次,隨web應用的停止而銷燬。

攔截器:面向切面程式設計應用,就是在你的service或者一個方法前呼叫一個方法,或者在方法後呼叫一個方法,在你呼叫方法前打印出字串,也可以在你呼叫方法後列印字串,甚至在你丟擲異常時候做業務邏輯的操作。在*.xml中配置,定義攔截器實現HandlerInterceptor介面

 preHandle方法:進入Handler方法之前執行。可以用於身份認證、身份授權。比如如果認證沒有通過表示使用者沒有登陸,需要此方法攔截不再往下執行(return false),否則就放行(return true)。
  postHandle方法:進入Handler方法之後,返回ModelAndView之前執行。可以看到該方法中有個modelAndView的形參。應用場景:從modelAndView出發:將公用的模型資料(比如選單導航之類的)在這裡傳到檢視,也可以在這裡同一指定檢視。
  afterCompletion方法:執行Handler完成之後執行。應用場景:統一異常處理,統一日誌處理等。
在springmvc中,攔截器是針對具體的HandlerMapping進行配置的,也就是說如果在某個HandlerMapping中配置攔截,經過該 HandlerMapping對映成功的handler最終使用該攔截器。

過濾器(Filter):當你有一堆東西的時候,你只希望選擇符合你要求的某一些東西。定義這些要求的工具,就是過濾器。
攔截器(Interceptor):在一個流程正在進行的時候,你希望干預它的進展,甚至終止它進行,這是攔截器做的事情。
監聽器(Listener):當一個事件發生的時候,你希望獲得這個事件發生的詳細資訊,而並不想幹預這個事件本身的程序,這就要用到監聽器。

把整個專案的流程比作一條河,那麼監聽器的作用就是能夠聽到河流裡的所有聲音,過濾器就是能夠過濾出其中的魚,而攔截器則是攔截其中的部分魚,並且作標記。所以當需要監聽到專案中的一些資訊,並且不需要對流程做更改時,用監聽器;當需要過濾掉其中的部分資訊,只留一部分時,就用過濾器;當需要對其流程進行更改,做相關的記錄時用攔截器。

自定義攔截器的使用需要實現HandlerInterceptor

自定義攔截器的配置:

<mvc:interceptors>

 <mvc:interceptor>

<mvc:mapping path=””>path後面路徑是你的攔截器將要攔截這個路徑下的所有請求

<mvc:exclude-mapping path=””>path後面路徑是你指定攔截器不攔截當前路徑下的請求

<bean class=””/>class後面路徑是指你自定義的攔截器類的路徑

</mvc:interceptor>

</mvc:interceptors>

 

異常處理:

<bean class=”org.springframework.web.servlet.handler.SimpleMappingExceptionResolver”>

<property name=”exceptionMappings”>

<props>

<prop key=”java.lang.Exception”>error</prop>

Key代表的是異常型別,error代表的是發生異常時候頁面跳轉到error頁面

</props>

</property>

</bean>

@ExceptionHandler註解實現異常處理