JavaWeb笔记30-监听器

本文详细介绍了Servlet中的监听器,包括初始化销毁监听器和属性变更监听器的实现方式与配置方法,并通过示例展示了如何使用监听器来跟踪request、session及application三个范围对象的状态变化。

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

监听器
四个范围对象:PageContext、request、session、application
监听器监听的对象主要是后三个:request、session、application
三个监听对象有各自的一个初始化销毁操作监听器接口:
request:ServletRequestListener
session:HttpSessionListener
application:ServletContextListener

监听对象的创建和销毁
每个监听器各自提供了两个方法:监听开始和监听结束

public class ContextSessionRequestListner implements ServletRequestListener,HttpSessionListener,ServletContextListener{

	public void contextDestroyed(ServletContextEvent sce) { //方法参数即监听对象
		//application(ServletContext)-创建(创建完毕后触发)
		System.out.println("销毁-application:"+sce);
	}

	public void contextInitialized(ServletContextEvent sce) {
		//application(ServletContext)-销毁	
		System.out.println("创建-application:"+sce);
	}

	public void sessionCreated(HttpSessionEvent se) {
		//session
		System.out.println("创建-session:"+se);
	}

	public void sessionDestroyed(HttpSessionEvent se) {
		//session
		System.out.println("销毁-session:"+se);
	}

	public void requestDestroyed(ServletRequestEvent sre) {
		//request
		System.out.println("销毁-request:"+sre);
	}

	public void requestInitialized(ServletRequestEvent sre) {
		//request
		System.out.println("创建-request:"+sre);
	}

监听器配置

  <!--配置监听器路径-->
  <listener>
  	<listener-class>my.student.listner.ContextSessionRequestListner</listener-class>
  </listener>

ServletContextListener在servlet容器启动时自动创建,在容器关闭时自动销毁

监听对象中属性的变更
监听属性变更的接口:
request:ServletRequestAttributeListener
session:HTTPSessionAttributeListener
application:ServletContextAttributListener
编写接口

public class ContextSessionRequestAttributeListener implements ServletContextAttributeListener,
															HttpSessionAttributeListener,ServletRequestAttributeListener{

	public void attributeAdded(ServletRequestAttributeEvent arg0) {
		String attrName=arg0.getName(); //目前正在操作的属性名
		String attrValue=(String)arg0.getServletRequest().getAttribute(attrName);
		System.out.println("request【增加】属性:属性名="+attrName+"\t"+"属性值="+attrValue);
	}

	public void attributeRemoved(ServletRequestAttributeEvent arg0) {
		System.out.println("request【删除】属性:属性名="+arg0.getName());
	}

	public void attributeReplaced(ServletRequestAttributeEvent arg0) {
		//替换:第一次对某属性进行操作为新增,第二次成为替换
		String	attrName=arg0.getName();
		Object attrvalue=arg0.getServletRequest().getAttribute(attrName);
		System.out.println("request【替换】属性:"+attrName+"\t"+"属性值="+attrvalue);
	}

	public void attributeAdded(HttpSessionBindingEvent se) {
		String attrName=se.getName(); //目前正在操作的属性名
		String attrValue=(String)se.getSession().getAttribute(attrName);
		System.out.println("session【增加】属性:属性名="+attrName+"\t"+"属性值="+attrValue);
	}

	public void attributeRemoved(HttpSessionBindingEvent se) {
		System.out.println("session【删除】属性:属性名="+se.getName());
	}

	public void attributeReplaced(HttpSessionBindingEvent se) {
		String	attrName=se.getName();
		Object attrvalue=se.getSession().getAttribute(attrName);
		System.out.println("request【替换】属性:属性名="+attrName+"\t"+"属性值="+attrvalue);
	}

	public void attributeAdded(ServletContextAttributeEvent scab) {
		String attrName=scab.getName(); //目前正在操作的属性名
		String attrValue=(String)scab.getServletContext().getAttribute(attrName);
		System.out.println("application【增加】属性:属性名="+attrName+"\t"+"属性值="+attrValue);
	}

	public void attributeRemoved(ServletContextAttributeEvent scab) {
		System.out.println("application【删除】属性:属性名="+scab.getName());
	}

	public void attributeReplaced(ServletContextAttributeEvent scab) {
		String	attrName=scab.getName();
		Object attrvalue=scab.getServletContext().getAttribute(attrName);
		System.out.println("application【替换】属性:"+attrName+"\t"+"属性值="+attrvalue);
	}

}

测试jsp

<% 
		//ServletContext=application
		application.setAttribute("name","ZhangSan"); //增加application属性
		application.setAttribute("name","LiSi");  //替换application属性
		application.removeAttribute("name");   //移除
		
		session.setAttribute("user","user01");
		application.setAttribute("user","user02");
		session.removeAttribute("user");
		
		request.setAttribute("pwd", "123456");
		request.setAttribute("pwd", "abcdef");
		request.removeAttribute("pwd");
	%>

配置监听器

    <listener>
    <listener-class>my.student.listner.ContextSessionRequestAttributeListener</listener-class>
  </listener>

监听器配置步骤总结
1、添加初始化销毁监听器类,配置初始化销毁监听器接口,重写方法
2、添加属性变更监听器类,配置属性变更监听器接口,重写方法
3、在web.xml中对配置两个监听器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值