详述域对象监听器

域对象创建和销毁的事件监听器就是用来监听ServletContext、HttpSession和HttpServletRequest这三个对象的创建和销毁事件的监听器。

域对象创建时机销毁时机
ServletContextWeb服务器启动时为每个web应用程序创建相应的ServletContext对象。Web服务器关闭时为每个web应用程序销毁相应的ServletContext对象。
HttpSession浏览器开始与服务器会话时创建调用HttpSession.invalidate();超过了session的最大有效时间间隔;服务器进程被停止。
ServletRequest每次请求开始时创建每次访问结束后销毁

1、ServletContext

创建类实现ServletContextListener接口对application对象的创建,销毁进行监听,干预。

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class ApplicationListener implements ServletContextListener {
	
	public ApplicationListener() {
		System.out.println("ApplicationListener构造方法");
	}
	public void contextDestroyed(ServletContextEvent arg0) {
		System.out.println("ApplicationListener对象销毁了");
	}
	public void contextInitialized(ServletContextEvent arg0) {
		System.out.println("ApplicationListener对象创建了");
	}
}

在web.xml内加入配置

  <listener>
  	<listener-class>com.zzu.listener.ApplicationListener</listener-class>
  </listener>

启动服务器,控制台输出为:
在这里插入图片描述
关闭服务器,控制台输出为:
在这里插入图片描述

2、HttpSession

创建类实现ServletContextListener接口对application对象的创建,销毁进行监听,干预。

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class SessionListener implements HttpSessionListener {

	public SessionListener() {
		System.out.println("SessionListener构造方法");
	}
	public void sessionCreated(HttpSessionEvent arg0) {
		System.out.println("SessionListener对象创建了");

	}
	public void sessionDestroyed(HttpSessionEvent arg0) {
		System.out.println("SessionListener对象销毁了");
	}
}

在web.xml内加入配置

  <listener>
  	<listener-class>com.zzu.listener.SessionListener</listener-class>
  </listener>

启动服务器,控制台输出为:
在这里插入图片描述
只有构造方法执行,对象并没有创建,不难理解,因为session是浏览器访问页面时所创建的一个会话,只有浏览器访问本web项目中的页面时,才会创建session。
打开本web项目的页面,控制台输出:
在这里插入图片描述
我们知道浏览器关闭只是中断了和Web服务器的联系,但是session对象依然存在服务器端,如果时间超时,则Web服务器将其删除,如果服务器关闭,则将对象序列化到SESSIONS.ser文件内,服务器重新启动,则将该文件中session对象重新反序列化。。所以我们要监听session销毁则必须在web.xml中加入以下配置:

<session-config>
  	<session-timeout>1</session-timeout>
  </session-config>

等待1分钟,控制台输出:
在这里插入图片描述

3、ServletRequest

创建类实现ServletContextListener接口对application对象的创建,销毁进行监听,干预。

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;

public class RequestListener implements ServletRequestListener {

	public RequestListener() {
		System.out.println("RequestListener构造方法");
	}
	public void requestDestroyed(ServletRequestEvent arg0) {
		System.out.println("request对象销毁了");

	}
	public void requestInitialized(ServletRequestEvent arg0) {

		System.out.println("request对象创建了");
	}
}

在web.xml内加入配置

  <listener>
  	<listener-class>com.zzu.listener.RequestListener</listener-class>
  </listener>

启动服务器,控制台输出为:
在这里插入图片描述
只有构造方法执行,对象并没有创建,不难理解,因为此时没有请求发出,打开本web项目的页面,控制台输出:
在这里插入图片描述

执行顺序

执行顺序与web.xml中配置顺序有关,配置在前执行在前。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值