JavaWeb——域对象监听器

域对象创建和销毁

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

ServletContextListener接口

  • ServletContextListener接口用于监听ServletContext对象的创建和销毁。
  • ServletContext对象被创建后调用contextInitialized(ServletContextEvent sce)方法。
  • ServletContext对象被销毁前调用contextDestroyed(ServletContextEvent sce)方法。
  • ServletContextEvent类中可以通过getServletContext()获取ServletContext
  • ServletContextListener实现类代码变化,则重新加载销毁

代码实现

创建ApplicationListener实现ServletContextListener接口实现接口中的方法

public class ApplicationListener implements ServletContextListener {
	public ApplicationListener() {
		System.out.println("ApplicationListener构造方法");
	}
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		System.out.println("contextInitialized");
	}
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("contextDestroyed");
	}
}

在部署描述符web.xml中配置监听器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>listener</display-name>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<listener>
		<listener-class>com.dz.listerner.ApplicationListener</listener-class>
	</listener>
	<session-config>
		<session-timeout>1</session-timeout>
	</session-config>
</web-app>
  • 启动服务器之后
    结果
  • 正常关闭服务器之后
    结果

HttpSessionListener接口

  • HttpSessionListener接口用于监听HttpSession对象的创建和销毁。
  • HttpSession对象被创建后调用sessionCreated (HttpSessionEvent sce)方法。
  • HttpSession对象被销毁前调用sessionDestroyed(HttpSessionEvent sce)方法。

代码实现

  • SessionListener 类实现HttpSessionListener接口
public class SessionListener implements HttpSessionListener {
    public SessionListener() {
    	System.out.println("SessionListener构造方法");
    }
    public void sessionCreated(HttpSessionEvent se)  { 
    	System.out.println("sessionCreated");
    }
    public void sessionDestroyed(HttpSessionEvent se)  { 
    	System.out.println("sessionDestroyed");
    }
}
  • 部署描述符,把session的过期时间为1分钟
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>listener</display-name>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<listener>
		<listener-class>com.dz.listerner.ApplicationListener</listener-class>
	</listener>
		<listener>
		<listener-class>com.dz.listerner.SessionListener</listener-class>
	</listener>
	<session-config>
		<session-timeout>1</session-timeout>
	</session-config>
</web-app>
  • 启动服务器
    在这里插入图片描述
  • 访问页面
    在这里插入图片描述
  • 控制台输出信息,这里是执行了sessionCreated方法

结果

  • 一分钟之后,执行了sessionDestroyed方法
    在这里插入图片描述
  • 正常关闭服务器
    在这里插入图片描述

ServletRequestListener接口

  • 用于监听request对象的创建和销毁。
    • public void requestInitiallized(ServletRequestEvent event):ServletRequest对象被创建后调用;
    • public void requestDestroyed(ServletRequestEvent event):ServletRequest对象被销毁前调用。
public class RequestListener implements ServletRequestListener {
    public RequestListener() {
    	System.out.println("RequestListener构造方法");
    }
    public void requestDestroyed(ServletRequestEvent sre)  { 
    	System.out.println("requestDestroyed");
    }
    public void requestInitialized(ServletRequestEvent sre)  { 
    	System.out.println("requestInitialized");
    }
}
  • 开启服务器

在这里插入图片描述* 访问http://localhost/listener/
访问

  • 控制台输出

在这里插入图片描述

  • 一分钟之后
    结果
  • 停止服务器之后
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值