Kevin's blog Kevin's blog
首页
  • Java基础
  • Java高级
  • MySQL
  • JDBC
  • Java 8新特性
  • 原生Servlet
  • 延迟队列
  • 分布式事务
  • ActiveMQ
  • Elasticsearch
  • Stream API
  • Redis 实战(黑马程序员)
  • Redis 课程(尚硅谷)
  • Redis数据类型和常用命令
  • 版本控制
  • Spring Framework
  • Spring MVC Framework
  • MyBatis Framework
  • MyBatis Plus Framework
  • Spring Boot Framework
  • 韩顺平 Spring Boot Framework
  • 在线教育
  • 谷粒商城 - 分布式基础 高级 集群
  • 谷粒商城 - 详细开发文档
  • docker基础
  • docker-compose容器编排
  • docker swarm集群管理
  • Vue2基础
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Kevin

Java系统笔记
首页
  • Java基础
  • Java高级
  • MySQL
  • JDBC
  • Java 8新特性
  • 原生Servlet
  • 延迟队列
  • 分布式事务
  • ActiveMQ
  • Elasticsearch
  • Stream API
  • Redis 实战(黑马程序员)
  • Redis 课程(尚硅谷)
  • Redis数据类型和常用命令
  • 版本控制
  • Spring Framework
  • Spring MVC Framework
  • MyBatis Framework
  • MyBatis Plus Framework
  • Spring Boot Framework
  • 韩顺平 Spring Boot Framework
  • 在线教育
  • 谷粒商城 - 分布式基础 高级 集群
  • 谷粒商城 - 详细开发文档
  • docker基础
  • docker-compose容器编排
  • docker swarm集群管理
  • Vue2基础
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Java基础

  • Java高级

  • MySQL

  • JDBC

  • Java8新特性

  • 原生Servlet

    • web环境搭建(课程来自鱼皮)
    • Servlet
    • Cookie和Session
    • Filter
    • Listener
      • 简介
      • 观察者模式
      • 监听器的分类
        • 监听对象的创建与销毁
        • 创建与销毁监听器的使用:
        • 2. 监听对象的属性变化
        • 对象属性变化监听器的使用:
        • 3. 监听Session内的对象
    • AJAX and JSON
    • 文件的上传与下载
  • 延迟队列

  • 分布式事务

  • ActiveMQ

  • Elasticsearch

  • Stream

  • 黑马程序员Redis实战

  • 版本控制

  • Java
  • 原生Servlet
zhihuanwang
2023-09-12
目录

Listener

# Listener(监听器)

# 简介

  • Listener用于监听JavaWeb程序中的事件。
  • 例如:ServletContext、HttpSession、ServletRequest的创建、修改和删除。
  • Listener和我们之前学习的JS中的事件处理机制类似。在JS中,当我们触发某个事件后(例如:点击一个按钮)程序会调用一个响应函数来处理事件。同样的,在JavaWeb中,我们可以为某些事件来设置监听器,当事件被触发时,监听器中的指定方法将会被调用。

# 观察者模式

  • Listener的原理是基于观察者模式的,所谓观察者模式简单来说,就是当被观察者的特定事件被触发(一般这某些方法被调用)后,会通知观察者(调用观察者的方法),观察者可以在自己的方法中来对事件做一些处理。
  • 在我们的JavaWeb中,观察者就是Listener,而被观察者可能有三个ServletContext、HttpSession、ServletRequest。而事件指的就是这些对象的创建、修改和删除等。

# 监听器的分类

# 监听对象的创建与销毁

  • ServletContextListener
    • 作用:监听ServletContext对象的创建与销毁
    • 方法:
      • public void contextInitialized ( ServletContextEvent sce );
        • ServletContext创建时调用
      • public void contextDestroyed ( ServletContextEvent sce );
        • ServletContext销毁时调用
    • ServletContextEvent对象
      • 作用:public ServletContext getServletContext ()
        • 获取ServletContext对象
  • HttpSessionListener
    • 作用:监听HttpSession对象的创建与销毁
    • 方法:
      • public void sessionCreated ( HttpSessionEvent se );
        • HttpSession对象创建时调用
      • public void sessionDestroyed ( HttpSessionEvent se );
        • HttpSession对象销毁时调用
      • HttpSessionEvent对象
        • 作用:public HttpSession getSession ()
          • 获取当前HttpSession对象
  • ServletRequestListener
    • 作用:监听ServletRequest对象的创建与销毁
    • 方法:
      • public void requestInitialized ( ServletRequestEvent sre );
        • ServletRequest对象创建时调用
      • public void requestDestroyed ( ServletRequestEvent sre );
        • ServletRequest对象销毁时调用
      • ServletRequestEvent对象
        • 作用:
          • public ServletRequest getServletRequest ();
            • 获取当前的ServletRequest对象。
          • public ServletContext getServletContext ();
            • 获取当前项目的ServletContext对象。

# 创建与销毁监听器的使用:

  • 三种创建与销毁的监听器使用起来基本一致。
  • 下边来编写一个ServletContext的监听器:
    • 步骤:
      • 创建一个类实现ServletContextListener
public class MyServletContextListener implements ServletContextListener {
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		System.out.println("哈哈,我是ServletContext,我出生了");
	}
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("~~~~(>_<)~~~~,我是ServletContext,我要死了");	
	}
}
1
2
3
4
5
6
7
8
9
10
  • 在web.xml文件中注册监听器
<listener>
<listener-class>com.atguigu.web.listener.MyServletContextListener</listener-class>
</listener>
1
2
3
  • 由于ServletContext对象在服务器启动时创建,停止时销毁。所以启动服务器时我们会发现contextInitialized()方法被调用,服务器停止时contextDestroyed()方法被调用。
  • 其他两个监听器和该监听器使用方法一样,不再多说。

