JavaWeb12-三大组件之监听器-Listener

news2024/11/15 13:58:41

1. 官方文档

文档:java_ee_api_中英文对照版.chm

2. Listener 监听器介绍

  1. Listener 监听器它是 JavaWeb 的三大组件之一。JavaWeb 的三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器
  2. Listener 是 JavaEE 的规范,就是接口
  3. 监听器的作用是,监听某种变化(一般就是对象创建/销毁, 属性变化), 触发对应方法完成相应的任务
    在这里插入图片描述
  4. JavaWeb 中的监听器(共八个), 目前最常用的是 ServletContextListener, 后面案例演示.
    在这里插入图片描述

3. JavaWeb 的监听器

3.1 ServletContextListener 监听器

  1. 作用:监听 ServletContext 创建或销毁(当我们 Web 应用启动时,就会创建 ServletContext),即生命周期监听
    应用场景:
    (1)加载初始化的配置文件;比如 spring 的配置文件
    (2)任务调度(配合定时器 Timer/TimerTask)

  2. 相关方法
    在这里插入图片描述

  3. 应 用 实 例

HspServletContextListener.java

/**
 * 解读
 * 1. 当一个类实现了 ServletContextListener
 * 2. 该类就是一个监听器
 * 3. 该类可以监听的事件 由该类实现的监听接口决定,比如 实现ServletContextListener
 *    , 则该类就可以监听 ServletContext对象的创建和销毁, 以此类推
 * 4. HspServletContextListener 就是一个监听者
 * 5. 当web应用启动时,就会产生 ServletContextEvent 事件, 会调用监听器的对应事件处理方法
 *    contextInitialized, 同时会传递 事件对象
 * 6. 程序员可以通过 ServletContextEvent 事件对象,来获取需要的信息, 然后再进行业务处理
 * 7. tomcat怎么知道这个监听器存在 ? 因为我们需要在web.xml中配置
 */
public class HspServletContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        ServletContext servletContext = servletContextEvent.getServletContext();
        System.out.println("HspServletContextListener 监听到 " +
                servletContext + " 被创建..");
        //如果我们获取到ServletContext 对象..进行业务处理

    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        ServletContext servletContext = servletContextEvent.getServletContext();
        System.out.println("HspServletContextListener 监听到 " +
                servletContext + " 被销毁..");

        //比如可以对servletContext 数据进行处理, 或者日志的管理...
        System.out.println("进行处理工作.....");
    }
}

web.xml

<!--配置监听器-->
<listener>
    <listener-class>com.hspedu.listener.HspServletContextListener</listener-class>
</listener>
  1. 完成测试

3.2 ServletContextAttributeListener 监听器

  1. 作用:监听 ServletContext 属性变化
  2. 相关方法
    在这里插入图片描述
  3. 使用少,再给大家举个例(后面的监听器类似)

HspServletContextAttributeListener.java

public class HspServletContextAttributeListener implements ServletContextAttributeListener {
    @Override
    public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {

        System.out.println("HspServletContextAttributeListener 监听到添加属性.."
                + servletContextAttributeEvent.getName() + "=" + servletContextAttributeEvent.getValue() );
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {

        System.out.println("HspServletContextAttributeListener 监听到删除属性.."
                + servletContextAttributeEvent.getName() + "=" + servletContextAttributeEvent.getValue() );
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {

        System.out.println("HspServletContextAttributeListener 监听到修改属性.."
                + servletContextAttributeEvent.getName() + "=" + servletContextAttributeEvent.getValue() );

    }
}

hi.java

public class HiServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        
        //给servletContext 对象操作属性
        ServletContext servletContext = request.getServletContext();
        servletContext.setAttribute("name", "凤凰龙神号");
        servletContext.setAttribute("name", "剑王龙神号");
        servletContext.removeAttribute("name");

        
        System.out.println("HiServlet 处理完毕....");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

web.xml

<listener>
    <listener-class>com.hspedu.listener.HspServletContextAttributeListener</listener-class>
</listener>

<servlet>
    <servlet-name>HiServlet</servlet-name>
    <servlet-class>com.hspedu.servlet.HiServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>HiServlet</servlet-name>
    <url-pattern>/hi</url-pattern>
</servlet-mapping>
  1. 完成测试

3.3 其它监听器-使用较少

3.3.1 HttpSessionListener 监听器

  1. 作用:监听 Session 创建或销毁,即生命周期监听
  2. 相关方法
    在这里插入图片描述

HspHttpSessionListener.java

public class HspHttpSessionListener implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        HttpSession session = httpSessionEvent.getSession();
        //当session创建时,我们给它设置一个生命周期 30s
        session.setMaxInactiveInterval(30);
        System.out.println("HspHttpSessionListener 监听到 session创建= " +
                session.getId());
        System.out.println("用户id=" + session.getId() + " 上线");
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        HttpSession session = httpSessionEvent.getSession();
        System.out.println("HspHttpSessionListener 监听到 session销毁= " +
                session.getId());
        System.out.println("用户id=" + session.getId() + " 离线");
    }
}

