Listener监听器-基础、监听Context

Listener 的作用是用于监听 web应用的创建和销毁,以及在其上attribute发生的变化。 
web应用即ServletContext对象(jsp的隐式对象application) 
除了对web应用的监听外,还能监听session和request的生命周期,以及他们的attribute发生的变化。

  • 对Context的监听分生命周期的监听,和Context上Attribute变化的监听两种。

    编写 ContextListener
    ContextListener 实现接口ServletContextListener 
    有两个方法
    public void contextDestroyed(ServletContextEvent arg0) 
    对应当前web应用的销毁

    public void contextInitialized(ServletContextEvent arg0)
    对应当前web应用的初始化
    package listener;
     
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
     
    public class ContextListener implements ServletContextListener {
     
        @Override
        public void contextDestroyed(ServletContextEvent arg0) {
            System.out.println("web 应用销毁  ");
        }
     
        @Override
        public void contextInitialized(ServletContextEvent arg0) {
            System.out.println("web 应用初始化 ");
     
        }
    }
  • 配置 web.xml
    配置监听器
    <listener>
        <listener-class>listener.ContextListener</listener-class>
    </listener>
  • 测试

    在启动tomcat以及当前web应用重载的时候可以观察到
    web应用的自动重载需要如下前提:
    1. 配置: server.xml中对应的<context配置 的属性 @reloadable="true"
    2. 某个servlet 发生了变化,导致这个web应用自动重启
  • 编写 ContextAttributeListener

    ContextAttributeListener 实现接口ServletContextAttributeListener,
    分别提供如下方法:

    public void attributeAdded(ServletContextAttributeEvent e)
    监听属性的增加

    public void attributeRemoved(ServletContextAttributeEvent e)
    监听属性的移除

    public void attributeReplaced(ServletContextAttributeEvent e)
    监听属性的替换

    package listener;
     
    import javax.servlet.ServletContextAttributeEvent;
    import javax.servlet.ServletContextAttributeListener;
     
    public class ContextAttributeListener implements ServletContextAttributeListener {
     
        @Override
        public void attributeAdded(ServletContextAttributeEvent e) {
            System.out.println("增加属性 ");
            System.out.println("属性是" + e.getName());
            System.out.println("值是" + e.getValue());
     
        }
     
        @Override
        public void attributeRemoved(ServletContextAttributeEvent e) {
            // TODO Auto-generated method stub
            System.out.println("移除属性 ");
        }
     
        @Override
        public void attributeReplaced(ServletContextAttributeEvent e) {
            // TODO Auto-generated method stub
            System.out.println("替换属性");
        }
     
    }
  • 配置web.xml

    配置ContextAttributeListener
    <listener>
        <listener-class>listener.ContextAttributeListener</listener-class>
    </listener>
  • testContext.jsp

    故意造成Context属性的增加,替换和移除
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
     
    <%
        application.setAttribute("test", 1);
        application.setAttribute("test", 2);
        application.removeAttribute("test");
    %>
  • 测试

    访问页面进行测试
    http://127.0.0.1/testContext.jsp


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值