详述域对象监听器

1、监听器

监听器:专门用于对其它对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。

2、Servlet监听器

Servlet监听器:Servlet规范中定义的一种特殊类,用于监听web应用程序中的ServletContext、HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。

3、Servlet监听器分类:

按监听的事件类型Servlet监听器可分为如下三种类型:
1,域对象监听器:监听域对象自身的创建和销毁的事件监听器;
2,属性监听器:监听域对象中的属性的增加和删除的事件监听器;
3,HttpSession域内对象监听器:监听绑定到HttpSession域中的某个对象的事件监听器;

4、编写Servlet监听器:

Servlet规范为每种事件监听器都定义了相应的接口,开发人员编写的事件监听器程序只需实现这些接口,web服务器根据用户编写的事件监听器所实现的接口把它注册到相应的被监听对象上。
一些Servlet事件监听器需要在web应用程序的web.xml文件中进行注册,一个web.xml文件中可以注册多个Servlet事件监听器,web服务器按照它们在web.xml文件中的注册顺序来加载和注册这些Servlet事件监听器。
Servlet事件监听器的注册和调用过程都是由web容器自动完成的,当发生被监听的对象被创建、修改或销毁事件时,web容器将调用与之相关的Servlet事件监听器对象的相关方法,开发人员在这些方法中编写的事件处理代码即被执行。
由于一个web应用程序只会为每个事件监听器创建一个对象,有可能出现多个线程同时调用同一个事件监听器对象的情况,所以,在编写事件监听器类时,应考虑多线程安全的问题。

5、监听域对象的创建和销毁

域对象创建和销毁的事件监听器就是用来监听ServletContext、HttpSession和HttpServletRequest这三个对象的创建和销毁事件的监听器。
域对象的创建和销毁时机:
在这里插入图片描述

ServletContextListener接口

ServletContextListener接口用于监听ServletContext对象的创建和销毁。
ServletContext对象被创建后调用contextInitialized(ServletContextEvent sce)方法。
ServletContext对象被销毁前调用contextDestroyed(ServletContextEvent sce)方法。
ServletContextListener实现类代码变化,则重新加载销毁
实现:
实现ServletContextListener接口,并实现其中两个抽象方法

package demo;

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

public class ApplicationListener implements ServletContextListener {

    public ApplicationListener() {
    	System.out.println("Application监听器被创建");
    }

	public void contextDestroyed(ServletContextEvent arg0) {
		System.out.println("Application对象销毁");
	}

	public void contextInitialized(ServletContextEvent arg0) {
		System.out.println("Application对象创建");
	}	
}

HttpSessionListener接口

HttpSessionListener接口用于监听HttpSession对象的创建和销毁。
HttpSession对象被创建后调用sessionCreated (HttpSessionEvent sce)方法。
HttpSession对象被销毁前调用sessionDestroyed(HttpSessionEvent sce)方法。
实现:
实现HttpSessionListener接口,并实现其中两个抽象方法.

package demo;

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

public class SessionListener implements HttpSessionListener {

    public SessionListener() {
       System.out.println("Session监听器被创建");
    }

	public void sessionCreated(HttpSessionEvent arg0) {
		System.out.println("session会话创建");
	}

	public void sessionDestroyed(HttpSessionEvent arg0) {
		System.out.println("session会话销毁");
	}
}

ServletRequestListener接口

ServletRequestListener接口用于监听request对象的创建和销毁。
public void requestInitiallized(ServletRequestEvent event):ServletRequest对象被创建后调用;
public void requestDestroyed(ServletRequestEvent event):ServletRequest对象被销毁前调用。
关闭浏览器,并不意味着session被销毁,还可以通过sessionid找到服务器中的session对象。
实现:
实现ServletRequestListener接口,并实现其中两个抽象方法

package demo;

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对象创建");
	}
}

实现接口后,启动服务器,开始创建监听器对象,Application对象接着被创建
在这里插入图片描述
接着创建index.jsp文件,访问这个文件,一次请求开启,Request对象被创建;一次会话开启,session对象被创建;服务器端返回数据后,一次请求结束,Request对象被销毁。
在这里插入图片描述
session会话销毁时间:
浏览器关闭只是中断了和Web服务器的联系,但是session对象依然存在服务器端,如果时间超时,则Web服务器将其删除,如果服务器关闭,则将对象序列化到SESSIONS.ser文件内,服务器重新启动,则将该文件中session对象重新反序列化。
在web.xml文件中配置如下信息:
注意更改web.xml文件需要重启服务器

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

设置session会话结束时间一分钟,一分钟后session会话自动销毁。
在这里插入图片描述
Application对象销毁时间:
正常关闭服务器时,Application对象被销毁。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值