【Java基礎】--filter過濾器原理解析
一、什麼是Filter?
Filter是Servlet2.3新增加的功能,它不是Servlet,它不能處理使用者請求,也不能處理使用者響應。主要對HttpServletRequest進行預處理,也對HttpServletResponse進行後處理,是典型的處理鏈。
二、Filter出現前後原理圖對比
1.JSP請求(無filter)
2.JSP請求(有filter):
三、Servlet過濾器介面
所有的Servlet過濾器介面必須實現java.servlet.Filter介面,這個介面含有三個過濾器類必須實現的方法:
1.init(FilterConfig)
Servlet過濾器的初始化方法,Servlet容器建立Servlet過濾器例項後,將呼叫這個方法。這個方法可以讀取web.xml中的Servlet過濾器的配置初始化引數
2.doFilter(ServletRequest,ServletResponse,FilterChain)
這個方法完成實際的過濾操作,當客戶請求訪問於過濾器關聯的URL時,Servlet容器將先呼叫過濾器的doFilter方法。FilterChain引數用於訪問後續過濾器
3.destroy()
Servlet容器在銷燬過濾器例項前呼叫該方法,這個方法中可以釋放Servlet過濾器佔用的資源
四、Servlet過濾器建立步驟
1.實現java.servlet.Filter介面
2.實現init方法,讀取過濾器的初始化引數
3.實現doFilter方法,完成對請求或過濾的響應
4.呼叫FilterChain介面物件的doFilter方法,向後續的過濾器傳遞請求和響應
5.銷燬過濾器
filterdemo
過濾器類:CharsetEncodingFilter
<span style="font-family:Microsoft YaHei;font-size:14px;">package com.bjpowernode.drp.util.filter;
import java.io.IOException;
import javax.security.auth.message.callback.PrivateKeyCallback.Request;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* @ClassName:CharsetEncodingFilter
* @Description:採用filter統一處理字符集
* @author wm
* @date 2015年12月11日上午10:53:38
*/
public class CharsetEncodingFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
/**
* 過濾
*/
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.print("CharsetEncodingFilter-->>begin");
//設定字符集
request.setCharacterEncoding("GB18030");
//將請求轉發給過濾器鏈上下一個物件,下一個過濾器
chain.doFilter(request, response);
System.out.println("CharsetEncodingFilter-->>end");
}
/**
* 初始化
*/
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
</span>
web.xml配置檔案:
<span style="font-family:Microsoft YaHei;font-size:14px;"><web-app>
<filter>
<filter-name>CharsetEncodingFilter</filter-name>
<filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
</web-app></span>
訪問jsp頁面,進行使用者名稱的新增功能,執行的程式顯示結果:
五、傳統filter和基於Aop思想的interceptor對比
1.filter基於回撥函式doFilter(),而interceptor則基於java本身的反射機制,這是兩者最本質的區別。
2.filter依賴Servlet容器,而interceptor與該容器無關
3.filter過濾範圍比interceptor大,filter可以過濾請求,通過萬用字元可以保護頁面、圖片、檔案等等,而interceptor只能過濾請求
4.filter的過濾例外在init方法宣告,而Interceptor可以通過xml宣告是guest請求還是user請求來辨別是否過濾。
六、總結
Aop即為Aspect Oriented Programming的縮寫,面向切面的程式設計,通過預編譯方式和執行期動態代理實現程式功能的統一維護的一種技術。Aop可以使公共服務和業務邏輯的分離,從而使兩者間的解耦度降低,提高程式碼的複用性。無論是filter還是interceptor,都是對aop思想很好的體現。
相關文章
- Filter過濾器Filter過濾器
- PHP 過濾器(Filter)PHP過濾器Filter
- JavaWeb 中 Filter過濾器JavaWebFilter過濾器
- Filter過濾器的使用Filter過濾器
- vue入門 vue基礎之簡單使用4--過濾器(Filter)Vue過濾器Filter
- filter過濾Filter
- 布隆過濾器(Bloom Filter)過濾器OOMFilter
- 布隆過濾器 Bloom Filter過濾器OOMFilter
- Bloom Filter 布隆過濾器OOMFilter過濾器
- 攔截器(Interceptor)與過濾器(Filter)過濾器Filter
- Shiro原理解析(三)--再談過濾器過濾器
- java中listFiles(Filefilter filter)檔案過濾器的實現過程JavaFilter過濾器
- HBase Filter 過濾器之 ValueFilter 詳解Filter過濾器
- 如何在vue中使用過濾器filterVue過濾器Filter
- Vue定義全域性過濾器filterVue過濾器Filter
- 布隆過濾器(Bloom Filter)詳解過濾器OOMFilter
- SpringSecurity過濾器原理SpringGse過濾器
- PHP基礎之過濾器講解PHP過濾器
- java8 多條件的filter過濾JavaFilter
- Filter(過濾器)與Listener(監聽器)詳解Filter過濾器
- 基礎設計模式-03 從過濾器(Filter)校驗鏈學習職責鏈模式設計模式過濾器Filter
- 快取問題(二) 布隆過濾器(Bloom Filter) 介紹和原理快取過濾器OOMFilter
- Shiro原理解析(一)--過濾器的初始化過濾器
- 過濾器 Filter 與 攔截器 Interceptor 的區別過濾器Filter
- JavaWeb - 【Filter】敏感詞過濾JavaWebFilter
- Elasticsearch——filter過濾查詢ElasticsearchFilter
- Shiro原理解析(二)--過濾器的執行機制過濾器
- SpringBoot+Shiro學習(七):Filter過濾器管理Spring BootFilter過濾器
- vue 基礎入門筆記 07:過濾器Vue筆記過濾器
- 布穀鳥過濾器解析過濾器
- Laravel 模型過濾(Filter)設計Laravel模型Filter
- 微信小程式 使用filter過濾器幾種方式微信小程式Filter過濾器
- Solon 的過濾器 Filter 和兩種攔截器 Handler、 Interceptor過濾器Filter
- Vue中的基礎過渡動畫原理解析Vue動畫
- PCL學習記錄-1 Filter-1 PassThrough filter(直通濾波器)功能及用法解析Filter
- 使用Filter介面編寫過濾器解決post亂碼Filter過濾器
- 從零手寫實現 tomcat-11-filter 過濾器TomcatFilter過濾器
- Django(69)最好用的過濾器外掛Django-filterDjango過濾器Filter
- 雜湊表擴充套件—布隆過濾器(Bloom Filter)套件過濾器OOMFilter