首页 > 其他分享 >Web组件之 Listener (监听器)

Web组件之 Listener (监听器)

时间:2024-11-02 09:20:06浏览次数:4  
标签:Web 销毁 监听器 对象 创建 Listener ServletContext 监听

文章目录


在这里插入图片描述


1.1 Listener概述

​ JavaWeb 中的监听器是监听 ServletContext HttpSession HttpServletRequest 三个数据域对象创建和销毁以及监听数据域对象中数据的变化,就是监听数据域对象中属性的变化setAttribute removeAttribute

1.ServletContext 是在tomcat启动创建,关闭tomcat销毁

2.HttpSession 是在浏览器第一次访问执行request.getSession()创建,销毁时间:1)30min 2)执行invalidate()

3.HttpServletRequest 是浏览器第一次访问创建,浏览器接收到服务器的响应就销毁

# 监听
1. 设置监听器的人
2. 监听器 
2. 监听器目标: 被监听的对象 
3. 监听器工作: 被监听的对象执行某种行为,监听器就开始工作

# web里面
1. 雇佣人 : web程序开发者
2. 监听器例子A
	1). 监听器A: ServletContextListener ****
	2). 目标 :  监听ServletContext对象
	3). 执行 : 监听ServletContext对象创建和销毁
3. 监听器例子B
	1). 监听器A: HttpSessionListener
	2). 目标 : HttpSession对象
	3). 执行 : 监听HttpSession对象创建和销毁
4. 监听器例子C
	1). 监听器A: HttpRequestListener
	2). 目标 : HttpRequest对象
	3). 执行 : 监听HttpRequest对象创建和销毁	
5.  监听器例子D
	1). 监听器A: ServletContextAttributeListener ****
	2). 目标 : ServletContext对象
	3). 执行 : 监听ServletContext对象增删改数据 (add,remove) 当我们向ServletContext对象中添加数据(setAttribute())和删除数据(removeAttribute())就会被ServletContextAttributeListener监听器监听
 	ServletContextAttributeListener
 	HttpSessionAttributeListener
 	HttpRequestAttributeListener

生活中的监听器

我们很多商场有摄像头,监视着客户的一举一动。如果客户有违法行为,商场可以采取相应的措施。

JavaWeb 中的监听器

在我们的 java 程序中,有时也需要监视某些事情,一旦被监视的对象发生相应的变化,我们应该采取相应的操作。

监听 web 三大域对象:HttpServletRequestHttpSessionServletContext (创建和销毁)

场景

历史访问次数、统计在线人数、系统启动时初始化配置信息

监听器的接口分类

事件源监听器接口时机
ServletContextServletContextListener上下文域创建和销毁
ServletContextServletContextAttributeListener上下文域属性增删改的操作
HttpSessionHttpSessionListener会话域创建和销毁
HttpSessionHttpSessionAttributeListener会话域属性增删改的操作
HttpServletRequestServletRequestListener请求域创建和销毁
HttpServletRequestServletRequestAttributeListener请求域属性增删改的操作

1.2 Listener快速入门

监听器在 web 开发中使用的比较少,见的机会就更少了,今天我们使用 ServletContextListenner 来领略下监听器的风采, 因为这个监听器是监听器中使用率最高的一个, 且监听器的使用方式都差不多。

使用这个监听器可以在项目启动和销毁的时候做一些事情, 例如:在项目启动的时候加载配置文件。

步骤分析

1. 创建一个普通类,实现ServletContextListenner

2. 重写方法
	监听ServletContext创建
	监听ServletContext销毁
	
3. 配置
	可以 web.xml
	也可以 注解
① xml版本
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

/*
    设置监听器的人: 开发者
    监听器 : MyListener
    监听器目标 : ServletContext 对象
    监听器的工作:
        1). 当ServletContext 对象创建的时候就会执行contextInitialized方法
            ServletContext是tomcat启动时就会创建 (早于Filter和Servlet)
        2). 当ServletContext 对象销毁的时候就会执行contextDestroyed方法
             ServletContext是tomcat关闭时销毁 (晚于Filter和Servlet)

        这两个方法是事件驱动
 */
public class MyListener implements ServletContextListener {
    //tomcat一启动,此方法就会运行
        //运用场景: spring底层封装了一个ServletContextListener加载配置文件
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("contextInitialized");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("contextDestroyed");
    }
}

<listener>
    <listener-class>com.test.MyServletContextListener</listener-class>
</listener>
② 注解版本
@WebListener
public class MyListener implements ServletContextListener {
    //tomcat一启动,此方法就会运行
        //运用场景: spring底层封装了一个ServletContextListener加载配置文件
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("contextInitialized");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("contextDestroyed");
    }
}

1.3 案例:模拟spring框架

需求:可以在项目启动时读取配置文件。获取配置文件的名字。

步骤:

1.在web.xml进行配置文件的配置

2.创建自定义监听器类监听ServletContext的创建和销毁

3.在自定义监听器类中实现监听器的方法

4.实现的方法体中读取web.xml文件中关于当前项目配置文件的信息

5.输出结果

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

