剛學習Struts2這個框架不久,心中依然有一個疑惑未解那就是過濾器和攔截器的區別,相信也有不少人跟我一樣對於這個問題沒有太多的深入了解
那么下面我們就一起來探討探討
過濾器,是在java web中,你傳入的request,response提前過濾掉一些信息,或者提前設置一些參數,然后再傳入servlet或者struts的 action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果用戶沒有登陸都過濾掉),或者在傳入servlet或者 struts的action前統一設置字符集,或者去除掉一些非法字符.
攔截器,是在面向切面編程的就是在你的service或者一個方法,前調用一個方法,或者在方法后調用一個方法比如動態代理就是攔截器的簡單實現,在你調用方法前打印出字符串(或者做其它業務邏輯的操作),也可以在你調用方法后打印出字符串,甚至在你拋出異常的時候做業務邏輯的操作。
攔截器與過濾器的區別:
- 攔截器是基於java的反射機制的,而過濾器是基於函數回調。
- 攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
- 攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
- 攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
- 在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次
執行順序:過濾前 - 攔截前 - Action處理 - 攔截后 -
過濾器的主要特點在於:取你需要的東西,忽視那些不需要的東西!
攔截器的主要特點在於:針對你不要的東西進行攔截
過濾器和攔截器兩者最大的區別就是:過濾是一個正面的東西,而攔截是一個反面的東西!過濾是留下你想要的東西,而過濾是去除你不想要的東西!