【监听器篇】1.监听request、ServletContext 、session对象的建立和销毁

1.监听器知识点

  简单来讲,监听器是监听一个对象发生的什么事,而后监听器作出相应的反应。这就是咱们的监听器,用咱们专业的话来讲:监听器负责监听事件源的事件。java

  事件源:发生事件的源头,监听器须要监听的对象。web

  事件:事件源上发生的动做,监听器监听的内容。服务器

  监听器:负责监听事件源的对象。session

  在咱们的javaweb中,监听器主要负责监听这三个对象:request,session,ServletContext,接下来就是根据监听这三个对象所承担的责任不一样而对监听器进行的一个分类。app

2.监听器的分类

 a.监听request、ServletContext 、session对象的建立和销毁ide

        ServletRequestListener、ServletContextListener、HttpSessionListener
 b.监听request、session、ServletContext 对象存放的数据变化状况
        ServletContextAttributeListener 、HttpSessionAttributeListener 、ServletRequestAttributeListener
 c.监听session中保存的JavaBean的状态
        HttpSessionBindingListener

3.工程说明

  本次工程的目标是学习监听器,掌握监听三个对象的建立和销毁方法。学习

  三个对象:rquest,session,ServletContext.net

  实现的接口:ServletRequestListener,HttpSessionListener,ServletContextListenercode

工程的大体步骤:对象

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.结果分析

1.在咱们启动服务器的时候,能够找到控制台输出了:MyServletContextListener--------contextInitialized
    能够知道,咱们的ServletContext对象是application,仅此一个,随着服务器的生而生,服务器亡而亡
2.而后访问咱们的工程,能够看到这样的信息输出:
  MyServletRequestListener--------requestInitialized
  MyHttpSessionListener--------sessionCreated
  MyServletRequestListener--------requestDestroyed
  从上面的输出能够看出来request对象先是被建立了,而后接着是session对象被建立,
  最后让咱们的request对象又销毁了,可是session对象没有被销毁。
  这是由于,request是用户的请求,请求就是一瞬间的过程
  而session表示的是咱们的会话窗口,就像打开一个淘宝网页同样,你没有彻底关闭它,它是不会结束的
  session的结束取决于session的生命周期

6.下一阶段的学习

ok!很完美的走了一次监听器是如何监听咱们这三个对象的建立和销毁的过程。接下来继续向前学习~

下一阶段:监听request、session、ServletContext 对象存放的数据变化状况