最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中過濾器、監(jiān)聽器和攔截器的區(qū)別詳解

 更新時間:2024年01月04日 11:28:19   作者:時間不會賴著不走  
這篇文章主要介紹了Java中過濾器、監(jiān)聽器和攔截器的區(qū)別詳解,有些朋友可能不了解過濾器、監(jiān)聽器和攔截器的區(qū)別,本文就來詳細(xì)講一下,相信看完你會有所收獲,需要的朋友可以參考下

Filter:過濾器

當(dāng)訪問服務(wù)器的資源時,過濾器可以將請求攔截下來,完成一些特殊的功能。

過濾器細(xì)節(jié)

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>

過濾器執(zhí)行流程

1. 執(zhí)行過濾器

2. 執(zhí)行放行后的資源

3. 回來執(zhí)行過濾器放行代碼下邊的代碼

過濾器生命周期方法

1. init:在服務(wù)器啟動后,會創(chuàng)建Filter對象,然后調(diào)用init方法。只執(zhí)行一次。用于加載資源

2. doFilter:每一次請求被攔截資源時,會執(zhí)行。執(zhí)行多次

3. destroy:在服務(wù)器關(guān)閉后,F(xiàn)ilter對象被銷毀。如果服務(wù)器是正常關(guān)閉,則會執(zhí)行destroy方法。只執(zhí)行一次。用于釋放資源

過濾器配置詳解

* 攔截路徑配置:

1. 具體資源路徑: /index.jsp 只有訪問index.jsp資源時,過濾器才會被執(zhí)行

