Java--Filter(過濾器)
博客說明
文章所涉及的資料來自互聯網整理和個人總結,意在於個人學習和經驗匯總,如有什么地方侵權,請聯系本人刪除,謝謝!
簡介
Filter也稱之為過濾器,它是Servlet技術中最實用的技術,Web開發人員通過Filter技術,對web服務器管理的所有web資源,例如Jsp, Servlet, 靜態圖片文件或靜態 html 文件等進行攔截,從而實現一些特殊的功能。
實現URL級別的權限訪問控制、過濾敏感詞匯、壓縮響應信息等一些高級功能。
配置
注解方式
@WebFilter("/*")//訪問所有資源之前,都會執行該過濾器
public class Filter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("filter被執行了....");
//放行
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
web.xml
<filter>
<filter-name>demo1</filter-name>
<filter-class>cn.itcast.web.filter.FilterDemo1</filter-class>
</filter>
<filter-mapping>
<filter-name>demo1</filter-name>
<!-- 攔截路徑 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
過濾器生命周期方法
init
在服務器啟動后,會創建Filter對象,然后調用init方法。只執行一次。用於加載資源
doFilter
每一次請求被攔截資源時,會執行。執行多次
destroy
在服務器關閉后,Filter對象被銷毀。如果服務器是正常關閉,則會執行destroy方法。只執行一次。用於釋放資源
過濾器配置詳解
攔截路徑配置
-
具體資源路徑: /index.jsp 只有訪問index.jsp資源時,過濾器才會被執行
-
攔截目錄: /user/* 訪問/user下的所有資源時,過濾器都會被執行
-
后綴名攔截: *.jsp 訪問所有后綴名為jsp資源時,過濾器都會被執行
-
攔截所有資源:/* 訪問所有資源時,過濾器都會被執行
攔截方式配置:資源被訪問的方式
-
注解配置:
- 設置dispatcherTypes屬性
- REQUEST:默認值。瀏覽器直接請求資源
- FORWARD:轉發訪問資源
- INCLUDE:包含訪問資源
- ERROR:錯誤跳轉資源
- ASYNC:異步訪問資源
- 設置dispatcherTypes屬性
-
web.xml配置
-
設置標簽
<dispatcher></dispatcher>
-
配置多個過濾器
-
執行順序:如果有兩個過濾器:過濾器1和過濾器2,具體過程?
過濾器1 過濾器2 資源執行 過濾器2 過濾器1
過濾器先后順序問題
有兩個過濾器先執行哪一個?
- 注解配置:按照類名的字符串比較規則比較,值小的先執行
- 如: AFilter 和 BFilter,AFilter就先執行了。
- web.xml配置:
誰定義在上邊,誰先執行
感謝
黑馬程序員
萬能的網絡
以及勤勞的自己
關注公眾號: 歸子莫,獲取更多的資料,還有更長的學習計划
