Tomcat 8.x 《应用》,监听器(生命周期监听器、事件监听器)

本文详细介绍了Servlet中的多种监听器,包括事件监听器和生命周期监听器。涵盖了HttpSessionAttributeListener、HttpSessionIdListener、ServletContextAttributeListener等,解析了它们的触发条件及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


以下监听可在WEB-INF/web.xml文件中配置

	<listener>
	    <listener-class>cn.java.listener.event.MyHttpSessionAttributeListener</listener-class>
	</listener>


监听器接口列表

		// 事件监听器
//		javax.servlet.ServletContextAttributeListener;
//		javax.servlet.ServletRequestAttributeListener;
//		javax.servlet.HttpSessionAttributeListener;
//		javax.servlet.ServletRequestListener;
//		javax.servlet.HttpSessionIdListener;
		
		// 生命周期监听器
//		 javax.servlet.ServletContextListener;
//		 javax.servlet.http.HttpSessionListener;

事件监听器


Session属性修改,事件监听器

package cn.java.listener.event;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class MyHttpSessionAttributeListener implements HttpSessionAttributeListener {

	/**
	 * 添加属性的时候触发
	 * 触发地点:request.getSession().setAttribute("key1","value1");
	 */
	@Override
	public void attributeAdded(HttpSessionBindingEvent event) {
//		event.getSource() === event.getSession() == org.apache.catalina.session.StandardSessionFacade
//		event.getName() == "key1"
//		event.getValue() == "value1"
	}

	/**
	 * 删除属性的时候触发
	 * 触发地点:request.getSession().removeAttribute("key1")
	 */
	@Override
	public void attributeRemoved(HttpSessionBindingEvent event) {
//		event.getSource() === event.getSession() == org.apache.catalina.session.StandardSessionFacade
//		event.getName() == "key1"
//		event.getValue() == "旧值"
	}

	/**
	 * 替换、修改属性的时候触发
	 * 触发地点:request.getSession().setAttribute("key1","value1_new");
	 */
	@Override
	public void attributeReplaced(HttpSessionBindingEvent event) {
//		event.getSource() === event.getSession() == org.apache.catalina.session.StandardSessionFacade
//		event.getName() == "key1"
//		event.getValue() == "旧值"
	}

}

SessionID修改时,事件监听器

package cn.java.listener.event;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionIdListener;

public class MyHttpSessionIdListener implements HttpSessionIdListener {

	/**
	 * 修改sessionId的时候触发
	 * org.apache.catalina.session.StandardSession.tellChangedSessionId(....);
	 * 触发地点:request.changeSessionId();
	 */
	@Override
	public void sessionIdChanged(HttpSessionEvent event, String oldSessionId) {
//		event.getSession() === event.getSource()  === org.apache.catalina.session.StandardSessionFacade
	}

}

ServletContext上下文属性修改,事件监听器

package cn.java.listener.event;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;

public class MyServletContextAttributeListener implements ServletContextAttributeListener {

	
	/**
	 * 添加属性的时候触发
	 * 触发地点:request.getServletContext().setAttribute("key1","value1");
	 */
	@Override
	public void attributeAdded(ServletContextAttributeEvent event) {
//		event.getServletContext() == event.getSource() == org.apache.catalina.core.ApplicationContextFacade  
//		event.getName() == "key1"
//		event.getValue() == "value1"
	}

	
	/**
	 * 删除属性的时候触发
	 * 触发地点:request.getServletContext().removeAttribute("key1")
	 */
	@Override
	public void attributeRemoved(ServletContextAttributeEvent event) {
//		event.getServletContext() == event.getSource() == org.apache.catalina.core.ApplicationContextFacade  
//		event.getName() == "key1"
//		event.getValue() == "旧值"
	}


	/**
	 * 替换、修改属性的时候触发
	 * 触发地点:request.getServletContext().setAttribute("key1","value1_new");
	 */
	@Override
	public void attributeReplaced(ServletContextAttributeEvent event) {

//		event.getServletContext() == event.getSource() == org.apache.catalina.core.ApplicationContextFacade  
//		event.getName() == "key1"
//		event.getValue() == "旧值"
	}

}

request属性修改,事件监听器

package cn.java.listener.event;

import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;

