监听器 Listener

大家好呀,我是小笙,我和大家分享下我学习Javaweb的笔记

监听器 Listener

概述

Listener 监听器它是 JavaWeb 的三大组件之一,JavaWeb 的三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器

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

JavaWeb 中有八个监听器, 目前最常用的是 ServletContextListener

ServletContextListener

作用:监听 ServletContext 创建或销毁 (当我们 Web 应用启动时,就会创建 ServletContext)即生命周期监听

应用场景

  • 加载初始化的配置文件 比如 spring 的配置文件
  • 任务调度(配合定时器 Timer/TimerTask)

方法

void contextInitialized(ServletContextEvent sce)  // 创建 Servletcontext 时触发
void contextDestroyed(ServletContextEvent sce) // 销毁 Servletcontext 时触发

代码示例

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <listener>
        <listener-class>com.al_tair.listener.HttpServletContextListener</listener-class>
    </listener>
</web-app>
public class HttpServletContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContext 被创建");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContext 被销毁");
    }
}

ServletContextAttributeListener

作用:监听 ServletContext 属性变化

方法

void attributeAdded(ServletContextAttributeEvent event) // 添加属性
void attributeReplaced(ServletContextAttributeEvent event) // 替换属性 
void attributeRemoved(ServletContextAttributeEvent event)  // 移除属性

示例代码

image-20220507133644059

// Servlet
@WebServlet(urlPatterns = {"/listener"})
public class ServletListenerDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet被调用");
        ServletContext servletContext = req.getServletContext();
        servletContext.setAttribute("name","罗念笙");
        servletContext.setAttribute("name","张洛融");
        servletContext.removeAttribute("name");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
// listener
public class HttpServletContextAttributeListener implements ServletContextAttributeListener {
    @Override
    public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
        Object name = servletContextAttributeEvent.getServletContext().getAttribute("name");
        if(name != null)
            System.out.println("添加属性" + name.toString());
        else
            System.out.println("添加属性");
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
        System.out.println("移除属性...");
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
        System.out.println("替换属性...");
    }
}

HttpSessionListener

作用:监听 Session 创建或销毁,即生命周期监听

方法

void sessionCreated(HttpSessionEvent se)  // 创建 session 时调用 
void sessionDestroyed(HttpSessionEvent se)  // 销毁 session 时调用

HttpSessionAttributeListener

作用:监听 Session 属性的变化

方法

void attributeAdded(ServletRequestAttributeEvent srae) // 添加属性
void attributeReplaced(ServletRequestAttributeEvent srae) // 替换属性
void attributeRemoved(ServletRequestAttributeEvent srae)  // 移除属性

ServletRequestListener

作用:监听 Request 创建或销毁,即 Request 生命周期监听,可以用来监控, 某个 IP 访问我们网站的频率, 日志记录 ,访问资源的情况

方法

void requestInitialized(ServletRequestEvent sre) // 创建 request 
void requestDestroyed(ServletRequestEvent sre) // 销毁 request 

ServletRequestAttributeListener

作用:监听 Request 属性变化

方法

void attributeAdded(ServletRequestAttributeEvent srae) // 添加属性时
void attributeReplaced(ServletRequestAttributeEvent srae) // 替换属性
void attributeRemoved(ServletRequestAttributeEvent srae) // 移除属性 

其他监听器

HttpSessionBindingListener 感知监听器

HttpSessionActivationListener 感知监听器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗念笙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值