黑猴子的家:JavaWeb 之 Servlet Listener 监听器

1、监听器简介

Listener是JavaWeb中三大组件之一。Servlet、Filter、Listener
三大组件都有的共同特点,都需要实现一个接口,并在web.xml文件配置。
JavaWeb中的监听器的监听对象是谁?
    ServletContext
    HttpSession
    ServletRequest

2、监听器分类

JavaWeb中的监听器共有三种,共8个监听器
    - 生命周期监听器,监听三个对象的创建和销毁的事件。
    - 属性监听器,监听三个对象中属性的变化。
    - session对象监听器,将它session中的属性,以及session的活化和钝化。

3、生命周期监听器

1)ServletContextListener

    - ServletContext生命周期监听器
     - void contextDestroyed(ServletContextEvent sce)
    - 该方法在ServletContext对象销毁前调用
     - void contextInitialized(ServletContextEvent sce)
    - 该方法在ServletContext对象创建之前调用。
    - ServletContextEvent 对象可以获取到ServletContext对象
    ServletContextEvent.getServletContext();

2)HttpSessionListener

    - HttpSession生命周期监听器
        - void sessionCreated(HttpSessionEvent se)
        - 该方法在Session创建时调用
         - void sessionDestroyed(HttpSessionEvent se)
        - 在session销毁时调用
        - HttpSessionEvent
        - 可以获取HttpSession对象

3)ServletRequestListener

    - void requestDestroyed(ServletRequestEvent sre)
    - 在request对象销毁时调用
    - void requestInitialized(ServletRequestEvent sre)
    - 在request对象创建时调用
    - ServletRequestEvent
    可以获取ServletContext对象和ServletRequest

4)编写一个监听器的步骤

    (1)创建一个类并实现一个接口。
    (2)在web.xml文件中注册监听器。

4、属性监听器

属性监听器,监听三个域中的属性的变化:添加一个属性,替换一个属性,移除一个属性

1)ServletContextAttributeListener

    - 监听ServletContext中的属性的变化
    void attributeAdded(ServletContextAttributeEvent scab)
    - 当向ServletContext中添加属性时调用
    attributeRemoved(ServletContextAttributeEvent scab)
    - 移除属性时调用
    attributeReplaced(ServletContextAttributeEvent scab)
    - 替换一个属性时调用

2)HttpSessionAttributeListener

    void attributeAdded(HttpSessionBindingEvent se)
    void attributeRemoved(HttpSessionBindingEvent se)
    void attributeReplaced(HttpSessionBindingEvent se)
    - HttpSessionBindingEvent
        (1)可以获取到属性名 getName()
        (2)可以获取属性的旧值 getValue()
        (3)可以获取到HttpSession对象 getSession();

3)ServletRequestAttributeListener

    void attributeAdded(ServletRequestAttributeEvent srae)
    void attributeRemoved(ServletRequestAttributeEvent srae)
    void attributeReplaced(ServletRequestAttributeEvent srae)
    以下两个监听器监听session域中的属性的。

5、HttpSessionBindingListener

    监听session域中某一个类的实例的添加和移除。
    该接口由JavaBean来实现,不需要再web.xml文件配置
        valueBound(HttpSessionBindingEvent event)
        - 当该类的实例,作为属性设置进session域中时调用
        valueUnbound(HttpSessionBindingEvent event)
        - 当该类的实例,从session域中被移除时调用

6、HttpSessionActivationListener

监听session域中的某类属性,和session一起活化和钝化的事件。
该接口由JavaBean来实现,同样不需要再web.xml中配置
    void sessionDidActivate(HttpSessionEvent se)
    - 当前对象和session一起被活化到内存时调用
    void sessionWillPassivate(HttpSessionEvent se)
    当前对象和session一起钝化到硬盘时调用

7、code

1)InitDBDataListener
package com.alex.web.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
 * ServletContextListener : 用于监听ServletContext 对象(application)的创建和销毁
 *
 */
public class InitDBDataListener implements ServletContextListener {
    
    public InitDBDataListener(){
        System.out.println("InitDBDataListener 对象被创建了");
    }

    // 用于监听application对象销毁后,需要执行的业务逻辑
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println(InitDBDataListener.class.getName() + "- contextDestroyed 执行了 - 删除数据库模拟数据");
    }

    // 用于监听application对象创建后需要执行的业务逻辑
    // application 对象在服务器启动时,加载当前项目创建
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println(InitDBDataListener.class.getName() + "- contextInitialized 执行了 - 往数据库插入了模拟数据");
    }
}
2)web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
    http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>web_listener</display-name>
<!-- 
    web 开发三大组件: listener、filter、servlet
         同时存在的时候,在web.xml创建的先后顺序
    listener  >   filter  >  servlet
 -->
    <!-- 监听器对象,服务器启动时 -->
    <listener>
        <listener-class>com.alex.web.listener.InitDBDataListener</listener-class>
    </listener>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值