您的位置:首页 > 理论基础 > 计算机网络

HttpSessionListener用法

2012-08-10 23:19 330 查看
继上次说到Listener的功效,这里就不得不说说另外一个接口HttpSessionListener了。

上次说到了ServletContextListener,它是用来监听Servlet Context的创建和销毁的状态。今天特别有兴趣在

聊聊另一个监听的接口,名字叫做HttpSessionListener。

在理解这个接口之前,先提出一个问题,就是假设我的web应用上想知道到底有多少用户在使用?

首先看一段代码。

package demo.listener;

import javax.servlet.ServletContext;

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

public class SessionCounter implements HttpSessionListener {

    public void sessionCreated(HttpSessionEvent event) {

        ServletContext ctx = event.getSession( ).getServletContext( );

        Integer numSessions = (Integer) ctx.getAttribute("numSessions");

        if (numSessions == null) {

            numSessions = new Integer(1);

        }

        else {

            int count = numSessions.intValue( );

            numSessions = new Integer(count + 1);

        }

        ctx.setAttribute("numSessions", numSessions);

    }

    public void sessionDestroyed(HttpSessionEvent event) {

        ServletContext ctx = event.getSession( ).getServletContext( );

        Integer numSessions = (Integer) ctx.getAttribute("numSessions");

        if (numSessions == null) {

            numSessions = new Integer(0);

        }

        else {

            int count = numSessions.intValue( );

            numSessions = new Integer(count - 1);

        }

        ctx.setAttribute("numSessions", numSessions);

    }

}

在这个解决方案中,任何一个Session被创建或者销毁时,都会通知SessionCounter 这个类,当然通知的原因是必须在web.xml文件中做相关的配置工作。如下面的配置代码:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE web-app PUBLIC

    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

    "http://java.sun.com/dtd/web-app_2_3.dtd">

   

<web-app>

<display-name>Struts Examples</display-name>

<listener>

      <listener-class>demo.listener.SessionCounter</listener-class>

</listener>

... rest of web.xml
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息