JavaWeb-Listener監聽器

目錄

監聽器Listener

1.功能

2.監聽器分類

3.監聽器的配置

4.ServletContext監聽

5.HttpSession監聽

6.ServletRequest監聽


監聽器Listener

1.功能

  1. 用于監聽域對象ServletContext、HttpSession和ServletRequest的創建,與銷毀事件
  2. 監聽一個對象的事件,如果發生了某事件則可以執行相應的代碼

默認的優先級別:Listener>Filter>Servlet


2.監聽器分類

由于事件的復雜性,監聽器也有許多對應的監聽器。總體上按照作用域可以分為以下三類

  1. Servlet上下文相關監聽接口,包括ServletContextListener、ServletAttributeListener
  2. HTTP會話監聽接口,包括HttpSessionListener、HttpActivationListener等
  3. Servlet請求監聽接口,包括ServletRequestListener、ServletRequestAttributeListener

3.監聽器的配置

1.通過xml配置

    <listener>
<!--        在listener-class中輸入具體的類的位置--><listener-class>com.company.Listener.ListenerDemo1</listener-class></listener>

2.通過注解類配置

@WebListener

只需要填寫@WebListener即可?


4.ServletContext監聽

通過實現ServletContext接口實現監聽器功能

1.生命周期監聽

ServletContext的生命周期監聽,監聽ServletContext對象的創建與銷毀方法如下

方法名描述
contextInitialized()當ServletContext對象被創建時,容器會自動調用該方法。在這個方法中,你可以執行一些初始化操作,比如加載配置文件、建立數據庫連接等。
contextDestroyed()當ServletContext對象被銷毀時,容器會自動調用該方法。在這個方法中,你可以執行一些清理操作,比如釋放資源、關閉數據庫連接等。
package com.company.Listener;import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
//使用注解類配置
@WebListener
public class ListenerDemo1 implements ServletContextListener {//    在創建出ServletContext對象時候自動調用函數@Overridepublic void contextInitialized(ServletContextEvent servletContextEvent) {System.out.println("監聽到有ServletContext對象創建");}
//    檢測到ServletContext對象被銷毀@Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent) {System.out.println("監聽到有ServletContext對象被銷毀");}
}

?具體案例代碼:

創建ServletContext對象代碼:

package com.company;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/ServletContextDemo1")
public class ServletContextDemo1 extends HttpServlet{@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        創建ServletContext對象ServletContext context = req.getServletContext();System.out.println("ServletContextDemo1被調用");}
//        實現方法統一@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}
}

2.屬性監聽

通過實現ServletContextAttributeListener接口實現監聽屬性的添加、替換、修改的功能,方法如下

方法名描述
attributeAdded()當向ServletContextHttpSessionServletRequest添加屬性時,容器會自動調用該方法。在這個方法中,你可以對添加的屬性進行處理。
attributeReplaced()ServletContextHttpSessionServletRequest中的屬性被替換時,容器會自動調用該方法。在這個方法中,你可以對替換后的屬性進行處理。
attributeRemoved()ServletContextHttpSessionServletRequest中的屬性被移除時,容器會自動調用該方法。在這個方法中,你可以對移除的屬性進行處理

?案例代碼:

監聽器類代碼

package com.company.Listener;import javax.servlet.ServletContext;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.annotation.WebListener;@WebListener
public class ListenerDemo2 implements ServletContextAttributeListener {
//    當新創建一個ServletContext對象時候調用@Overridepublic void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
//        獲取域對象ServletContext context = servletContextAttributeEvent.getServletContext();
//        獲取新增的域 名和值String name = servletContextAttributeEvent.getName();Object value = servletContextAttributeEvent.getValue();
//        輸出修改對象System.out.println("域對象"+context+"范圍內增加了"+name+"值為"+value);}
//    當ServletContext對象被移除的時候執行@Overridepublic void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {ServletContext context = servletContextAttributeEvent.getServletContext();String name = servletContextAttributeEvent.getName();Object value = servletContextAttributeEvent.getValue();System.out.println("域對象"+context+"范圍內刪除了"+name+"值為"+value);}@Overridepublic void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {ServletContext context = servletContextAttributeEvent.getServletContext();String name  = servletContextAttributeEvent.getName();Object value = servletContextAttributeEvent.getValue();System.out.println("域對象"+context+"范圍內替換了"+name+"值為"+value);}
}

