1.监听器知识点
简单来说,监听器是监听一个对象发生的什么事,然后监听器做出相应的反应。这就是我们的监听器,用我们专业的话来说:监听器负责监听事件源的事件。
事件源:发生事件的源头,监听器需要监听的对象。
事件:事件源上发生的动作,监听器监听的内容。
监听器:负责监听事件源的对象。
在我们的javaweb中,监听器主要负责监听这三个对象:request,session,ServletContext,接下来就是根据监听这三个对象所承担的责任不同而对监听器进行的一个分类。
2.监听器的分类
a.监听request、ServletContext 、session对象的创建和销毁
ServletRequestListener、ServletContextListener、HttpSessionListener
b.监听request、session、ServletContext 对象存放的数据变化情况
ServletContextAttributeListener 、HttpSessionAttributeListener 、ServletRequestAttributeListener
c.监听session中保存的JavaBean的状态
HttpSessionBindingListener
3.工程说明
本次工程的目标是学习监听器,掌握监听三个对象的创建和销毁方法。
三个对象:rquest,session,ServletContext
实现的接口:ServletRequestListener,HttpSessionListener,ServletContextListener
工程的大致步骤:
1.自定义实现三个监听器的类
2.使用注解的方法注册监听器
3.部署工程并运行,在控制台会输出相应的信息
4.自定义实现三个监听器的类
4.1 MyServletRequestListener
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
/*
* 2018.5.15
* @author Dragon
* 监听request对象的创建和销毁的监听器
*/
@WebListener
public class MyServletRequestListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent arg0) {
System.out.println("MyServletRequestListener--------requestDestroyed");
}
@Override
public void requestInitialized(ServletRequestEvent arg0) {
System.out.println("MyServletRequestListener--------requestInitialized");
}
}
4.2 MyHttpSessionListener
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/*
* 2018.5.15
* @author Dragon
* 监听session对象的创建和销毁的监听器
*/
@WebListener
public class MyHttpSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent arg0) {
System.out.println("MyHttpSessionListener--------sessionCreated");
}
@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
System.out.println("MyHttpSessionListener--------sessionDestroyed");
}
}
4.3 MyServletContextListener
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/*
* 2018.5.15
* @author Dragon
* 监听application对象的创建和销毁的监听器
*/
@WebListener
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("MyServletContextListener--------contextDestroyed");
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("MyServletContextListener--------contextInitialized");
}
}
以上三个自定义的类都实现了相应的接口,然后在对应的方法中向控制台打印相应的信息。除此之外,上面的监听器中采用注解的方式进行了注册!
@WebListener
所以监听器的创建和注册的任务都完成了,接下来就是部署工程跑一跑偶看我们的运行结果进行分析。
5.结果分析
可以知道,我们的ServletContext对象是application,仅此一个,随着服务器的生而生,服务器亡而亡
2.然后访问我们的工程,可以看到这样的信息输出:
MyServletRequestListener——–requestInitialized
MyHttpSessionListener——–sessionCreated
MyServletRequestListener——–requestDestroyed
从上面的输出可以看出来request对象先是被创建了,然后接着是session对象被创建,
最后让我们的request对象又销毁了,但是session对象没有被销毁。
这是因为,request是用户的请求,请求就是一瞬间的过程
而session表示的是我们的会话窗口,就像打开一个淘宝网页一样,你没有完全关闭它,它是不会结束的
session的结束取决于session的生命周期
6.下一阶段的学习
ok!很完美的走了一次监听器是如何监听我们这三个对象的创建和销毁的过程。
接下来继续向前学习~
下一阶段:监听request、session、ServletContext 对象存放的数据变化情况