【JavaWeb】Filter&&Listener

Filter:過濾器

1. 概念
	* 生活中的過濾器:淨水器,空氣淨化器,土匪
	* web中過濾器:當訪問服務器的資源時,過濾器可以將請求攔截下來,完成一些特殊的功能。
	* 過濾器的作用:
	* 一般用於完成通用的操作。如:登錄驗證、統一編碼處理、敏感字符過濾...
	
2. 快速入門:
	1. 步驟:
		1. 定義一個類,實現接口Filter
		2. 複寫方法
		3. 配置攔截路徑
			1. web.xml
			2. 註解
 	import javax.servlet.*;
	import javax.servlet.annotation.WebFilter;
	import java.io.IOException;

	@WebFilter("/*")
	public class Demo01Filter 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() {

    }
}
3. 過濾器細節:
	1. web.xml配置
		<filter>
    	<filter-name>demo01</filter-name>
    	<filter-class>cn.sytest.filter.Demo01Filter</filter-class>
		</filter>
		<filter-mapping>
    	<filter-name>demo01</filter-name>
		<!-- 攔截路徑 -->
   		<url-pattern>/*</url-pattern>
		</filter-mapping>
	2. 過濾器的執行流程
		1. 執行過濾器
		2. 執行放行後的資源
		3. 回來執行過濾器放行代碼下面的代碼
	3. 過濾器生命週期方法
		1. init:在服務器啓動後,會創建Filter對象,然後調用init方法。只執行一次。用於加載資源。
		2. doFilter:每一次請求被攔截資源時,會執行,執行多次。
		3. destroy:在服務器關閉後,Filter對象被銷燬。如果服務器是正常關閉,則會執行destroy方法,只執行一次,用於釋放資源。
	4. 過濾器配置詳解
		* 攔截路徑配置:
			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></dispatcher>標籤即可
	5. 過濾器鏈(配置多個過濾器)
		* 執行順序:如果有兩個過濾器:過濾器1和過濾器2
			1. 過濾器1
			2. 過濾器2
			3. 資源執行
			4. 過濾器2
			5. 過濾器1

		* 過濾器先後順序問題:
			1. 註解配置:按照類名的字符串比較規則,值小的先執行
				* 如:AFilter 和 BFilter,AFilter就先執行。
			2. web.xml配置:<filter-mapping>誰定義在上面,誰先執行

Listener:監聽器

* 概念:web的三大組件之一
	* 事件監聽機制
		* 事件	:一件事情
		* 事件源	:事件發生的地方
		* 監聽器	:一個對象
		* 註冊監聽	:將事件、事件源、監聽器綁定在一起。當事件源上發生某個事件後,執行監聽器代碼
	
* ServletContextListener:監聽ServletContext對象的創建和銷燬
	* void contextDestroyed(ServletContextEvent sce):ServletContext對象被銷燬之前會調用該方法
	* void contextInitialized(ServletContextEvent sce):ServletContext對象創建後會調用該方法
	* 步驟:
		1. 定義一個類,實現ServletContextListener接口
		2. 複習方法
		3. 配置
			1. web.xml
				<listener>
				<listener-class>cn.sytest.web.listener.ContextLoadListener</listener-class>
				</listener>
				
				* 指定初始化參數<context-param>
			2. 註解
				* @WebListener
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章