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

前言:

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>

效果图:

在这里插入图片描述
关于 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>

效果图:
在这里插入图片描述
其他的移除和替代都是类似的,在此只介绍方法,具体的实现可以自己进行测试。加油!
代码还是要自己敲的,嘻嘻。

后记:

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

潘小蓝

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

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

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

打赏作者

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

抵扣说明:

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

余额充值