web.xml

<listener>
    <listener-class>com.hspedu.listener.HspHttpSessionListener</listener-class>
</listener>
public class HiServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //获取session对象
        HttpSession session = request.getSession();

        System.out.println("HiServlet 处理完毕....");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

  1. 使用方法和前面一样, 可以用于监控用户上线,离线

3.3.2 HttpSessionAttributeListener 监听器

  1. 作用:监听 Session 属性的变化
  2. 相关方法
    在这里插入图片描述
    在这里插入图片描述
public class HspHttpSessionAttributeListener implements HttpSessionAttributeListener {
    @Override
    public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
        //HttpSession session = httpSessionBindingEvent.getSession();
        System.out.println("HspHttpSessionAttributeListener 监听到session添加属性" +
                httpSessionBindingEvent.getName() + "=" + httpSessionBindingEvent.getValue());
    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
        HttpSession session = httpSessionBindingEvent.getSession();

        System.out.println("HspHttpSessionAttributeListener 监听到session删除属性" +
                httpSessionBindingEvent.getName());
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {

        System.out.println("HspHttpSessionAttributeListener 监听到session修改属性" +
                httpSessionBindingEvent.getName() + "=" + httpSessionBindingEvent.getValue());
    }
}
public class HiServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //获取session对象
        HttpSession session = request.getSession();
        session.setAttribute("age", 100);
        session.setAttribute("age", 400);
        session.removeAttribute("age");

        System.out.println("HiServlet 处理完毕....");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

web.xml

<listener>
    <listener-class>com.hspedu.listener.HspHttpSessionAttributeListener</listener-class>
</listener>
  1. 使用少 , 使用方法和前面一样。

3.3.3 ServletRequestListener 监听器

  1. ServletRequestListener 监听器
  2. 作用:监听 Request 创建或销毁,即 Request 生命周期监听
    相关方法
    在这里插入图片描述
  3. 可以用来监控, 某个 IP 访问我们网站的频率, 日志记录 ,访问资源的情况.
public class HspRequestListener implements ServletRequestListener {

    @Override
    public void requestInitialized(ServletRequestEvent servletRequestEvent) {
        System.out.println("HspRequestListener 监听到 request对象创建");
        ServletRequest servletRequest = servletRequestEvent.getServletRequest();
        System.out.println("记录访问日志....");
        System.out.println("访问IP= " + servletRequest.getRemoteAddr());
        System.out.println("访问的资源= " + ((HttpServletRequest)servletRequest).getRequestURL());
    }
    @Override
    public void requestDestroyed(ServletRequestEvent servletRequestEvent) {

        System.out.println("HspRequestListener 监听到 request对象被销毁");
    }


}

web.xml

<listener>
    <listener-class>com.hspedu.listener.HspRequestListener</listener-class>
</listener>

3.3.4 ServletRequestAttributeListener 监听器

  1. 作用:监听 Request 属性变化
  2. 相关方法
    在这里插入图片描述
    在这里插入图片描述
  3. 使用方法和前面类似

