JavaWeb-03-Servlet-13-监听器接口

JavaWeb-03-Servlet-13-监听器接口

1.介绍

  1. 【位置】:监听器接口来自于Servlet规范下,共有8个接口。具体位置在Tomcat下的servlet-api.jar
  2. 【监听器接口实现类】:Http服务器所提供的jar包中没有监听器接口的实现类,需要由开发人员手动实现。
  3. 【监听器接口一般用于】:
    1. 作用域对象生命周期变化时刻
    2. 作用域对象共享数据变化时刻

2.作用域对象

  1. 【定义】:在Servlet规范中认为,在服务端内存中可以在某些条件下为多个Servlet之间提供数据共享方案的对象,就可以被称为作用域对象。

  2. 【Servlet规范下的作用域对象】:

    1. ServletContext:全局作用域对象
    2. HttpSession:会话作用域对象
    3. HttpServletRequest:请求作用域对象

    Cookie虽然也能实现多个Servlet之间的数据共享,但是Cookie位于客户端浏览器内存或硬盘中,并不在服务端中。所以在Servlet规范中,并没有把Cookie当作作用域对象来看。

3.监听器接口实现类开发规范三步骤

  1. 根据监听的实际情况,选择对应监听器接口进行实现
  2. 重写监听器接口声明的【监听事件处理方法】
  3. 在web.xml文件中将监听器接口实现类注册到Http服务器中

4.ServletContextListener接口

4.1作用

通过这个接口合法地监听全局作用域对象【被初始化时刻】以及【被销毁时刻】。

4.2监听事件处理方法

1.contextIninlized():在全局作用域对象被Http服务器初始化时被调用

public void contextIninlized();

2.contextDestroy():在全局作用域对象被Http服务器销毁时触发调用

public void contextDestroy();

4.3演示

本次演示的是监听全局作用域对象,而该对象是由Tomcat服务器负责创建的。所以我们只需要编写监听器接口实现类即可。

1.新建一个网站MyWeb,创建一个ServletContextListener接口实现类:OneListener

package com.tsccg.listener;

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

/**
 * @Author: TSCCG
 * @Date: 2021/08/20 16:23
 */
public class OneListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("全局作用域对象被创建");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("全局作用域对象被销毁");
    }
}

2.在/web/WEB_INF/web.xml文件里将监听器接口实现类注册到Tomcat服务器上

<?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.tsccg.listener.OneListener</listener-class>
    </listener>
</web-app>

3.发布网站,开启服务器

4.关闭服务器

5.ServletContextAttributeListener接口

5.1作用

通过这个接口合法地监听全局作用域对象中【共享数据发生变化的时刻】

5.2监听事件处理方法

public void attributeAdded();//在全局作用域对象中共享数据增加时触发调用
public void attributeReplaced();//在共享数据更新时触发调用
public void attributeRemove();//在共享数据被删除时触发调用

5.3全局作用域对象中共享数据发生改变时刻

ServletContext application = request.getServletContext();
application.setAttribute("key1",10);//新增共享数据
application.setAttribute("key1",20);//更新共享数据
application.removeAttribute("key1");//删除共享数据

5.4演示

新建一个网站MyWeb,创建一个Servlet接口实现类OneServlet,在该实现类里对全局作用域对象中的共享数据进行增改删操作。

再创建一个ServletContextAttributeListener接口实现类用于监听全局作用域对象中的共享数据的改变。

OneServlet:

package com.tsccg.controller;

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

/**
 * @Author: TSCCG
 * @Date: 2021/08/20 17:02
 */
public class OneServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext application = request.getServletContext();
        application.setAttribute("key1",10);//增加共享数据
        application.setAttribute("key1",20);//更新共享数据
        application.removeAttribute("key1");//删除共享数据

    }
}

OneListener:

package com.tsccg.listener;

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

/**
 * @Author: TSCCG
 * @Date: 2021/08/20 17:09
 */
public class OneListener implements ServletContextAttributeListener {
    @Override
    public void attributeAdded(ServletContextAttributeEvent scae) {
        System.out.println("共享数据增加了");
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent scae) {
        System.out.println("共享数据删除了");
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent scae) {
        System.out.println("共享数据更新了");
    }
}

将Servlet接口实现类和ServletContextAttributeListener接口实现类注册到Tomcat服务器上后,发布网站。

在对全局作用域中共享数据进行操作的位置打上断点。

开启服务器,通过浏览器请求访问OneServlet。

posted @ 2021-08-20 19:51  TSCCG  阅读(109)  评论(0编辑  收藏  举报