JavaWeb之Listener监听器

简介: JavaWeb之Listener监听器

1.什么是监听器?

(1)监听器是Servlet规范中的一员。在Servlet中,所有的监听器接口都是以“Listener”结尾。

(2)监听器中的方法不需要程序员手动调用,是发生某个特殊事件之后被服务器调用的。(3)监听器仅仅是对三大域对象做相关的时间监听。

2.监听器有什么用?

(1)监听器实际上是Servlet规范留给我们javaweb程序员去执行某段代码的特殊时机。

(2)如果在特殊的时刻想执行一段代码,你需要想到使用对应的监听器。

3.监听器的分类

web中定义八个监听器接口作为监听器器的规范,这八个接口按照不同的标准可以形成不同的分类;

(1)按监听的对对象划分:

①applicationֿ域监听器: ServletContextListener、ServletContextAttributeListener;

②sessionֿ域监听器:HttpSessionListener、HttpSessionAttributeListener、 HttpSessionBindingListener、HttpSessionActivationListener;

③requestֿ监听器:ServletRequestListener、ServletRequestAttributeListener ;

(2)按监听的事件分:

ֿ①域对象的创建和销毁监听器:ServletContextListener、HttpSessionListener、ServletRequestListener;

②域对象数据增删改事件监听器:ServletContextAttributeListener、 HttpSessionAttributeListener、ServletRequestAttributeListener;

③其他监听器:HttpSessionBindingListener、HttpSessionActivationListener;

3.Servlet规范中提供了哪些监听器?

3.1 application域监听器

(1)ServletContextListener:监听ServletContext对象的创建与销毁。

public interface ServletContextListener extends EventListener {
    public default void contextInitialized(ServletContextEvent sce) {
  // 这个方法是在ServletContext对象被创建的时候调用
    }
    public default void contextDestroyed(ServletContextEvent sce) {
    // 这个方法是在ServletContext对象被销毁的时候调用
    }
}

(2)ServletContextAttributeListener:监听ServletContext中属性的添加、移除和修改。

①attributeAdded(ServletContextAttributeEvent scab):向ServletContext中添加属性时调用

②attributeRemoved(ServletContextAttributeEvent scab):向ServletContext中移除属性时调用

③attributeReplaced(ServletContextAttributeEvent scab):当ServletContext中的属性被修改时调用

3.2 session域监听器

(1)HttpSessionListener:监听HttpSession对象的创建和销毁

public interface HttpSessionListener extends EventListener {
    public default void sessionCreated(HttpSessionEvent se) {
     // session创建的时候被调用
    }
    public default void sessionDestroyed(HttpSessionEvent se) {
   // session销毁的时候被调用
    }
}

(2)HttpSessionAttributeListener

该监听器监听的是session域中数据的变化。只要数据变化,则执行相应的方法。主要监测点在session域对象上。

public interface HttpSessionAttributeListener extends EventListener {
    public default void attributeAdded(HttpSessionBindingEvent se) {
    // 向session域中存储数据的时候,该方法被WEB服务器调用
    }
    public default void attributeRemoved(HttpSessionBindingEvent se) {
   // 将session域中存储的数据删除的时候,该方法被WEB服务器调用
    }
    public default void attributeReplaced(HttpSessionBindingEvent se) {
   // session域中某个数据被替换的时候,该方法被WEB服务器调用
    }
}

(3)HttpSessionBindingListener

● 该监听器不需要使用@WebListener进行标注。

● 假设User类实现了该监听器,那么User对象在被放入session的时候触发“绑定”事件,User对象从session中删除的时候,触发

”解绑“事件。

@Data
public class User implements HttpSessionBindingListener {
    @Override
    public void valueBound(HttpSessionBindingEvent event) {
        // 绑定数据时调用
    }
    @Override
    public void valueUnbound(HttpSessionBindingEvent event) {
    // 解绑数据时调用
    }
    // 构造方法, Getter/Setter方法
    private String username;
    private Integer password;
}

(4)HttpSessionIdListener

● session的id发生改变的时候,监听器中的唯一一个方法就会被调用。

(5)HttpSessionActivationListener

● 监听session对象的钝化和活化的。

● 钝化:session对象从内存存储到硬盘文件。

● 活化:从硬盘文件把session恢复到内存。

3.3 request域监听器

(1)ServletRequestListener

public interface ServletRequestListener extends EventListener {
    public default void requestDestroyed (ServletRequestEvent sre) {
    // request对象销毁时间点被调用
    }
    public default void requestInitialized (ServletRequestEvent sre) {
    // request对象创建时间点被调用
} }

(2)ServletRequestAttributeListener

4.实现一个监听器的步骤

以ServletContextListener为例:

(1)第一步:编写一个类比如MyServletContextListener实现ServletContextListener接口。并且实现里面的方法。

void contextInitialized(ServletContextEvent event)
void contextDestroyed(ServletContextEvent event)

(2)第二步:在web.xml文件中对ServletContextListener进行配置,如下:

<listener>
  <listener-class>com.bjpowernode.javaweb.listener.MyServletContextListener</listener-class>
</listener>

● 当然,第二步也可以不使用配置文件,也可以用注解,例如:@WebListener

● 注意:所有监听器中的方法都是不需要javaweb程序员调用的,由服务器来负责调用。当某个特殊的事件发生

(其实就是某个时机到了)之后,被web服务器自动调用。

目录
相关文章
|
5月前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
7月前
|
SQL 前端开发 Java
JavaWeb 学习日记案例详解及 javaweb 完整项目案例实战指南
本文介绍了一个基于Spring Boot的JavaWeb企业员工管理系统完整案例,涵盖部门管理、员工管理、登录、异常处理、事务管理及AOP等核心功能实现,结合CSDN相关技术文章,提供详细技术方案与应用实例,适合JavaWeb开发者学习与参考。
431 0
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
266 4
|
Java 开发者 Spring
java springboot监听事件和处理事件
通过上述步骤,开发者可以在Spring Boot项目中轻松实现事件的发布和监听。事件机制不仅解耦了业务逻辑,还提高了系统的可维护性和扩展性。掌握这一技术,可以显著提升开发效率和代码质量。
372 33
|
Java 开发者 Spring
java springboot监听事件和处理事件
通过上述步骤,开发者可以在Spring Boot项目中轻松实现事件的发布和监听。事件机制不仅解耦了业务逻辑,还提高了系统的可维护性和扩展性。掌握这一技术,可以显著提升开发效率和代码质量。
459 13
|
Java Spring
Java Spring Boot监听事件和处理事件
通过上述步骤,我们可以在Java Spring Boot应用中实现事件的发布和监听。事件驱动模型可以帮助我们实现组件间的松耦合,提升系统的可维护性和可扩展性。无论是处理业务逻辑还是系统事件,Spring Boot的事件机制都提供了强大的支持和灵活性。希望本文能为您的开发工作提供实用的指导和帮助。
491 15
|
Java 开发者 Spring
Java Springboot监听事件和处理事件
通过这些内容的详细介绍和实例解析,希望能帮助您深入理解Spring Boot中的事件机制,并在实际开发中灵活应用,提高系统的可维护性和扩展性。
931 7
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
138 2
|
Java C#
Java的监听处理事件--小球移动案例
Java的监听处理事件--小球移动案例
111 0
|
分布式计算 Java Hadoop
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
284 1