filter(過濾器) & listener(監聽器)

Filter:過濾器

1. 概念:

web中的過濾器:當訪問服務器的資源時,過濾器可以將請求攔截下來,完成一些特殊的功能。

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

2. 快速入門:

代碼:
@WebFilter("/*")//訪問所有資源之前,都會執行該過濾器
public class FilterDemo1 implements Filter {//實現接口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() {
			
}
}

3. 過濾器細節:

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>

過濾器執行流程

1. 執行過濾器
2. 執行放行後的資源
3. 回來執行過濾器放行代碼下邊的代碼

過濾器生命週期方法

1. init:在服務器啓動後,會創建Filter對象,然後調用init方法。只執行一次。用於加載資源
2. doFilter:每一次請求被攔截資源時,會執行。執行多次
3. destroy:在服務器關閉後,Filter對象被銷燬。如果服務器是正常關閉,則會執行destroy方法。只執行一次。用於釋放資源

過濾器配置詳解 攔截路徑配置:

1. 具體資源路徑: /index.jsp   只有訪問index.jsp資源時,過濾器纔會被執行
2. 攔截目錄: /user/*	訪問/user下的所有資源時,過濾器都會被執行
3. 後綴名攔截: *.jsp		訪問所有後綴名爲jsp資源時,過濾器都會被執行
4. 攔截所有資源:/*		訪問所有資源時,過濾器都會被執行

攔截方式配置:資源被訪問的方式
註解配置:設置dispatcherTypes屬性

1. REQUEST:默認值。瀏覽器直接請求資源
2. FORWARD:轉發訪問資源
3. INCLUDE:包含訪問資源
4. ERROR:錯誤跳轉資源
5. ASYNC:異步訪問資源

web.xml配置
設置<dispatcher>REQUEST</dispatcher>標籤即可

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

執行順序:如果有兩個過濾器:過濾器1和過濾器2
1. 過濾器1
2. 過濾器2
3. 資源執行
4. 過濾器2
5. 過濾器1 

過濾器先後順序問題:

1. 註解配置:按照類名的字符串比較規則比較,值小的先執行
如: AFilter 和 BFilter,AFilter就先執行了。
2. web.xml配置: <filter-mapping>誰定義在上邊,誰先執行

Listener:監聽器

1.概念:web的三大組件之一。

事件監聽機制

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

ServletContextListener:監聽ServletContext對象的創建和銷燬

2.方法

void contextDestroyed(ServletContextEvent sce) :ServletContext對象被銷燬之前會調用該方法
void contextInitialized(ServletContextEvent sce) :ServletContext對象創建後會調
*
配置web.xml

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

指定初始化參數
2. 註解:

@WebListener
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/*
 * 創建監聽器的步驟:
 * 1.創建一個普通的java類,實現監聽器接口
 * 		我們監聽什麼,就實現相應的接口
 * 		比如我們現在要監聽上下文對象的創建與銷燬,那麼我們就要實現ServletContextListener這個接口
 * 2.重寫監聽方法
 * 		我們在這裏重寫的是監聽session對象創建與銷燬的方法.


 */
public class Listener implements HttpSessionListener {
	
	//監聽session對象的創建,如果session對象創建了,則馬上執行該方法,對我們進行通知
	@Override
	public void sessionCreated(HttpSessionEvent event) {
		System.out.println("session對象創建了");
	}
	
	//監聽session對象的銷燬,如果session對象銷燬了,則馬上執行該方法,對我們進行通知
	@Override
	public void sessionDestroyed(HttpSessionEvent event) {
		System.out.println("session對象銷燬了");
	}
	
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章