深入瞭解Java中的過濾器Filter和監聽器Listener

Filter:過濾器

概念

生活中的過濾器:凈水器,空氣凈化器,土匪、 web中的過濾器:當訪問服務器的資源時,過濾器可以將請求攔截下來,完成一些特殊的功能。 過濾器的作用:

一般用於完成通用的操作。如:登錄驗證、統一編碼處理、敏感字符過濾…

快速入門

步驟

1.定義一個類,實現接口Filter

2.復寫方法

3.配置攔截路徑

  • web.xml
  • 註解

代碼

@WebFilter("/*")//訪問所有資源之前,都會執行該過濾器
public class FilterDemo1 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("filterDemo1被執行瞭....");


		//放行
		filterChain.doFilter(servletRequest,servletResponse);

	}

	@Override
	public void destroy() {

	}
}

過濾器細節

web.xml配置

<filter>
	<filter-name>demo1</filter-name>
	<filter-class>cn.zjq.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:異步訪問資源

web.xml配置 設置標簽即可

過濾器鏈(配置多個過濾器)

執行順序:如果有兩個過濾器:過濾器1和過濾器2

  • 過濾器1
  • 過濾器2
  • 資源執行
  • 過濾器2
  • 過濾器1

過濾器先後順序問題:

  • 註解配置:按照類名的字符串比較規則比較,值小的先執行

如: AFilter 和 BFilter,AFilter就先執行瞭。 2. web.xml配置: 誰定義在上邊,誰先執行

Listener:監聽器

概念:web的三大組件之一。 事件監聽機制

  • 事件:一件事情
  • 事件源 :事件發生的地方
  • 監聽器 :一個對象
  • 註冊監聽:將事件、事件源、監聽器綁定在一起。 當事件源上發生某個事件後,執行監聽器代碼

ServletContextListener:監聽ServletContext對象的創建和銷毀 方法: void contextDestroyed(ServletContextEvent sce) :ServletContext對象被銷毀之前會調用該方法 void contextInitialized(ServletContextEvent sce) :ServletContext對象創建後會調用該方法 步驟:

  • 定義一個類,實現ServletContextListener接口
  • 復寫方法
  • 配置

web.xml

<listener>
  <listener-class>cn.zjq.web.listener.ContextLoaderListener</listener-class>
</listener>

指定初始化參數

註解:

@WebListener

到此這篇關於深入瞭解Java中的過濾器Filter和監聽器Listener的文章就介紹到這瞭,更多相關Java過濾器 監聽器內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: