JavaWeb——监听器Listener & 过滤器Filter——韩顺平学习笔记

2023-12-28 04:18:34

JavaWeb 三大组件之监听器 Listener

Listener

  1. Listener 监听器它是 JavaWeb 的三大组件之一。JavaWeb 的三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器
  2. Listener 是 JavaEE 的规范,就是接口
  3. 监听器的作用是,监听某种变化(一般就是对象创建/销毁, 属性变化), 触发对应方法完成相应的任务
    在这里插入图片描述
  4. JavaWeb 中的监听器(共八个), 目前最常用的是 ServletContextListener,

JavaWeb 的监听器

ServletContextListener 监听器

  1. 作用:监听 ServletContext 创建或销毁(当我们 Web 应用启动时,就会创建 ServletContext),即生命周期监听,应用场景(1)加载初始化的配置文件;比如 spring 的配置文件 (2)任务调度(配合定时器 Timer/TimerTask)
  2. 相关方法
    在这里插入图片描述
/*
 * 1. 当一个类实现了 ServletContextListener
 * 2. 该类就是一个监听器
 * 3. 该类可以监听的事件 由该类实现的监听接口决定 ,比如 实现ServletContextListener
 *    , 则该类就可以监听 ServletContext对象的创建和销毁, 以此类推
 * 4. HspServletContextListener 就是一个监听者
 * 5. 当web应用启动时,就会产生 ServletContextEvent 事件, 会调用监听器的对应事件处理方法
 *    contextInitialized, 同时会传递 事件对象
 * 6. 程序员可以通过 ServletContextEvent 事件对象,来获取需要的信息, 然后再进行业务处理
 * 7. tomcat怎么知道这个监听器存在 ? 因为我们需要在web.xml中配置
 * */
@WebListener()
public class LGQServletContextListener implements ServletContextListener {
   
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
   
        ServletContext servletContext = servletContextEvent.getServletContext();
        System.out.println("监听器监听到servletContext被创建" + servletContext);
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
   
        ServletContext servletContext = servletContextEvent.getServletContext();
        System.out.println("监听器监听到servletContext被销毁" + servletContextEvent);
    }
}

ServletContextAttributeListener 监听器

  1. 作用:监听 ServletContext 属性变化
  2. 相关方法
    在这里插入图片描述
@WebListener
public class LGQServletContextAttributeListener implements ServletContextAttributeListener {
   
    @Override
    public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
   
        System.out.println("监听到属性被创建:" + servletContextAttributeEvent.getName() + " "
                + servletContextAttributeEvent.getValue());
    }


    @Override
    public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
   
        System.out.println("监听到属性被删除:" + servletContextAttributeEvent.getName() + " "
                + servletContextAttributeEvent.getValue());
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
   
        System.out.println("监听到属性被替换:" + servletContextAttributeEvent.getName() + " "
                + servletContextAttributeEvent.getValue());
    }
}

@WebServlet(urlPatterns = "/ServletContextAttributeServlet")
public class ServletContextAttributeServlet extends HttpServlet {
   
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        ServletContext servletContext = req.getServletContext();
        servletContext.setAttribute("123", "aegf");
        servletContext.setAttribute("124", "t43wt");
        servletContext.setAttribute("123", "123");
        servletContext.removeAttribute("124");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        doPost(req, resp);

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