//2.创建自定义监听器类监听ServletContext的创建和销毁
//别忘记注册监听器
@WebListener
public class SpringContextListener implements ServletContextListener{
    //3.在自定义监听器类中实现监听器的抽象方法
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        //4.实现的方法体中读取web.xml文件中关于当前项目配置文件的信息
        //4.1根据事件类对象servletContextEvent调用方法获取ServletContext上下文对象
        ServletContext servletContext = servletContextEvent.getServletContext();
        //4.2使用上下文对象调用方法获取web.xml配置文件中的数据
        /*
            <context-param>
                <param-name>jdbc</param-name>
                <param-value>jdbc.properties</param-value>
            </context-param>
         */
        String str = servletContext.getInitParameter("jdbc");
        System.out.println("str = " + str);
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("释放资源....销毁。。。。");
    }
}
<!--配置当前项目的配置文件信息-->
<!--1.在web.xml进行配置文件的配置-->
<context-param>
    <param-name>jdbc</param-name>
    <param-value>jdbc.properties</param-value>
</context-param>

标签:Web,销毁,监听器,对象,创建,Listener,ServletContext,监听
From: https://blog.csdn.net/Snowyyds/article/details/143434737

相关文章

  • StableDiffusionWebUI 让我找到了宫崎骏动漫里的夏天
    前言一直以来想部署一个自己的StableDiffusion模型,但是在构建模型过程中遇到许多问题,后来发现可以用HAI可以快速构建并且部署,给我带来了极大的便利,省去了许多麻烦事。高性能应用服务(HyperApplicationInventor,HAI)是一款面向AI和科学计算的GPU/NPU应用服务产品,提供即插即用......
  • Java Web和Java有什么区别
    JavaWeb和Java都是Java编程语言的应用范畴,但它们有着根本的区别。主要包括:1.应用领域不同;2.技术栈和库的差异;3.开发工具和环境的不同;4.运行环境的区别;5.学习曲线的差异;6.与数据库的交互;7.安全性要求。Java主要关注核心编程,而JavaWeb专注于基于Java的网络应用开发。1、应用领......
  • Websocket整合实现聊天操作
    在实际开发中,尤其是web开发,我该如何做才可以实现消息或者数据的实时更新呢。这里我为大家介绍,websocket长连接,它可以简历连接,且创建一个通道,通道中的数据可以实时更新。废话不多说,接下来我将使用vue+springboot基于websocket来实现一个简单的聊天实现。vue前端代码,这里主要......
  • 猿人学web端爬虫攻防大赛赛题第15题——备周则意怠-常见则不疑
    题目网址:https://match.yuanrenxue.cn/match/15解题步骤看触发的数据包。有个m参数,一看就是经过处理的,我们得知道m是如何组成的。看Initiator模块。还是看request函数,往上一看就看到了m的赋值操作。打断点,触发。看下window.m()的定义。比较好理解的,t1和t......
  • ctf web赛道基础 万字笔记
    《Java代码审计》http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484219&idx=1&sn=73564e316a4c9794019f15dd6b3ba9f6&chksm=c0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene=21#wechat_redirect《Web安全》http......
  • 2024御网杯web
    Webinput_data就是一个简单是svn泄露直接在pristine/57/中即可找到Admin通过爆错和提示可以确定是Thymeleaf模板注入命令执行参考资料:https://zhuanlan.zhihu.com/p/248416919https://xz.aliyun.com/t/9826?u_atoken=b9d5b4c8f462ecf95b3441b560c7c2f1&u_asig=0a47......
  • 黑马JavaWeb-day04
    @目录mavenmaven简介maven安装IDEA集成maven创建maven项目Maven坐标依赖管理单元测试Web入门Springboot入门HTTP协议三层架构分层解耦\(IOC\&DI\)入门\(IOC\)和\(DI\)详解mavenmaven简介maven:\(Maven\)是\(apache\)旗下的一个开源项目,是一款用于管理和构建\(java\)项目的......
  • 【Java Web】使用JDBC操作数据库(含代码示例)
    文章目录JDBC主要组成部分访问数据库步骤数据库交互StatementPreparedStatementSQL注入攻击演示示例单查询多查询返回记录数JDBC(JavaDatabaseConnectivity)是Java中用于执行SQL语句的标准API,它提供了一种统一的方式来访问各种关系型数据库。JDBC使得开发者能够以......
  • ctfshow web入门 文件上传
    CtfshowWeb入门151 查看源代码,发现只能上传.png的文件用bp抓包.png的图片格式添加一句话木马,文件格式修改成.php   对于上传成功的后门代码,直接通过hackbar发送post包利用php内置system()函数执行  查看flag.php文件   152和上一题做题步骤一样......
  • webpack5配置传统jQuery多页面应用
    简介大家好,我是chenms,最近我们公司有要求需要开发几个以前传统的前后端不分离的jQuery老项目,现在大部分都是用vue或者react开发习惯了组件化的方式,所以我这边打算用webpack5配置一个可以打包传统jQuery多页面应用想法通过配置postcss给css自动加上前缀通过配置babel把e......