10_listener

1 listener概念

listener:监听器
          对域对象(servlet的三大域:request、session、servletContext)进行监听
分类:
    域对象生死监听器:::监听三大域的生命周期
    域属性监听器:::::监听三大域属性的增删改

2 生死监听器具体使用

2.1 生死监听器

  • 创建request的生死监听器
package com.zhiyou100_06.listener;

import java.io.UnsupportedEncodingException;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;

public class Demo01RequestLifeLinstener   implements  ServletRequestListener{
	{
		System.out.println("监听器构造代码块:::Demo01RequestLifeLinstener");
	}

	//request对象销毁时执行的方法
	public void requestDestroyed(ServletRequestEvent sre) {
		System.out.println("request对象销毁:::");
	}
    //request对象创建时执行的代码
	public void requestInitialized(ServletRequestEvent sre) {
		System.out.println("request对象创建:::");
		System.out.println("getSource:::"+sre.getSource());
		//创建之前对request设置编码集:
		HttpServletRequest req=(HttpServletRequest)sre.getServletRequest();
		try {
			req.setCharacterEncoding("utf-8");
		} catch (UnsupportedEncodingException e) {
			throw new RuntimeException(e);
		}
	}
}
  • 创建session生死监听器
package com.zhiyou100_06.listener;

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

public class Demo02SessionLifeListener   implements HttpSessionListener{
	//使用seesion生死监听器 记录当前项目的在线人数::
	//记录在线人数的变量::此变量要存储在上下文对象中count
	//session创建此变量值+1
	//session销毁此变量值-1
	
    //session创建时执行的代码
	public void sessionCreated(HttpSessionEvent se) {
		    HttpSession session=se.getSession();
		    System.out.println("一个回话创建了----"+se.getSession().getId());
		    //设置session的过期时间:默认过期时间是30min
		    //session.setMaxInactiveInterval(60);// i的单位是秒。
		    //获取上下文对象中的count
		    ServletContext application=session.getServletContext();
//		    int count=0;
//		    if(application.getAttribute("count")!=null){
//		    	count=(Integer)application.getAttribute("count");
//		    }
//		    count++;
//		    application.setAttribute("count", count++);
		    //application.setAttribute("count", 1+(application.getAttribute("count")==null?0:(Integer)application.getAttribute("count")));
		    
		    //在application的生死监听器中已经设置的count属性  不需要判断一定有count域属性
		    application.setAttribute("count", 1+(Integer)application.getAttribute("count"));
	}
    //session销毁时创建的代码
	public void sessionDestroyed(HttpSessionEvent se) {
		 System.out.println("一个回话创建销毁了::"+se.getSession().getId());
		  HttpSession session=se.getSession();
		  //获取上下文对象中的count
		  ServletContext application=session.getServletContext();
		  application.setAttribute("count", (Integer)application.getAttribute("count")-1);
	}
}
  • 创建application的生死监听器
package com.zhiyou100_06.listener;

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

public class Demo03ApplicationLifeListener   implements ServletContextListener{
    //tomcat关闭前 要销毁上下文对象 此方法执行
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("上下文生死监听器::::contextDestroyed");
	}
	//tomcat启动后 要创建项目的上下文对象 此方法执行
	public void contextInitialized(ServletContextEvent sce) {
		//System.out.println("上下文生死监听器::::contextInitialized");
		sce.getServletContext().setAttribute("count", 0);
	}
}

2.2 配置监听器

  <!-- 设置sssion的过期时间 ::;单位是分钟-->
  <session-config>
      <session-timeout>1</session-timeout>
  </session-config>
  
  <listener>
    <listener-class>com.zhiyou100_06.listener.Demo02SessionLifeListener</listener-class>
  </listener>
  
  <listener>
    <listener-class>com.zhiyou100_06.listener.Demo03ApplicationLifeListener</listener-class>
  </listener>
  <listener>
    <listener-class>com.zhiyou100_06.listener.Demo01RequestLifeLinstener</listener-class>
  </listener>

3 域属性监听器监听使用

3.1 创建属性监听器

  • request域属性监听器
package com.zhiyou100_06.listener;

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

public class Demo02RequestAttributeListener  implements ServletRequestAttributeListener {

	//域属性添加
	public void attributeAdded(ServletRequestAttributeEvent srae) {
		System.out.println("request域中添加了域属性::"+srae.getName()+"="+srae.getValue());
	}
	//域属性删除
	public void attributeReplaced(ServletRequestAttributeEvent srae) {
		System.out.println("request域中修改了域属性::"+srae.getName()+"::修改前的值="+srae.getValue()+",修改后的值="+srae.getServletRequest().getAttribute(srae.getName()));
	}
	//域属性修改
	public void attributeRemoved(ServletRequestAttributeEvent srae) {
		System.out.println("request域中删除了域属性::"+srae.getName()+"="+srae.getValue());
	}
   
}
  • session域属性监听器
package com.zhiyou100_06.listener;

import java.security.GeneralSecurityException;

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

public class Demo02SessionApplicationListener   implements HttpSessionAttributeListener{

	public void attributeAdded(HttpSessionBindingEvent se) {
		System.out.println("session中创建了域属性::"+se.getName()+"="+se.getValue());
	}

	public void attributeRemoved(HttpSessionBindingEvent se) {
		System.out.println("session中删除了域属性::"+se.getName()+"="+se.getValue());
	}

	public void attributeReplaced(HttpSessionBindingEvent se) {
		System.out.println("session中修改了域属性::"+se.getName()+"="+se.getValue()+",新值是:"+se.getSession().getAttribute(se.getName()));
	}
}
  • application属性监听器
package com.zhiyou100_06.listener;

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

public class Demo02ApplicationAttributeListener implements ServletContextAttributeListener {

	public void attributeAdded(ServletContextAttributeEvent scae) {
		System.out.println("application添加域属性:::"+scae.getName()+"="+scae.getValue());
	}

	public void attributeRemoved(ServletContextAttributeEvent scae) {
		System.out.println("application删除域属性:::"+scae.getName()+"="+scae.getValue());
	}

	public void attributeReplaced(ServletContextAttributeEvent scae) {
		System.out.println("application修改域属性:::"+scae.getName()+"="+scae.getValue()+",新值="+scae.getServletContext().getAttribute(scae.getName()));
	}
}

3.2 配置属性监听器

<listener>
    <listener-class>com.zhiyou100_06.listener.Demo02RequestAttributeListener</listener-class>
</listener>
<listener>
    <listener-class>com.zhiyou100_06.listener.Demo02ApplicationAttributeListener</listener-class>
</listener>
<listener>
    <listener-class>com.zhiyou100_06.listener.Demo02SessionApplicationListener</listener-class>
</listener>

4 现在有三个abc页面+结果显示页面

结果显示页面中统计abc的访问次数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值