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

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

 更新時(shí)間:2025年06月03日 09:46:00   作者:Java皇帝  
Java 攔截器、過濾器和監(jiān)聽器是在 Java Web 開發(fā)中常用的組件,它們各有特點(diǎn)和用途,下面將分別介紹它們的區(qū)別和作用,并提供具體的代碼示例,需要的朋友可以參考下

一、定義與區(qū)別

  • 攔截器:基于 Java 的反射機(jī)制,屬于 AOP(面向切面編程)思想的應(yīng)用。在 Spring 等框架中廣泛應(yīng)用,主要用于攔截用戶請(qǐng)求,在目標(biāo)方法執(zhí)行前后進(jìn)行自定義邏輯處理。

  • 過濾器:由 Servlet 容器調(diào)用,可用于攔截請(qǐng)求和響應(yīng)。在請(qǐng)求處理之前或之后執(zhí)行代碼,如編碼轉(zhuǎn)換、權(quán)限驗(yàn)證等。

  • 監(jiān)聽器:用于監(jiān)聽某些事件的發(fā)生,如 ServletContext、HttpSession 和 ServletRequest 等。在特定事件觸發(fā)時(shí)執(zhí)行邏輯,如統(tǒng)計(jì)在線人數(shù)。

它們的主要區(qū)別如下:

組件基于技術(shù)攔截范圍生命周期管理
攔截器反射機(jī)制(AOP)框架中的方法調(diào)用(如 Spring)由框架管理
過濾器Servlet 容器客戶端請(qǐng)求和服務(wù)器響應(yīng)由 Servlet 容器管理
監(jiān)聽器事件監(jiān)聽機(jī)制應(yīng)用程序事件(如會(huì)話創(chuàng)建)由 Servlet 容器管理

二、具體用途與作用

1. 攔截器

  • 用途:用于執(zhí)行跨橫切邏輯,如日志記錄、權(quán)限檢查、性能監(jiān)控等。
  • 作用:在請(qǐng)求處理的各個(gè)階段(如請(qǐng)求前、請(qǐng)求后、異常處理后)執(zhí)行自定義邏輯。

代碼示例

import org.springframework.web.servlet.HandlerInterceptor;

public class MyInterceptor implements HandlerInterceptor {
    // 在請(qǐng)求處理之前執(zhí)行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        System.out.println("請(qǐng)求處理前執(zhí)行");
        return true; // 返回 false 可以阻止請(qǐng)求繼續(xù)處理
    }

    // 在請(qǐng)求處理之后執(zhí)行
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        System.out.println("請(qǐng)求處理后執(zhí)行");
    }

    // 在整個(gè)請(qǐng)求完成之后執(zhí)行
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        System.out.println("請(qǐng)求處理完成執(zhí)行");
    }
}

在 Spring 配置文件中注冊(cè)攔截器:

<mvc:interceptors>
    <bean class="com.example.MyInterceptor"/>
</mvc:interceptors>

2. 過濾器

  • 用途:用于對(duì)請(qǐng)求和響應(yīng)進(jìn)行預(yù)處理和后處理,如編碼轉(zhuǎn)換、權(quán)限驗(yàn)證、日志記錄等。
  • 作用:在請(qǐng)求到達(dá) Servlet 之前或響應(yīng)返回客戶端之前進(jìn)行處理。

代碼示例

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyFilter implements Filter {
    // 過濾器初始化
    @Override
    public void init(FilterConfig filterConfig) {
        System.out.println("過濾器初始化");
    }

    // 攔截請(qǐng)求和響應(yīng)
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
        System.out.println("請(qǐng)求前處理");
        chain.doFilter(request, response); // 放行請(qǐng)求
        System.out.println("響應(yīng)后處理");
    }

    // 過濾器銷毀
    @Override
    public void destroy() {
        System.out.println("過濾器銷毀");
    }
}

在 web.xml 中配置過濾器:

<filter>
    <filter-name>myFilter</filter-name>
    <filter-class>com.example.MyFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>myFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

3. 監(jiān)聽器

  • 用途:用于監(jiān)聽?wèi)?yīng)用程序事件,如會(huì)話創(chuàng)建、銷毀、屬性變更等。
  • 作用:在特定事件發(fā)生時(shí)執(zhí)行邏輯,如統(tǒng)計(jì)在線人數(shù)、初始化資源等。

代碼示例

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

public class MyListener implements HttpSessionListener {
    private static int onlineCount = 0;

    // 會(huì)話創(chuàng)建時(shí)觸發(fā)
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        onlineCount++;
        System.out.println("會(huì)話創(chuàng)建,當(dāng)前在線人數(shù):" + onlineCount);
    }

    // 會(huì)話銷毀時(shí)觸發(fā)
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        onlineCount--;
        System.out.println("會(huì)話銷毀,當(dāng)前在線人數(shù):" + onlineCount);
    }
}

在 web.xml 中配置監(jiān)聽器:

<listener>
    <listener-class>com.example.MyListener</listener-class>
</listener>

三、總結(jié)

  • 攔截器:適合處理與業(yè)務(wù)邏輯相關(guān)的橫切關(guān)注點(diǎn),如權(quán)限驗(yàn)證、日志記錄等。
  • 過濾器:更貼近網(wǎng)絡(luò)層,適合對(duì)請(qǐng)求和響應(yīng)進(jìn)行預(yù)處理和后處理,如編碼轉(zhuǎn)換、安全過濾等。
  • 監(jiān)聽器:用于監(jiān)聽特定事件的發(fā)生,適合需要在特定事件發(fā)生時(shí)執(zhí)行邏輯的場(chǎng)景,如統(tǒng)計(jì)在線人數(shù)、資源初始化等。