3.3.5 HttpSessionBindingListener 感知监听器

3.3.6 HttpSessionActivationListener 感知监听器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/510179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(附源码)计算机毕业设计Java动物在线领养网站

项目运行 &#x1f345;包售后&#xff0c;包调试&#xff0c;包讲解&#x1f345; &#x1f345;获取方式1:文章末尾获取联系&#x1f345; &#x1f345;获取方式2:点我进入&#xff0c;文章末尾获取联系&#x1f345; &#x1f345;包售后&#xff0c;包调试&#xff0c;包讲…

WX小程序 - 2

条件渲染&#xff1a; wx:if "{{ newlist.length 0 }}" wx:else 跳路由&#xff1a;绑定点击事件&#xff0c;执行跳转页面 bindtap data-id"{{ item.id }}" 添加id wx.navigateTo 跳路由并传参&#xff0c; 下一个路由 onLoad生命周期可以获得参数…

每周一算法:前缀和

前缀和 前缀和可以理解为数列的前 n 项的和。它通过预处理的方式&#xff0c;能够快速查询序列中从第L个数到到第R个数的和。 算法思想 其基本思想是在原序列的基础上预处理一个前缀和数组 s [ ] s[] s[]&#xff0c;其中 s [ i ] s[i] s[i]表示序列前 i i i个数的和。通过前…

Exception in thread “main“ java.lang.UnsupportedClassVersionError

java MainDemo执行main方法报错 Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.UnsupportedClassVersionError: MainDemo has been compiled by a more recent version of the Java Runtime…

多台电脑共享鼠标键盘软件

背景 最近接手了2个不同base的项目&#xff0c;由于2个base的不同代码加密管理&#xff0c;必须要用两台电脑进行分别开发。于是&#xff0c;我不大的办公桌上要摆上2个键盘和2个鼠标&#xff0c;一下子就显得桌面特别杂乱&#xff0c;办公心情都不舒畅了。 我跟朋友吐槽了这件…

用LeangooScrum敏捷工具做缺陷管理和迭代规划和迭代执行

上一篇我们介绍了如何管理产品路线图&#xff08;用Leangoo领歌Scrum敏捷开发工具管理产品路线图&#xff1f;_哆啦B梦_的博客-CSDN博客)和敏捷需求管理&#xff08;使用敏捷开发工具做敏捷需求管理流程_哆啦B梦_的博客-CSDN博客&#xff09; 这一篇我们介绍下如何用Scrum敏捷…

纷享销客携手百捷、锐之旗走进湖南竞网,探索互联网营销创新

近日&#xff0c;《互联网营销创新增长路径-高管面对面闭门会》在长沙成功举办&#xff0c;活动邀请武汉百捷集团股份有限公司、河南锐之旗信息技术有限公司&#xff0c;两家互联网营销服务头部企业的高层走进湖南竞网数字科技集团有限公司&#xff08;以下简称“竞网”&#x…

[CSDN] 512创作纪念日,大处着眼,小处着手,乐观进取

大家好&#xff0c;我是一名程序员&#xff0c;也是一名CSDN博客作者&#xff0c;今天是我成为CSDN博客作者的512天纪念日&#xff0c;我想借此机会和大家分享一下我的创作历程。 初心与动力 从事IT行业多年&#xff0c;我深深感受到这个行业变化的速度非常之快&#xff0c;需…

责任链模式——使编程更有灵活性

● 责任链模式介绍 责任链模式&#xff08;Iterator Pattern)&#xff0c;是行为型设计模式之一。什么是“链”&#xff1f;我们将多个节点首位相连构成的模型称为链&#xff0c;比如生活中常见的锁链&#xff0c;就是由一个个圆角长方形的铁环串起来的结构。对于链式结构&…

浅谈绿色创新型校园的节约能耗与能耗管理的应用

摘要&#xff1a;保护地球资源和环境的可持续发展理论成为我国的基本国策。建筑节能上升到较高地位。仅有能量的“守恒”是不够的&#xff0c;更要研究用*小代价和*小能耗来满足人们的而合理需求&#xff0c;实现建筑合理用能。文章主要针对学校能源管理的问题进行研究&#xf…