public class MyServletRequestAttributeListener implements ServletRequestAttributeListener {

	/**
	 * 添加属性的时候触发
	 * 触发地点:request.setAttribute("key1","value1");
	 */
	@Override
	public void attributeAdded(ServletRequestAttributeEvent event) {
//		event.getServletContext() == event.getSource() == org.apache.catalina.core.ApplicationContextFacade
//		event.getName() == "key1"
//		event.getValue() == "value1"
//		event.getServletRequest() == org.apache.catalina.connector.RequestFacade == request

	}

	/**
	 * 删除属性的时候触发
	 * 触发地点:request.removeAttribute("key1")
	 */
	@Override
	public void attributeRemoved(ServletRequestAttributeEvent event) {
//		event.getServletContext() == event.getSource() == org.apache.catalina.core.ApplicationContextFacade
//		event.getName() == "key1"
//		event.getValue() == "旧值"
//		event.getServletRequest() == org.apache.catalina.connector.RequestFacade == request
	}
	
	/**
	 * 替换、修改属性的时候触发
	 * 触发地点:request.setAttribute("key1","value1_new");
	 */
	@Override
	public void attributeReplaced(ServletRequestAttributeEvent event) {
//		event.getServletContext() == event.getSource() == org.apache.catalina.core.ApplicationContextFacade
//		event.getName() == "key1"
//		event.getValue() == "旧值"
//		event.getServletRequest() == org.apache.catalina.connector.RequestFacade == request
	}

}

request创建、销毁,事件监听器

package cn.java.listener.event;

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

public class MyServletRequestListener implements ServletRequestListener {

	/**
	 * 请求销毁
	 * 触发地点:org.apache.catalina.core.StandardHostValve.invoke(Request request, Response response)
	 */
	@Override
	public void requestDestroyed(ServletRequestEvent event) {
//		event.getServletContext() == event.getSource() == org.apache.catalina.core.ApplicationContextFacade  
//		event.getServletRequest() == org.apache.catalina.connector.Request
		
	}

	/**
	 * 请求初始化
	 * 触发地点:org.apache.catalina.core.StandardHostValve.invoke(Request request, Response response)
	 */
	@Override
	public void requestInitialized(ServletRequestEvent event) {
//		event.getServletContext() == event.getSource() == org.apache.catalina.core.ApplicationContextFacade  
//		event.getServletRequest() == org.apache.catalina.connector.Request
	}

}

生命周期监听器

session创建、销毁,生命周期监听器

package cn.java.listener.lifecycle;

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

/**
 * Session的生命周期
 * @author Administrator
 *
 */
public class MyHttpSessionListener implements HttpSessionListener {


	/**
	 * 触发地点1:
	 * 		request.changeSessionId();
	 * 		org.apache.catalina.session.StandardSession.setId(String id)
	 * 		org.apache.catalina.session.StandardSession.tellNew()
	 */
	@Override
	public void sessionCreated(HttpSessionEvent event) {
//		event.getSource() == event.getSource() ==  org.apache.catalina.session.StandardSessionFacade
	}

	/**
	 * 触发地点:org.apache.catalina.session.StandardSession.expire(boolean notify)
	 */
	@Override
	public void sessionDestroyed(HttpSessionEvent event) {
//		event.getSource() == event.getSource() ==  org.apache.catalina.session.StandardSessionFacade
	}

}

ServletContext上下文创建、销毁,声明周期监听器

package cn.java.listener.lifecycle;

import javax.servlet.ServletContextEvent;

/**
 * 服务器启动、关闭
 * 
 * 启动上下文、或者销毁上下文的时候触发
 * @author Administrator
 *
 */
public class MyServletContextListener implements javax.servlet.ServletContextListener {

	/**
	 * 触发地点:org.apache.catalina.core.StandardContext.startInternal()
	 */
	@Override
	public void contextInitialized(ServletContextEvent event) {
//		event.getSource() == event.getServletContext() == org.apache.catalina.core.ApplicationContextFacade  
	}
	
	/**
	 * 触发地点:org.apache.catalina.core.StandardContext.stopInternal()
	 */
	@Override
	public void contextDestroyed(ServletContextEvent event) {
//		event.getSource() == event.getServletContext() == org.apache.catalina.core.ApplicationContextFacade  

	}

}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值