欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaWeb三大组件之 监听器 -- Listener入门

程序员文章站 2022-06-18 11:19:37
...

前言:

JavaWeb中的监听器与 Java 图形化界面中的监听器类似,比如我们在点击一个按钮后,想对应的显示一些内容,这时候就需要有个事件监听器监听这个按钮,一旦这个按钮被点击,就触发相应的时间。
如果上面的解释不够清晰(深知自身的表达不足),来看一个生活中的例子:
现在有个神偷准备去盗一把,但是警察叔叔早就开始监视他了,一旦神偷将夜明珠偷到,警察叔叔立马逮捕(就等你小子落网啦)。
在这个案例中:
事件源: 小偷。- - 被监听的对象
事件:偷东西。 - - 什么时候 action
监听器:警察叔叔。 - - 监听者
监听器中的方法: 抓捕。

监听器的实现:

1、它是一个接口,具体内容由我们自己实现
2、它需要进行注册(告诉警察叔叔有小偷)。
3、监听器中的方法会在特殊事件发生时进行调用。

JavaWeb中的监听器:

事件源: 三大域(需要监听的对象)

ServletContext:

监听者:
服务器启动关闭时会启动。-- 一般用于初始化。
生命周期监听:ServletContextListener,它有两个方法,一个在出生时调动,在死亡时调用。

属性监听:ServletContextAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个在移除属性时调用。

HttpSession:

监听者:
启动关闭 Session 时会启动。
生命周期监听:HttpSessionListener,它有两个方法,一个在出生时调动,在死亡时调用。

属性监听:HttpSessionAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个在移除属性时调用。

ServletRequest:

监听者:
启动关闭Request是会启动。(使用较频繁)
生命周期监听:ServletRequestListener,它有两个方法,一个在出生时调动,在死亡时调用。

属性监听:ServletRequestAttributeListener,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个在移除属性时调用。

JavaWeb 中编写监听器:

​ 写一个监听器类: 要求必须去实现某个监听器接口

​ 注册: 通过注册的方式或者 配置 web.xml 文件进行注册

案例一:生命周期监听:ServletContextListener:

AListener.java - - 监听 ServletContext:

package rj.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

/**
 *  ServletContext 生命周期监听
 *  可以在这个监听器中放一些在 tomcat 启动时就要完成的代码。
 *
 * */


// 通过注解的方式进行注册(只需要将监听器的 name 放入即可)
@WebListener("AListener")
public class AListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        // 服务器启动时就会调用,这个比较常用
        System.out.println("哇,我来啦!");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        // 服务器关闭时进行调用
        System.out.println("不好,我要挂了!");
    }
}

index.jsp 进行测试:

<%--
  Created by IntelliJ IDEA.
  User: Acer
  Date: 2020/5/31
  Time: 15:58
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>

        <form action="Demo04/AServlet" method="post">
          <input type="text" name="username">
            <input type="submit" value="登录">
        </form>

  </body>
</html>

效果图:

JavaWeb三大组件之 监听器 -- Listener入门
关于 Session和Request 的监听器使用都是类似的,在此不再多加赘述,有兴趣的小伙伴可以自行测试。

案例二: 属性监听:ServletContextAttributeListener

AttributeListener.java – 对属性的操作进行监听

package rj.listener;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.annotation.WebListener;

/**
 *  属性监听,有三个方法需要实现
 *
 *
 * */

// 注解方式进行注册
@WebListener("AttributeListener")
public class AttributeListener implements ServletContextAttributeListener {

    // 增加属性
    @Override
    public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {

        System.out.println("您向 Application 中添加了"+servletContextAttributeEvent.getName() + ",值为:"+servletContextAttributeEvent.getValue());
        // 获取监听的对象(小偷)
        System.out.println(servletContextAttributeEvent.getServletContext());

    }

    // 移除属性
    @Override
    public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {

    }

    // 替换属性
    @Override
    public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {

    }
}

index.jsp – 添加属性进行测试

<%--
  Created by IntelliJ IDEA.
  User: Acer
  Date: 2020/5/31
  Time: 15:58
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>


        <%
            application.setAttribute("xxx","XXX");
        %>

  </body>
</html>

效果图:
JavaWeb三大组件之 监听器 -- Listener入门
其他的移除和替代都是类似的,在此只介绍方法,具体的实现可以自己进行测试。加油!
代码还是要自己敲的,嘻嘻。

后记:

监听器这一部分的知识可以当做了解,听大佬说在实际开发中用的不是太多,所以先了解了一些基础的知识,之后遇到相关的问题再进行深究,奥利给!

相关标签: JavaWeb