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>
效果图:
其他的移除和替代都是类似的,在此只介绍方法,具体的实现可以自己进行测试。加油!
代码还是要自己敲的,嘻嘻。
后记:
监听器这一部分的知识可以当做了解,听大佬说在实际开发中用的不是太多,所以先了解了一些基础的知识,之后遇到相关的问题再进行深究,奥利给!