2. 攔截目錄: /user/* 訪問/user下的所有資源時,過濾器都會被執(zhí)行

3. 后綴名攔截: .jsp 訪問所有后綴名為jsp資源時,過濾器都會被執(zhí)行

4. 攔截所有資源:/ 訪問所有資源時,過濾器都會被執(zhí)行

* 攔截方式配置:資源被訪問的方式

* 注解配置:

* 設(shè)置dispatcherTypes屬性

1. REQUEST:默認(rèn)值。瀏覽器直接請求資源

2. FORWARD:轉(zhuǎn)發(fā)訪問資源

3. INCLUDE:包含訪問資源

4. ERROR:錯誤跳轉(zhuǎn)資源

5. ASYNC:異步訪問資源

* web.xml配置

* 設(shè)置標(biāo)簽即可

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

* 執(zhí)行順序:如果有兩個過濾器:過濾器1和過濾器2

1. 過濾器1

2. 過濾器2

3. 資源執(zhí)行

4. 過濾器2

5. 過濾器1

* 過濾器先后順序問題:

1. 注解配置:按照類名的字符串比較規(guī)則比較,值小的先執(zhí)行

* 如: AFilter 和 BFilter,AFilter就先執(zhí)行了。

2. web.xml配置: 誰定義在上邊,誰先執(zhí)行

使用步驟

  1. 定義一個類,實現(xiàn)接口Filter
  2. 復(fù)寫方法
  3. 配置攔截路徑
    • web.xml
    • 注解
	@WebFilter("/*")//訪問所有資源之前,都會執(zhí)行該過濾器
		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被執(zhí)行了....");
		           //放行
		        filterChain.doFilter(servletRequest,servletResponse);
		    }
		    @Override
		    public void destroy() {
		
		    }
		}

Listener 監(jiān)聽器

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

  • 事件監(jiān)聽機(jī)制
  •  事件 :一件事情
  • 事件源 :事件發(fā)生的地方
  • 監(jiān)聽器 :一個對象
  • 注冊監(jiān)聽:將事件、事件源、監(jiān)聽器綁定在一起。 當(dāng)事件源上發(fā)生某個事件后,執(zhí)行監(jiān)聽器代碼

Interceptor 攔截器

它依賴于web框架,在SpringMVC中就是依賴于SpringMVC框架。在實現(xiàn)上,基于Java的反射機(jī)制,屬于面向切面編程(AOP)的一種運用,就是在service或者一個方法前,調(diào)用一個方法,或者在方法后,調(diào)用一個方法,比如動態(tài)代理就是攔截器的簡單實現(xiàn),在調(diào)用方法前打印出字符串(或者做其它業(yè)務(wù)邏輯的操作),也可以在調(diào)用方法后打印出字符串,甚至在拋出異常的時候做業(yè)務(wù)邏輯的操作。由于攔截器是基于web框架的調(diào)用,因此可以使用Spring的依賴注入(DI)進(jìn)行一些業(yè)務(wù)操作,同時一個攔截器實例在一個controller生命周期之內(nèi)可以多次調(diào)用。攔截器可以對靜態(tài)資源的請求進(jìn)行攔截處理。

Interceptor 攔截器和 Filter:過濾器區(qū)別

1.攔截器(Interceptor)是基于Java的反射機(jī)制,而過濾器(Filter)是基于函數(shù)回調(diào)。從靈活性上說攔截器功能更強(qiáng)大些,F(xiàn)ilter能做的事情,都能做,而且可以在請求前,請求后執(zhí)行,比較靈活。Filter主要是針對URL地址做一個編碼的事情、過濾掉沒用的參數(shù)、安全校驗(比較泛的,比如登錄不登錄之類),太細(xì)的話,還是建議用interceptor。不過還是根據(jù)不同情況選擇合適的。

2.觸發(fā)時機(jī)不同

在這里插入圖片描述

過濾器Filter是在請求進(jìn)入容器后,但在進(jìn)入servlet之前進(jìn)行預(yù)處理,請求結(jié)束是在servlet處理完以后。

攔截器 Interceptor 是在請求進(jìn)入servlet后,在進(jìn)入Controller之前進(jìn)行預(yù)處理的,Controller 中渲染了對應(yīng)的視圖之后請求結(jié)束。

到此這篇關(guān)于Java中過濾器、監(jiān)聽器和攔截器的區(qū)別詳解的文章就介紹到這了,更多相關(guān)過濾器、監(jiān)聽器和攔截器的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于SpringBoot打包測試、生產(chǎn)環(huán)境方式

    關(guān)于SpringBoot打包測試、生產(chǎn)環(huán)境方式

    這篇文章主要介紹了關(guān)于SpringBoot打包測試、生產(chǎn)環(huán)境方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java中FutureTask 和 CompletableFuture的區(qū)別

    Java中FutureTask 和 CompletableFuture的區(qū)別

    本文主要介紹了Java中FutureTask 和 CompletableFuture的區(qū)別嗎,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-02-02
  • Java?工具類實現(xiàn)音頻音量提升

    Java?工具類實現(xiàn)音頻音量提升

    本文主要介紹了可以將音頻提升音量的一個java工具類示例代碼,代碼具有一定的學(xué)習(xí)價值,感興趣的小伙伴來了解一下吧,,希望能夠給你帶來幫助
    2021-11-11
  • Java源碼解析之ClassLoader

    Java源碼解析之ClassLoader

    在看系統(tǒng)啟動的流程中看到了ClassLoader使用,重新溫故下ClassLoader流程和原理,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Spring注解之@validated使用詳解

    Spring注解之@validated使用詳解

    spring-boot中可以用@validated來校驗數(shù)據(jù),如果數(shù)據(jù)異常則會統(tǒng)一拋出異常,方便異常中心統(tǒng)一處理,這篇文章主要介紹了Spring注解之@validated使用,需要的朋友可以參考下
    2023-01-01
  • Java中的動態(tài)綁定機(jī)制

    Java中的動態(tài)綁定機(jī)制

    這篇文章主要介紹了Java中的動態(tài)綁定機(jī)制,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 用Java實現(xiàn)連連看小游戲

    用Java實現(xiàn)連連看小游戲

    這篇文章主要為大家詳細(xì)介紹了用Java實現(xiàn)連連看小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java面試重點中的重點之Elasticsearch核心原理

    Java面試重點中的重點之Elasticsearch核心原理

    ElasticSearch是一個基于Lucene的搜索引擎,是用Java語言開發(fā)的,能夠達(dá)到實時搜索,穩(wěn)定,可靠,快速,安裝使用方便,作為Apache許可條款下的開放源碼發(fā)布,是一種流行的企業(yè)級搜索引擎,是最受歡迎的企業(yè)搜索引擎
    2022-01-01
  • 使用idea開發(fā)javaWeb應(yīng)用程序的思路(實現(xiàn)用戶的增刪改查)

    使用idea開發(fā)javaWeb應(yīng)用程序的思路(實現(xiàn)用戶的增刪改查)

    這篇文章主要介紹了使用idea開發(fā)javaWeb應(yīng)用程序的思路(實現(xiàn)用戶的增刪改查),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Java8中Lambda表達(dá)式使用和Stream API詳解

    Java8中Lambda表達(dá)式使用和Stream API詳解

    這篇文章主要給大家介紹了關(guān)于Java8中Lambda表達(dá)式使用和Stream API的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java8具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評論

修水县| 遵义市| 宜宾市| 祁东县| 武山县| 安丘市| 龙井市| 进贤县| 富裕县| 蒙自县| 贵港市| 新津县| 凤凰县| 榆中县| 潼南县| 凤凰县| 望谟县| 高唐县| 格尔木市| 桓仁| 田东县| 台北市| 泗洪县| 泗水县| 东乡族自治县| 宁强县| 武邑县| 邹平县| 崇明县| 武陟县| 乐亭县| 饶阳县| 二连浩特市| 桃源县| 成武县| 香河县| 连州市| 偃师市| 渭南市| 会宁县| 车致|