# 2. 监听对象的属性变化

  • ServletContextAttributeListener
    • 作用:监听ServletContext中属性的创建、修改和销毁
    • 方法:
      • public void attributeAdded(ServletContextAttributeEvent scab);
        • 向ServletContext中添加属性时调用
      • public void attributeRemoved(ServletContextAttributeEvent scab);
        • 从ServletContext中移除属性时调用
      • public void attributeReplaced(ServletContextAttributeEvent scab);
        • 当ServletContext中的属性被修改时调用
    • ServletContextAttributeEvent对象
      • 作用:
        • public String getName()
          • 获取修改或添加的属性名
        • public Object getValue()
          • 获取被修改或添加的属性值
        • public ServletContext getServletContext ()
          • 获取当前WEB应用的ServletContext对象
  • HttpSessionAttributeListener
    • 作用:监听HttpSession中属性的创建、修改和销毁
    • 方法:
      • public void attributeAdded ( HttpSessionBindingEvent se );
        • 向HttpSession中添加属性时调用
      • public void attributeRemoved(HttpSessionBindingEvent se);
        • 从HttpSession中移除属性时调用
      • public void attributeReplaced(HttpSessionBindingEvent se);
        • 当HttpSession中的属性被修改时调用
    • HttpSessionBindingEvent对象
      • 作用:
        • public String getName()
          • 获取修改或添加的属性名
        • public Object getValue()
          • 获取被修改或添加的属性值
        • public HttpSession getSession ()
          • 获取当前的HttpSession对象
  • ServletRequestAttributeListener
    • 作用:监听ServletRequest中属性的创建、修改和销毁
    • 方法:
      • public void attributeAdded (ServletRequestAttributeEvent srae );
        • 向ServletRequest中添加属性时调用
      • public void attributeRemoved(ServletRequestAttributeEvent srae);
        • 从ServletRequest中移除属性时调用
      • public void attributeReplaced(ServletRequestAttributeEvent srae);
        • 当ServletRequest中的属性被修改时调用
    • ServletRequestAttributeEvent对象
      • 作用:
        • public String getName()
          • 获取修改或添加的属性名
        • public Object getValue()
          • 获取被修改或添加的属性值
        • public ServletRequest getServletRequest ()
          • 获取当前的ServletRequest对象

# 对象属性变化监听器的使用:

  • 同样三种对象属性变化监听器使用方式类似,下边以request属性监听器为例。
    • 创建一个类实现ServletRequestAttributeListener接口
public class ReqAttrListener implements ServletRequestAttributeListener {
	@Override
	public void attributeAdded(ServletRequestAttributeEvent srae) {
		System.out.println("request域中添加一个属性"+srae.getName()+"="+srae.getValue());
	}
	@Override
	public void attributeRemoved(ServletRequestAttributeEvent srae) {
		System.out.println("request域中移除一个属性"+srae.getName()+"="+srae.getValue());
	}
	@Override
	public void attributeReplaced(ServletRequestAttributeEvent srae) {
		System.out.println("request域中一个属性被修改了"+srae.getName()+"="+srae.getValue());
	}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  • 在web.xml文件中注册监听器
	<listener>
		<listener-class>com.atguigu.web.listener.ReqAttrListener</listener-class>
	</listener>

1
2
3
4
  • 如此当我们操作request域中的属性时,对应方法将会被调用。

# 3. 监听Session内的对象

  • HttpSessionBindingListener
    • 作用:监听某个对象在session域中的创建与移除。
    • 方法:
      • public void valueBound(HttpSessionBindingEvent event)
        • 该类的实例被放到Session域中时调用
      • public void valueUnbound(HttpSessionBindingEvent event)
        • 该类的实例从Session中移除时调用
    • HttpSessionBindingEvent对象
      • 作用:
        • public HttpSession getSession ()
          • 获取HttpSession对象
        • public String getName()
          • 获取操作的属性名
        • public Object getValue()
          • 获取操作的属性值
  • 使用:要监听哪一个类,直接使该类实现HttpSessionBindingListener接口即可。
public class Student implements HttpSessionBindingListener {
	@Override
	public void valueBound(HttpSessionBindingEvent event) {
		//doSomeThing
	}
	@Override
	public void valueUnbound(HttpSessionBindingEvent event) {
		//doSomeThing
	}
}
1
2
3
4
5
6
7
8
9
10
  • HttpSessionActivationListener
    • 作用:监听某个对象在session中的序列化与反序列化。
    • 方法:
      • public void sessionWillPassivate(HttpSessionEvent se)
        • 该类实例和Session一起钝化到硬盘时调用
      • public void sessionDidActivate(HttpSessionEvent se)
        • 该类实例和Session一起活化到内存时调用
    • HttpSessionEvent对象
      • 作用:
        • public HttpSession getSession ()
          • 获取HttpSession对象
  • 使用:要监听哪一个类,直接使该类实现HttpSessionActivationListener接口即可。
public class Student implements HttpSessionActivationListener , Serializable {
	private static final long serialVersionUID = 1L;
	@Override
	public void sessionWillPassivate(HttpSessionEvent se) {
		// TODO Auto-generated method stub
	}
	@Override
	public void sessionDidActivate(HttpSessionEvent se) {
		// TODO Auto-generated method stub
	}
}
1
2
3
4
5
6
7
8
9
10
11
  • 注意:这里为了是Student对象可以正常序列化到硬盘上,还需要让类实现java.io.Serializable接口
编辑 (opens new window)
上次更新: 2024/06/15, 15:12:25
Filter
AJAX and JSON

← Filter AJAX and JSON→

最近更新
01
04.Spring Boot 韩顺平
10-12
02
day14
08-29
03
day09
08-29
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式