Listener 监听器

本文介绍Servlet规范中的监听器,包括监听器的作用、如何编写监听器以及配置方式。详细讲解了不同类型的监听器如HttpSessionListener、ServletContextListener等,并提供示例代码。

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

概述:Servlet规范中定义的一种特殊的类,作用是监听容器当中产生的一些事件并进行相应的处理

容器产生的事件主要是以下两大类:

1.生命周期相关的事件,指的是当容器创建或者销毁Request、Session、ServletContext等对象时产生的事件

2.绑定事件,指的是当调用Request、Session、ServletContext对象的setAttribute、removeAttribute时产生的事件

a)如何写监听器:

1)写一个Java类实现特定的监听器接口类(依据要监听的事件类型)

2)在接口声明的方法中,实现监听的逻辑

  3)配置web.xml

b)ServletContext接口:

Web服务器在启动时,会位每一个已经部署好的应用程序创建唯一的一个ServletContext实例,该实例会一直存在,除非服务器关闭或者应用被删除

获取ServletContext实例的方法:

1)GenericServlet .getServletContext()

2)HttpSession.getServletContext()

3)ServletConfig.getServletContext()

全局初始化参数:web.xml      -- 可被所有的Servlet共享

<context-param>
	<param-name>version</param-name>
        <param-value>20141106</param-value>
</context-param>

获取参数:String ServletContext.getInitParameter(String name)


监听器的配置:在<context-param>之后,<servlet>之前。<filter>在<listener>之后,<servlet>之前

  <listener>
  	<listener-class>com.Listener</listener-class>
  </listener>

实例代码:

package com;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * @author Eleven
 * 对Session的监控,当有用户访问到达,容器创建Session来处理请求,这时便促发该监听
 */
public class Listener1 implements HttpSessionListener{

	private int count = 0;
	/* (non-Javadoc)
	 *  记录用户登录数量
	 * @see javax.servlet.http.HttpSessionListener#sessionCreated(javax.servlet.http.HttpSessionEvent)
	 * @Descrip:   (描述)	
	 * @Author :   Eleven
	 * @Date   :   2014-11-6
	 */
	public void sessionCreated(HttpSessionEvent se) {
		count++;
		HttpSession session = se.getSession();//获取会话
		ServletContext sctx = session.getServletContext();//获取容器装载对象
		sctx.setAttribute("count", count);//共享至容器
	}
	public void sessionDestroyed(HttpSessionEvent se) {
		count--;
		HttpSession session = se.getSession();//获取会话
		ServletContext sctx = session.getServletContext();//获取容器装载对象
		sctx.setAttribute("count", count);//共享至容器
	}

}
/**
 * @author Eleven
 * 对Session的属性进行监听
 */
class Listener implements HttpSessionAttributeListener{
	@Override
	public void attributeAdded(HttpSessionBindingEvent arg0) {
	}

	@Override
	public void attributeRemoved(HttpSessionBindingEvent arg0) {
	}

	@Override
	public void attributeReplaced(HttpSessionBindingEvent arg0) {
	}
} 
/**
 * @author Eleven
 * 对Context的属性进行监听
 */
class LIstener2 implements ServletContextAttributeListener{

	@Override
	public void attributeAdded(ServletContextAttributeEvent arg0) {
	}

	@Override
	public void attributeRemoved(ServletContextAttributeEvent arg0) {
	}

	@Override
	public void attributeReplaced(ServletContextAttributeEvent arg0) {
	}
	
}
/**
 * @author Eleven
 * 监听Context对象
 */
class Listener3 implements ServletContextListener{

	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
	}
	
} 



学习笔记,望读者赐金言同进



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值