?Servlet屬性類代碼

package com.company;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/ServletContextDemo3")
public class ServletContextDemo3 extends HttpServlet{@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ServletContext context = req.getServletContext();
//        創建context域對象值context.setAttribute("msg","Hello");
//        替換對象內容context.setAttribute("msg","你好");
//        銷毀對象context.removeAttribute("msg");}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}
}


5.HttpSession監聽

通過實現接口HttpSessionListener實現HttpSession。HttpSession對象監聽有三種方式,1.生命周期監聽、2.屬性監聽、3.session監聽

?1.生命周期監聽

方法名描述
sessionCreated()當一個新的HttpSession對象被創建時,容器會自動調用該方法。在這個方法中,你可以對新創建的HttpSession對象進行處理。
sessionDestroyed()當一個HttpSession對象被銷毀時,容器會自動調用該方法。在這個方法中,你可以對銷毀的HttpSession對象進行處理。

監聽類代碼

package com.company.Listener;import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class ListenerDemo3 implements HttpSessionListener {
//    當session被創建時候調用@Overridepublic void sessionCreated(HttpSessionEvent httpSessionEvent) {System.out.println("監聽到有session的創建");}
//    當session被銷毀時候調用@Overridepublic void sessionDestroyed(HttpSessionEvent httpSessionEvent) {System.out.println("session已被銷毀");}
}

Servlet實現代碼

package com.company;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;@WebServlet("/SessionListenerDemo1")
public class SessionListenerDemo1 extends HttpServlet{@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        創建sessionHttpSession session = req.getSession();session.setAttribute("name","AlphaMilk");
//        銷毀sessionsession.invalidate();}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}
}

2.屬性監聽

方法名描述
attributeAdded()當一個屬性被添加到HttpSession對象中時,容器會自動調用該方法。在這個方法中,你可以對新添加的屬性進行處理。
attributeReplaced()當一個屬性在HttpSession對象中被替換時,容器會自動調用該方法。在這個方法中,你可以對替換的屬性進行處理。
attributeRemoved()當一個屬性從HttpSession對象中被移除時,容器會自動調用該方法。在這個方法中,你可以對被移除的屬性進行處理

案例代碼:

?監聽類

package com.company.Listener;import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;@WebListener
public class ListenerDemo4 implements HttpSessionAttributeListener {
//    當session屬性增加時候調用@Overridepublic void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {System.out.println("Session添加了一個新的屬性");}
//    當session屬性銷毀時候調用@Overridepublic void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {System.out.println("Session銷毀了一個屬性");}
//    當session屬性替換時候調用@Overridepublic void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {System.out.println("Session替換了一個屬性");}
}

?Servlet實現類

