首頁 > 軟體

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

2022-06-28 22:01:30

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過濾器 監聽器內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com