J2EE中监听器Listener的应用

本文以二个Listener实例来讲述ServletContext、HttpSession对象生命周期及ServletContext、HttpSession对象中属性变化情况。

 

 

实例一:

        用于监听ServletContext对象生命周期及ServletContext对象中属性的变化情况的监听器ContextListener,分别实现了ServletContextListener,ServletContextAttributeListener接口。代码如下:

package com.hc.znpb.servlet;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;


public class ContextListener implements ServletContextListener,
        ServletContextAttributeListener {

   
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("【监听到】应用被关闭!");
    }

   
    public void contextInitialized(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("【监听到】应用被启动!");
    }

   
    public void attributeAdded(ServletContextAttributeEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("【监听到】ServletContext对象中新增一名为" + arg0.getName()
                + "的属性,其属性值为:" + arg0.getValue());
    }

   
    public void attributeRemoved(ServletContextAttributeEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("【监听到】ServletContext对象中一名为" + arg0.getName()
                + "的属性被删除!");
    }

   
    public void attributeReplaced(ServletContextAttributeEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("【监听到】ServletContext对象中一名为" + arg0.getName()
                + "的属性被更新!");
    }

}

实例二:

    用于监听HttpSession对象生命周期及HttpSession对象中属性的变化情况的监听器SessionListener,分别实现了HttpSessionListener,HttpSessionAttributeListener接口。代码如下:

package com.hc.znpb.servlet;

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

import com.hc.znpb.util.SysUtil;


public class SessionListener implements HttpSessionAttributeListener,
        HttpSessionListener {

    // 在线人数统计
    private int userCount = 0;

   
    public void attributeAdded(HttpSessionBindingEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("【监听到】HttpSession对象中新增一名为" + arg0.getName()
                + "的属性,其属性值为" + arg0.getValue());
    }

   
    public void attributeRemoved(HttpSessionBindingEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("【监听到】HttpSession对象中一名为" + arg0.getName()
                + "的属性被删除!");
    }

   
    public void attributeReplaced(HttpSessionBindingEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("【监听到】HttpSession对象中一名为" + arg0.getName()
                + "的属性被修改!");
    }

   
    public void sessionCreated(HttpSessionEvent arg0) {
        // TODO Auto-generated method stub
        // 在线人数加1
        arg0.getSession().setAttribute(SysUtil.SESSION_COUNT_USERS,
                new Integer(this.userCount++));
        System.out.println("【监听到】新用户" + arg0.getSession().getId() + "上线!");
        System.out.println("【在线用户数】" + this.userCount + "人");
    }

   
    public void sessionDestroyed(HttpSessionEvent arg0) {
        // TODO Auto-generated method stub
        // 在线人数减1
        arg0.getSession().setAttribute(SysUtil.SESSION_COUNT_USERS,
                new Integer(--this.userCount));
        System.out.println("【监听到】新用户" + arg0.getSession().getId() + "下线!");
        System.out.println("【在线用户数】" + this.userCount + "人");
    }

}

 

最后修改web.xml文件,如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <listener>
        <listener-class>
            com.hc.znpb.servlet.ContextListener
        </listener-class>
    </listener>

    <listener>
        <listener-class>
            com.hc.znpb.servlet.SessionListener
        </listener-class>
    </listener>

</web-app>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值