package com.company;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;@WebServlet("/SessionDemo5")
public class SessionDemo5 extends HttpServlet{@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {HttpSession session = req.getSession();
//        增加屬性session.setAttribute("userName","AlphaMilk");
//        屬性覆蓋session.setAttribute("userName","alpha");
//        屬性刪除session.removeAttribute("userName");}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}
}


6.ServletRequest監聽

與上述幾個接口類似,分別由生命周期監聽與屬性監聽

1.生命周期監聽

方法名描述
requestInitialized()當一個ServletRequest對象被創建并初始化時,容器會自動調用該方法。在這個方法中,你可以對新創建的ServletRequest對象進行處理。
requestDestroyed()當一個ServletRequest對象被銷毀時,容器會自動調用該方法。在這個方法中,你可以對銷毀的ServletRequest對象進行處理。

2.屬性監聽

方法名描述
attributeAdded()當一個屬性被添加到ServletRequest對象中時,容器會自動調用該方法。在這個方法中,你可以對新添加的屬性進行處理。
attributeReplaced()當一個屬性在ServletRequest對象中被替換時,容器會自動調用該方法。在這個方法中,你可以對替換的屬性進行處理。
attributeRemoved()當一個屬性從ServletRequest對象中被移除時,容器會自動調用該方法。在這個方法中,你可以對被移除的屬性進行處理

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39759.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39759.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39759.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python源碼05:使用Pyecharts畫詞云圖圖

**Pyecharts是一個用于生成 Echarts 圖表的 Python 庫。Echarts 是一個基于 JavaScript 的數據可視化庫&#xff0c;提供了豐富的圖表類型和交互功能。**通過 Pyecharts&#xff0c;你可以使用 Python 代碼生成各種類型的 Echarts 圖表&#xff0c;例如折線圖、柱狀圖、餅圖、散…

Glide 的超時控制相關處理

作者&#xff1a;newki 前言 Glide 相信大家都不陌生&#xff0c;各種源碼分析&#xff0c;使用介紹大家應該都是爛熟于心。但是設置 Glide 的超時問題大家遇到過沒有。 我遇到了&#xff0c;并且掉坑里了&#xff0c;情況是這樣的。 調用接口從網絡拉取用戶頭像&#xff0c…

3.微服務概述

1.大型網絡架構變遷 SOA與微服務最大的差別就是服務拆分的細度&#xff0c;目前大多數微服務實際上是SOA架構&#xff0c;真正的微服務應該是一個接口對應一個服務器&#xff0c;開發速度快、成本高&#xff1b; 微服務SOA能拆分的就拆分是整體的&#xff0c;服務能放一起的都…

自動駕駛HMI產品技術方案

版本變更 序號 日期 變更內容 編制人 審核人 文檔版本 1 2 1.

【計算機網絡】13、ARP 包:廣播自己的 mac 地址和 ip

機器啟動時&#xff0c;會向外廣播自己的 mac 地址和 ip 地址&#xff0c;這個即稱為 arp 協議。范圍是未經過路由器的部分&#xff0c;如下圖的藍色部分&#xff0c;范圍內的設備都會在本地記錄 mac 和 ip 的綁定信息&#xff0c;若有重復則覆蓋更新&#xff08;例如先收到 ma…

【Spring】深入理解 Spring 事務及其傳播機制

文章目錄 一、Spring 事務是什么二、Spring 中事務的實現方法2.1 Spring 編程式事務&#xff08;手動&#xff09;2.1.1 編程式事務的使用演示2.1.2 編程式事務存在的問題 2.2 Spring 聲明式事務&#xff08;自動&#xff09;2.2.1 Transactional 作用范圍2.2.2 Transactional …

騰訊云GPU服務器GN7實例NVIDIA T4 GPU卡

騰訊云GPU服務器GN7實例搭載1顆 NVIDIA T4 GPU&#xff0c;8核32G配置&#xff0c;系統盤為100G 高性能云硬盤&#xff0c;自帶5M公網帶寬&#xff0c;系統鏡像可選Linux和Windows&#xff0c;地域可選廣州/上海/北京/新加坡/南京/重慶/成都/首爾/中國香港/德國/東京/曼谷/硅谷…

安卓純代碼布局開發游戲二:Android Studio開發環境搭建

1.Android Studio下載&#xff1a; Download Android Studio & App Tools - Android Developers 2.安裝 安裝過程非常簡單&#xff0c;找到下載包&#xff0c;一直點Next即可。 3.下載Android SDK 第一次進入Android Studio默認會先下載Android SDK,筆者下載的Android SDK存…

零售行業供應鏈管理核心KPI指標(三)

完美訂單滿足率和退貨率 完美訂單滿足率有三個方面的因素影響&#xff1a;訂單按時、足量、無損交貨。通常情況下零售企業追求線上訂單履行周期慢慢達到行業平均水平&#xff0c;就是交付的速度變快了&#xff0c;這個肯定是一件好事情&#xff0c;趨勢越來越好。 同時&#…

歐拉公式

文章目錄 歐拉公式e歐拉恒等式歐拉公式歐拉公式 推導2步驟1: 使用泰勒級數展開步驟2: 將 i x i x ix 代入 e x e^x ex 復平面上推導歐拉公式步驟1&#xff1a;復平面上的復數表示步驟2&#xff1a;定義復數的指數形式步驟3&#xff1a;求導步驟4&#xff1a;連接兩種形式步驟…

ubuntu安裝opencv4

apt 安裝 sudo apt install libopencv-dev python3-opencvpkg-config查看安裝 sudo apt install pkg-configpkg-config --modversion opencv4pkg-config --libs --cflags opencv4參考 如何在 Ubuntu 20.04 上安裝 OpenCV pkg-config 詳解

spark yarn 開啟動態資源分配

概念 不需要指定并發&#xff0c;只需要指定內存&#xff0c; 程序在運行后會動態調節并發數量&#xff0c;我們只需要設置一個上線即可 在spark 配置文件設置&#xff1a; spark.dynamicAllocation.enabled true spark.shuffle.service.enabled true 準備shuffer jar 將spar…

星際爭霸之小霸王之小蜜蜂(一)

目錄 前言 一、安裝pygame庫 1、pygame庫簡介 2、在windows系統安裝pygame庫 二 、搭建游戲框架 1、創建游戲窗口 2、改變窗口顏色 總結 前言 大家應該都看過或者都聽說過python神書“大蟒蛇”&#xff0c;上面有一個案例是《外星人入侵》&#xff0c;游戲介紹讓我想起了上…

炫酷UI前端效果的CSS生成工具

提升設計人員和前端開發人員的工作 推薦炫酷UI前端效果的CSS生成工具1.Neumorphism2.帶有漸變的圖標3.Interactions4.大型數據庫5.動畫6.Mask7.動畫按鈕8. 自定義形狀分隔線9.背景圖案10. SVG波浪推薦炫酷UI前端效果的CSS生成工具 1.Neumorphism 地址:https://neumorphism.i…

【Nginx17】Nginx學習:目錄索引、字符集與瀏覽器判斷模塊

Nginx學習&#xff1a;目錄索引、字符集與瀏覽器判斷模塊 今天要學習的內容有幾個還是大家比較常見的&#xff0c;所以學習起來也不會特別費勁。對于目錄的默認頁設置大家都不會陌生&#xff0c;字符集的設置也比較常見&#xff0c;而瀏覽器的判斷這一塊&#xff0c;可能有同學…

深入源碼分析kubernetes informer機制(二)Reflector

[閱讀指南] 這是該系列第二篇 基于kubernetes 1.27 stage版本 為了方便閱讀&#xff0c;后續所有代碼均省略了錯誤處理及與關注邏輯無關的部分。 文章目錄 Reflector是什么整體結構工作流程list拉取數據緩存resync操作watch監聽操作 總結 Reflector是什么 reflector在informer…

RocketMQ雙主雙從同步集群部署

&#x1f388; 作者&#xff1a;互聯網-小啊宇 &#x1f388; 簡介&#xff1a; CSDN 運維領域創作者、阿里云專家博主。目前從事 Kubernetes運維相關工作&#xff0c;擅長Linux系統運維、開源監控軟件維護、Kubernetes容器技術、CI/CD持續集成、自動化運維、開源軟件部署維護…

學習筆記十九:Pod常見的狀態和重啟策略

Pod常見的狀態和重啟策略 常見的pod狀態第一階段&#xff1a;第二階段&#xff1a;擴展&#xff1a; pod重啟策略測試Always重啟策略正常停止容器內的tomcat服務非正常停止容器里的tomcat服務 測試never重啟策略正常停止容器里的tomcat服務非正常停止容器里的tomcat服務 測試On…

Mac安裝opencv后無法導入cv2的解決方法

前提條件&#xff1a;以下兩個插件安裝成功 pip install opencv-python pip install --user opencv-contrib-python 注&#xff1a;直接用pip install opencv-contrib-python如果報錯&#xff0c;就加上“–user" 第一步&#xff1a; 設置–添加python解釋器 第二步&am…

go語言惡意代碼檢測系統--對接前端可視化與算法檢測部分

Malware Detect System 1 產品介紹 惡意代碼檢測系統。 2 產品描述 2.1 產品功能 功能點詳細描述注冊賬號未注冊用戶注冊成為產品用戶&#xff0c;從而具備享有產品各項服務的資格登錄賬號用戶登錄產品&#xff0c;獲得產品提供的各項服務上傳惡意樣本用戶可以將上傳自己的…