监听器-Listener

2023-12-15 22:01:47

Listener监听器介绍

1.Listener监听器是javaWeb三大组件之一。javaWeb三大组件分别是:Servlet程序、Listener监听器、Filter过滤器

2.Listener是javaEE的规范,就是接口

3.监听器的作用是,监听某种变化(一般就是对象的创建/销毁,属性变化),触发对应方法完成相应的任务

4.JavaWeb中的监听器(共八个),目前最常用的是ServletContextListener

javaWeb的监听器

1.ServletContextListener监听器
1.作用:监听ServletContext创建或销毁(当Web应用启动时,就会创建ServletContext ),即生命周期监听,
2.应用场景:

(1)、加载初始化的配置文件,比如spring的配置文件;

(2)、任务调配,(配合Timer/TimerTask)

3.相关方法:
//void contextInitialized(ServletContextEvent sce):创建Servletcontext时触发
//void contextDestroyed(ServletContextEvent sce):销毁Servletcontext时
4.应用实例:

代码:(创建和销毁)

配置监听器:在web.xml文件中写入下列代码

<listener>
    <listener-class>com.listener.hspServletContextListener</listener-class>
</listener>

实现类

package com.listener;

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

public class hspServletContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext servletContext = sce.getServletContext();
        System.out.println("hspServletContextListener 监听到" +
                servletContext + "被创建...");
        //如果获取到ServletContext对象,就可以进行业务处理

    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        ServletContext servletContext = sce.getServletContext();
        System.out.println("hspServletContextListener 监听到" +
                servletContext + "被销毁 ...");
        //可以对servletContext里的数据进行处理,或者时日志的管理
    }
}
5.注意:

1.当一个类实现 ServletContextListener 接口时,就是一个监听器 2.该类可以监听的事件 由该类实现的监听接口决定 3.hspServletContextListener 就是一个监听者 4.当web应用启动时,就会产生 ServletContextEvent 事件,就会调用 监听器的对应事件处理方法contextInitialized,同时会传递事件对象 5.我们可以通过 ServletContextEvent 事件对象,来获取需要的信息, 在进行业务处理 6.因为需要在web.xml文件中配置,所以tomcat会知道改监听器的存在

2.ServletContextAttributeListener监听器
1.作用:监听ServletContext属性变化,该监听器使用较少
2.相关方法:
//void attributeAdded(ServletContextAttributeEvent event):添加属性时调用
//void attributeReplaced(ServletContextAttributeEvent event):替换属性时调用
//void attributeRemoved(ServletContextAttributeEvent event):移除属性时调用
3.代码
servlet类
package com.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "HiServlet",urlPatterns = "/HiServlet")
public class HiServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //给servletContext对象操作属性
        ServletContext servletContext=request.getServletContext();
        servletContext.setAttribute("name","张三");
        servletContext.setAttribute("name","李四");
        servletContext.removeAttribute("name");

        System.out.println("HiServlet操作完毕...");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

监听器

package com.listener;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;


public class hspServletContextAttributeListener implements ServletContextAttributeListener {
    /**
     * 添加属性
     * @param scae
     */
    @Override
    public void attributeAdded(ServletContextAttributeEvent scae) {
        System.out.println("hspServletContextAttributeListener监听到添加属性"
        +scae.getName()+"="+scae.getValue());
    }

    /**
     * 删除属性
     * @param scae
     */
    @Override
    public void attributeRemoved(ServletContextAttributeEvent scae) {
        System.out.println("hspServletContextAttributeListener监听到删除属性"
                +scae.getName()+"="+scae.getValue());
    }

    /**
     * 修改
     * @param scae
     */
    @Override
    public void attributeReplaced(ServletContextAttributeEvent scae) {
        System.out.println("hspServletContextAttributeListener监听到修改属性"
                +scae.getName()+"="+scae.getValue());
    }
}

文章来源:https://blog.csdn.net/weixin_74484843/article/details/134901013
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。