JavaWeb 速通Listener

简介: JavaWeb——监听器Listener 内容分享。

目录

一、Listener快速入门

       1.Listener简介 :  

       2.Java事件处理机制 :

二、ServletContextListener

       1.作用 :

       2.相关方法 :

       3.应用实例 :

三、ServletContextAttributeListener

       1.作用 :

       2.相关方法 :

       3.应用实例 :

四、HttpSessionListener

       1.作用 :

       2.相关方法 :

       3.应用实例 :

五、其他监听器

       1.HttpSessionAttributeListener :

           1.1 作用

           1.2 相关方法

       2.ServletRequestListener :

           2.1 作用

           2.2 相关方法

       3.ServletRequestAttributeListener :

           3.1 作用

           3.2 相关方法


一、Listener快速入门

      1.Listener简介 :  

       (1) Listener是 JavaWeb 的三大组件之一。JavaWeb 的三大组件分别是:Servlet 程序Listener 监听器、Filter 过滤器。

      (2) Listener 是 JavaEE 的规范,就是接口.

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

       (4) JavaWeb 中的监听器共8个, 其中最常用的是 ServletContextListener。

      2.Java事件处理机制 :

       java的事件处理采用“委派事件模型”。即当事件发生时,产生该事件的对象,并把相关信息传递给“事件的监听者”处理

       其中——

       事件源,就是指用户的操作,可以是一个按钮,也可以是一个窗口,即产生事件对象的对象;

       事件,就是承载事件源状态改变时生成的信息的事件对象,比如键盘事件,窗口事件,鼠标事件等等,该对象保存着当前事件的很多信息,比如KeyEvent对象含有当前被按下键的Code值。java.awt.event包和javax.swing.event包下定义了各种事件类型。


二、ServletContextListener

       1.作用 :

       监听ServletContext的创建或销毁( Web应用启动时创建ServletContext对象), 即生命周期监听。

       应用场景——

       (1)加载初始化的配置文件;eg : Spring的配置文件

       (2)任务调度(配合定时器 Timer/TimerTask)

       2.相关方法 :

       (1) void contextInitialized(ServletContextEvent sce) 创建ServletContext对象时触发

       (2) void contextDestroyed(ServletContextEvent sce) 销毁ServletContext对象时触发

       3.应用实例 :

               web.xml配置文件如下 :

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

image.gif

              IntroListener类代码如下 :

package listener;
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;
/** Δ注意事项 : 
    (1) 当一个类实现了ServletContextListener接口,该类就是一个监听器。
    (2) 该类可以监听的事件,由该类实现的监听接口决定,
        eg: 实现了ServletContextListener接口,就可以监听ServletContextListener对象
            的创建和销毁,以此类推。
    (3) 当Web应用启动时,会产生ServletContextEvent事件对象,会调用对应的监听器的事件
        处理方法,此处为contextInitialized(...)方法,同时会传递事件对象。
    (4) 程序员可以通过ServletContextEvent事件对象,来获取需要的信息,然后再进行相应的业务处理。
    (5) Tomcat有维护一个容器来管理Listener.
 */
public class IntroListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext servletContext = sce.getServletContext();
        System.out.println("获取到的ServletContext对象 = " + servletContext);
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        ServletContext servletContext = sce.getServletContext();
        System.out.println(servletContext + "————ServletContext对象被销毁~");
    }
}

image.gif

               运行结果 :

image.gif编辑

image.gif编辑


三、ServletContextAttributeListener

       1.作用 :

       监听 ServletContext 属性变化

       2.相关方法 :

       (1) void attributeAdded(ServletContextAttributeEvent event) 添加属性时调用

       (2) void attributeReplaced(ServletContextAttributeEvent event) 替换属性时调用

       (3) void attributeRemoved(ServletContextAttributeEvent event) 移除属性时调用

       3.应用实例 :

              web.xml配置文件如下 :

<?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>listener.IntroListener</listener-class>
    </listener>
    <listener>
        <listener-class>listener.ServletContextAttribute</listener-class>
    </listener>
</web-app>

image.gif

               ServletContextAttribute类代码如下 :

package listener;
import jakarta.servlet.ServletContextAttributeEvent;
import jakarta.servlet.ServletContextAttributeListener;
/**
 * @author : Cyan_RA9
 * @version : 21.0
 */
public class ServletContextAttribute implements ServletContextAttributeListener {
    @Override
    public void attributeAdded(ServletContextAttributeEvent scae) {
        String name = scae.getName();
        Object value = scae.getValue();
        System.out.println("监听到\"" + name + " = " + value + "\"属性被添加");
    }
    @Override
    public void attributeReplaced(ServletContextAttributeEvent scae) {
        //Δ该方法取得的属性为旧值。
        String name = scae.getName();
        Object value = scae.getValue();
        System.out.println("监听到\"" + name + " = " + value + "\"属性被修改");
    }
    @Override
    public void attributeRemoved(ServletContextAttributeEvent scae) {
        String name = scae.getName();
        Object value = scae.getValue();
        System.out.println("监听到\"" + name + " = " + value + "\"属性被删除");
    }
}