带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性

带你简单了解Chatgpt背后的秘密&#xff1a;大语言模型所需要条件&#xff08;数据算法算力&#xff09;以及其当前阶段的缺点局限性 1.什么是语言模型&#xff1f; 大家或多或少都听过 ChatGPT 是一个 LLMs&#xff0c;那 LLMs 是什么&#xff1f;LLMs 全称是 Large Language…

TomcatServletHTTP

1、Web概述 1.1 Web相关概念 Web是全球广域网&#xff0c;也称为万维网(www)&#xff0c;能够通过浏览器访问的网站。 在我们日常的生活中&#xff0c;经常会使用浏览器去访问百度、京东、传智官网等这些网站&#xff0c;这些网站统称为Web网站。 如下就是通过浏览器访问传智…

基于AT89C51单片机的电子计数器设计与仿真

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87770826 源码获取 主要内容&#xff1a; 设计一个电子计时器&#xff0c;数码管初始显示值为“00”&#xff0c;每隔1s电子秒表加1&#xff1b;秒计数到60时清0&a…

【网络】Socket编程-UDP篇

文章目录 预备知识源IP地址和目的IP地址源MAC地址和目的MAC地址源端口号和目的端口号"端口号port" 和 "进程ID"认识TCP/UDP协议网络字节序 Socket编程sockaddr结构API接口 简单的UDP网络程序服务器server服务端创建套接字:socket函数**socket的底层原理** …

metaRTC6.0 whip/whep编程指南

概述 WHIP/WHEP都是基于 HTTP 的协议并且是IETF国际标准&#xff0c;国内外一些主流的开源webRTC SFU都开始支持WHIP/WhEP协议。 WHIP: WebRTC-HTTP ingestion protocol (WHIP) WHEP: WebRTC-HTTP egress protocol (WHEP) 下载源码 GitHub - metartc/metaRTC: A cross-pla…

Matlab \和 / . * 和* ./ 和.\ 总结

一、* 与.* a、向量 >> a[1 2 4]; >> b[2 4 6]; a.*b[1*2 2*4 4*6][2 8 24]; 注意&#xff1a;a 和b 的长度是一样的。 dot1*2 2*4 4*634 a*b34 >> a[1 2 4]; >> b[2 4 6]; >> a.*bans 2 8 24>> dot(a,b)ans 34>> a*…

开关电源基础05:基本开关电源电感器设计(1)

说在开头&#xff1a;关于第五届索尔维会议&#xff08;1&#xff09; 1927年对物理学是个非常重要的年份&#xff0c;因为这年发生了一件非常重要的事&#xff0c;那就是第五届索尔维会议&#xff1b;后来的发展证明&#xff0c;它毫无疑问是有史以来最著名的一次索尔维会议。…

C#开发WPF自宿主web服务

一直都在使用IIS部署WebAPI的模式&#xff0c;经过讨论决定不适用IIS&#xff0c;创建自宿主程序启动AP 使用微软自带OWIN来实现自承载Web Api框架&#xff0c;集成了swagger接口文档 话不多说&#xff0c;详细如下&#xff1a; 大致的项目框架结构&#xff1a; 使用NuGet安…

讨论func与scan分开长tree的局限性

当func clock的root都定义在mux前面&#xff0c;分开长tree有助于做短func tree&#xff0c;减少clock buffer&#xff0c;但当部分func clock的root定义在其他clock后面&#xff0c;如下图&#xff0c;分开长tree就会导致scan clock产生很大的skew&#xff0c;从而引起hold vi…

Linux系统之Team链路聚合配置

Linux系统之Team链路聚合配置 一、Team链路聚合介绍1. Teaming技术简介2. 网卡的bonding和Teaming技术3. Team常用工作模式 二、实践环境规划三、添加物理网卡1. 新增物理网卡2. 查看网卡信息 四、Team链路聚合配置1. 查看team的工作模式2. 创建team0的网络接口3. 配置team0接口…