servlet监听

servlet监听器主要是实现ervletContext,HttpSession,ServletRequest三个域对象的监听。只要在web.xml中使用了<listener>标签进行说明,web容器就自动的把配置的监听器注册到事件源上了

监听器对象主要分一下三部分

第一、是监听三个域对象的创建和销毁。
ServletContextListener接口,HttpSessionListener接口,ServletRequestListener接口分别用来监听ServletContext对象,HttpSession对象,ServletRequest对象的创建和销毁。当这些对象创建或销毁时,对应的监听器中各自有争对创建和销毁的方法进行监听。

第二、是监听三个域对象属性的变化

Servlet规范定义了监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器。
这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener ServletRequestAttributeListener
这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换的事件,同一个事件在这三个接口中对应的方法名称完全相同,只是接受的参数类型不同。

第三、

JavaBean 对象本身如果实现了HttpSessionBindingListener,HttpSessionActivationListener接口就可以感知自己被绑定到session中,从session删除和随session对象持久化到存储设备中,从存储设备中恢复。而且不用再web.xml中注册监听器。

要获得以上的功能,监听器必须实现以下3个接口:
    HttpSessionListener
    ServletContextListener
    ServletContextAttributeListener

import javax.servlet.http.*;
import javax.servlet.*;

public class OnLineCountListener implements HttpSessionListener,ServletContextListener,ServletContextAttributeListener
{
private int count;
private ServletContext context = null;

public OnLineCountListener()
{
    count=0;
}
//创建一个session时激发
public void sessionCreated(HttpSessionEvent se)
{
    count++;
    setContext(se);
}
//当一个session失效时激发
public void sessionDestroyed(HttpSessionEvent se)
{
    count--;
    setContext(se);
}
//设置context的属性,它将激发attributeReplaced或attributeAdded方法
public void setContext(HttpSessionEvent se)
{
    se.getSession().getServletContext().setAttribute("onLine",new Integer(count));
}
//增加一个新的属性时激发
public void attributeAdded(ServletContextAttributeEvent event) {
    log("attributeAdded('" + event.getName() + "', '" +event.getValue() + "')");
}
//删除一个新的属性时激发
public void attributeRemoved(ServletContextAttributeEvent event) {
    log("attributeRemoved('" + event.getName() + "', '" +event.getValue() + "')");
}
//属性被替代时激发
public void attributeReplaced(ServletContextAttributeEvent event) {
    log("attributeReplaced('" + event.getName() + "', '" +event.getValue() + "')");
}
//context删除时激发
public void contextDestroyed(ServletContextEvent event) {
    log("contextDestroyed()");
    this.context = null;
}
//context初始化时激发
public void contextInitialized(ServletContextEvent event) {
     this.context = event.getServletContext();
     log("contextInitialized()");
}
private void log(String message) {
      System.out.println("ContextListener: " + message);
    }  
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值