image.gif

               TestServlet类代码如下 :

package listener;
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(urlPatterns={"/test"})
public class TestServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = getServletContext();
        servletContext.setAttribute("color", "cyan");
        servletContext.setAttribute("color", "pink");
        servletContext.removeAttribute("color");
    }
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

image.gif

               运行结果 : (GIF)

image.gif编辑


四、HttpSessionListener

       1.作用 :

       监听Session对象的创建或销毁,即Session生命周期监听。

       2.相关方法 :

       (1)void sessionCreated(HttpSessionEvent se) 创建Session对象时调用

       (2) void sessionDestroyed(HttpSessionEvent se) 销毁Session对象时调用

       3.应用实例 :

               HttpSessionListener_Demo类代码如下 :

package listener;
import jakarta.servlet.http.HttpSession;
import jakarta.servlet.http.HttpSessionEvent;
import jakarta.servlet.http.HttpSessionListener;
public class HttpSessionListener_Demo implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        HttpSession session = se.getSession();
        String sessionId = session.getId();
        System.out.println("Session" + sessionId + "被创建.");
    }
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        HttpSession session = se.getSession();
        String sessionId = session.getId();
        System.out.println("Session" + sessionId + "被销毁.");
    }
}

image.gif

               在web.xml配置文件中配置该Listener,如下图所示 :

image.gif编辑

               TestServlet2类代码如下 :

package listener;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet(urlPatterns = {"/test2"})
public class TestServlet2 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        System.out.println("session = " + session);
        String threadName = Thread.currentThread().getName();
        System.out.println("令" + threadName + "线程休眠10秒钟~");
        try {
            Thread.sleep(1000 * 10);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        session.invalidate();
    }
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

image.gif

               运行结果 : (如下GIF)

image.gif编辑


五、其他监听器

       1.HttpSessionAttributeListener :

           1.1 作用

       监听 Session 属性的变化

           1.2 相关方法

       (1) void attributeAdded(ServletRequestAttributeEvent srae) 向Session对象中添加属性时

       (2) void attributeReplaced(ServletRequestAttributeEvent srae) 替换Session对象中的属性时

       (3) void attributeRemoved(ServletRequestAttributeEvent srae) 移除Session对象中的属性时

       2.ServletRequestListener :

           2.1 作用

       监听Req对象的创建或销毁,即Request对象生命周期监听。

           2.2 相关方法

       (1) void requestInitialized(ServletRequestEvent sre)创建request对象时调用;可以通过ServletRequestEvent对象获取到ServletRequest对象,然后通过多态的向下转型,得到HttpServletRequest接口的实现类对象

       (2) void requestDestroyed(ServletRequestEvent sre) 销毁request对象时调用。

       3.ServletRequestAttributeListener :

           3.1 作用

       监听Req的属性变化. (最先被调用;结合Tomcat的底层机制,Tomcat会通过HttpServletRequest对象来处理HTTP请求

           3.2 相关方法

       (1) void attributeAdded(ServletRequestAttributeEvent srae) 添加属性时

       (2) void attributeReplaced(ServletRequestAttributeEvent srae) 替换属性时

       (3) void attributeRemoved(ServletRequestAttributeEvent srae) 移除属性时

       System.out.println("END----------------------------------------------------------------------------------------------------------------------------------");

目录
相关文章
|
21天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
175 37
|
21天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
5天前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
21 2
|
4月前
|
前端开发 Java 关系型数据库
JavaWeb开发简介
JavaWeb开发简介
45 0
|
22天前
|
SQL JSON JavaScript
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
Vue 指令、生命周期、this和$、vue脚手架进行模块化开发/ElementUI框架、综合案例,element商品列表展示增删改查
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
|
3月前
|
存储 程序员
JavaWeb之Listener监听器
JavaWeb之Listener监听器
45 0
|
4月前
|
前端开发 JavaScript 算法
javaweb(四)——过滤器与监听器
javaweb(四)——过滤器与监听器
|
4月前
|
存储 JSON 前端开发
JavaWeb中用来定义统一的响应结果的result类
JavaWeb中用来定义统一的响应结果的result类
80 0
|
4月前
分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤
分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤
26 0
|
4月前
|
Web App开发 JSON Java
JavaWeb基础第五章(请求,响应与分层解耦)
JavaWeb基础第五章(请求,响应与分层解耦)
下一篇
无影云桌面