根據(jù)實(shí)際需求選擇合適的組件,可以更好地組織代碼和提高開發(fā)效率。

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

相關(guān)文章

  • Spring Boot中使用SSE(Server-Sent Events)實(shí)現(xiàn)聊天功能:替代websocket服務(wù)器推送

    Spring Boot中使用SSE(Server-Sent Events)實(shí)現(xiàn)聊天功能:替代webs

    本文講解了如何在Spring Boot項(xiàng)目中使用SSE實(shí)現(xiàn)聊天功能,SSE適用于客戶端只需要接收更新的應(yīng)用場(chǎng)景,而WebSocket則適合全雙工通信,客戶端通過服務(wù)端的/subscribe接口維持長連接,服務(wù)端通過SseEmitter對(duì)象發(fā)送消息
    2026-03-03
  • java版簡單的猜數(shù)字游戲?qū)嵗a

    java版簡單的猜數(shù)字游戲?qū)嵗a

    猜數(shù)字游戲是一款經(jīng)典的游戲,該游戲說簡單也很簡單,說不簡單確實(shí)也很難,那么下面這篇文章主要給大家介紹了java版簡單的猜數(shù)字游戲的相關(guān)資料,文中給出了詳細(xì)的實(shí)現(xiàn)分析和示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來一起看看吧。
    2017-05-05
  • 5分鐘快速搭建SpringBoot3?+?MyBatis-Plus工程/項(xiàng)目的實(shí)現(xiàn)示例

    5分鐘快速搭建SpringBoot3?+?MyBatis-Plus工程/項(xiàng)目的實(shí)現(xiàn)示例

    本文主要介紹了使用IntelliJ?IDEA創(chuàng)建Spring?Boot工程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • java實(shí)現(xiàn)騰訊ocr圖片識(shí)別接口調(diào)用

    java實(shí)現(xiàn)騰訊ocr圖片識(shí)別接口調(diào)用

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)騰訊ocr圖片識(shí)別接口調(diào)用,拍車牌識(shí)別車牌號(hào)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Mybatis-Plus根據(jù)自定義注解實(shí)現(xiàn)自動(dòng)加解密的示例代碼

    Mybatis-Plus根據(jù)自定義注解實(shí)現(xiàn)自動(dòng)加解密的示例代碼

    我們把數(shù)據(jù)存到數(shù)據(jù)庫的時(shí)候,有些敏感字段是需要加密的,從數(shù)據(jù)庫查出來再進(jìn)行解密,如果我們使用的是Mybatis框架,那就跟著一起探索下如何使用框架的攔截器功能實(shí)現(xiàn)自動(dòng)加解密吧,需要的朋友可以參考下
    2024-06-06
  • IDEA生成項(xiàng)目maven-tree依賴目錄樹結(jié)構(gòu)方式

    IDEA生成項(xiàng)目maven-tree依賴目錄樹結(jié)構(gòu)方式

    這篇文章主要介紹了IDEA生成項(xiàng)目maven-tree依賴目錄樹結(jié)構(gòu)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java中泛型學(xué)習(xí)之細(xì)節(jié)篇

    Java中泛型學(xué)習(xí)之細(xì)節(jié)篇

    泛型在java中有很重要的地位,在面向?qū)ο缶幊碳案鞣N設(shè)計(jì)模式中有非常廣泛的應(yīng)用,下面這篇文章主要給大家介紹了關(guān)于Java中泛型細(xì)節(jié)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • Spring中的EventListenerMethodProcessor組件詳解

    Spring中的EventListenerMethodProcessor組件詳解

    這篇文章主要介紹了Spring中的EventListenerMethodProcessor組件詳解,EventListenerMethodProcessor 是 Spring 事件機(jī)制中非常重要的一個(gè)組件,它管理了一組EventListenerFactory組件,用來將應(yīng)用中每個(gè)使用@EventListener注解定義的事件監(jiān)聽,需要的朋友可以參考下
    2023-12-12
  • Java中常量池、堆和棧的區(qū)別對(duì)比與聯(lián)系

    Java中常量池、堆和棧的區(qū)別對(duì)比與聯(lián)系

    Java中堆存儲(chǔ)對(duì)象實(shí)例和字符串(JDK7+),棧保存方法調(diào)用信息與局部變量,常量池緩存編譯期常量,三者通過引用關(guān)聯(lián),堆與棧區(qū)分對(duì)象創(chuàng)建與存儲(chǔ),常量池優(yōu)化內(nèi)存復(fù)用,本文給大家介紹Java中常量池、堆和棧的區(qū)別對(duì)比與聯(lián)系,感興趣的朋友一起看看吧
    2025-09-09
  • 使用反射方式獲取JPA Entity的屬性和值

    使用反射方式獲取JPA Entity的屬性和值

    這篇文章主要介紹了使用反射方式獲取JPA Entity的屬性和值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評(píng)論

镶黄旗| 阳山县| 宜城市| 六枝特区| 巴彦淖尔市| 于都县| 五莲县| 昭觉县| 兴文县| 万年县| 大渡口区| 郓城县| 蕉岭县| 泰宁县| 大兴区| 巴塘县| 义乌市| 竹山县| 樟树市| 吉隆县| 泸水县| 盐亭县| 克东县| 错那县| 汝南县| 卓资县| 博罗县| 论坛| 通山县| 临夏市| 阿拉善左旗| 高陵县| 建湖县| 丘北县| 英吉沙县| 万宁市| 文昌市| 云南省| 松江区| 磐石市| 娄烦县|