欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

Filter:過(guò)濾器

當(dāng)訪問(wèn)服務(wù)器的資源時(shí),過(guò)濾器可以將請(qǐng)求攔截下來(lái),完成一些特殊的功能。

過(guò)濾器細(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>

過(guò)濾器執(zhí)行流程

1. 執(zhí)行過(guò)濾器

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

3. 回來(lái)執(zhí)行過(guò)濾器放行代碼下邊的代碼

過(guò)濾器生命周期方法

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

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

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

過(guò)濾器配置詳解

* 攔截路徑配置:

1. 具體資源路徑: /index.jsp 只有訪問(wèn)index.jsp資源時(shí),過(guò)濾器才會(huì)被執(zhí)行

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

3. 后綴名攔截: .jsp 訪問(wèn)所有后綴名為jsp資源時(shí),過(guò)濾器都會(huì)被執(zhí)行

4. 攔截所有資源:/ 訪問(wèn)所有資源時(shí),過(guò)濾器都會(huì)被執(zhí)行

* 攔截方式配置:資源被訪問(wèn)的方式

* 注解配置:

* 設(shè)置dispatcherTypes屬性

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

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

3. INCLUDE:包含訪問(wèn)資源

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

5. ASYNC:異步訪問(wèn)資源

* web.xml配置

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

過(guò)濾器鏈(配置多個(gè)過(guò)濾器)

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

1. 過(guò)濾器1

2. 過(guò)濾器2

3. 資源執(zhí)行

4. 過(guò)濾器2

5. 過(guò)濾器1

* 過(guò)濾器先后順序問(wèn)題:

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

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

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

使用步驟

  1. 定義一個(gè)類,實(shí)現(xiàn)接口Filter
  2. 復(fù)寫(xiě)方法
  3. 配置攔截路徑
    • web.xml
    • 注解
	@WebFilter("/*")//訪問(wèn)所有資源之前,都會(huì)執(zhí)行該過(guò)濾器
		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)聽(tīng)器

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

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

Interceptor 攔截器

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

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

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

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

在這里插入圖片描述

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

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

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

相關(guān)文章

  • 深入了解Java中成員變量與局部變量的使用與區(qū)別

    深入了解Java中成員變量與局部變量的使用與區(qū)別

    成員變量和局部變量在每種編程語(yǔ)言中都有涉及,本文將通過(guò)示例為大家詳細(xì)講講Java中成員變量與局部變量的使用與區(qū)別,感興趣的可以了解一下
    2022-08-08
  • Java深度復(fù)制功能與用法實(shí)例分析

    Java深度復(fù)制功能與用法實(shí)例分析

    這篇文章主要介紹了Java深度復(fù)制功能與用法,簡(jiǎn)單講述了深度復(fù)制的概念、功能并結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)深度復(fù)制的具體操作技巧,需要的朋友可以參考下
    2018-01-01
  • 解決maven update project 后項(xiàng)目jdk變成1.5的問(wèn)題

    解決maven update project 后項(xiàng)目jdk變成1.5的問(wèn)題

    下面小編就為大家?guī)?lái)一篇解決maven update project 后項(xiàng)目jdk變成1.5的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起 小編過(guò)來(lái)看看吧
    2016-11-11
  • Java設(shè)計(jì)模式之命令模式(Command模式)介紹

    Java設(shè)計(jì)模式之命令模式(Command模式)介紹

    這篇文章主要介紹了Java設(shè)計(jì)模式之命令模式(Command模式)介紹,本文講解了Command模式的定義、如何使用命令模式等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • Java SoftReference類案例詳解

    Java SoftReference類案例詳解

    這篇文章主要介紹了Java SoftReference類案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Kotlin 開(kāi)發(fā)環(huán)境詳解及簡(jiǎn)單實(shí)例

    Kotlin 開(kāi)發(fā)環(huán)境詳解及簡(jiǎn)單實(shí)例

    這篇文章主要介紹了 Kotlin 開(kāi)發(fā)環(huán)境詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • java獲取本地文件和遠(yuǎn)程文件的方式代碼示例

    java獲取本地文件和遠(yuǎn)程文件的方式代碼示例

    這篇文章主要給大家介紹了關(guān)于java獲取本地文件和遠(yuǎn)程文件的方式,我們項(xiàng)目開(kāi)發(fā)的時(shí)候,經(jīng)常會(huì)讀取文件,如果文件在本服務(wù)器,則直接用new File()讀取即可,但是有時(shí)候需要遠(yuǎn)程讀取文件,需要的朋友可以參考下
    2023-08-08
  • IDEA配置Gradle及Gradle安裝的實(shí)現(xiàn)步驟

    IDEA配置Gradle及Gradle安裝的實(shí)現(xiàn)步驟

    本文主要介紹了IDEA配置Gradle及Gradle安裝的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • SpringBoot整合分布式鎖redisson的示例代碼

    SpringBoot整合分布式鎖redisson的示例代碼

    這篇文章主要介紹了SpringBoot整合分布式鎖redisson,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • RabbitMQ 的七種隊(duì)列模式和應(yīng)用場(chǎng)景

    RabbitMQ 的七種隊(duì)列模式和應(yīng)用場(chǎng)景

    最近學(xué)習(xí)RabbitMQ,本文就記錄一下RabbitMQ 的七種隊(duì)列模式和應(yīng)用場(chǎng)景,方便以后使用,也方便和大家共享,相互交流
    2021-05-05

最新評(píng)論