`
newleague
  • 浏览: 1479190 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

HttpSessionListener用法

阅读更多

继上次说到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

http://spaces.msn.com/members/Jauan/PersonalSpace.aspx?_c01_blogpart=blogmgmt&_c=blogpart

 

=======================================================================================

八.监听器Listener
1.定义:Listioner是Servlet的监听器,它可以监听客户端的请求,服务取得操作等.
通过监听器,可以自动激发一些操作,比如监听在先的用户的数量.当增加一个HTTPsession时,就激发sessionCreated(HTTPsessionEvent sec)方法,这样就可以进行页面访问统计了.
2.常用监听接口:
a) ServletContextAttributeListenner监听对ServletContext属性的操作,比如增加,删除,修改属性.
b) ServletContextListener监听ServletContext.
当创建ServletContext时,激发contextInitialized(ServletContextEvent sce)方法.
当销毁ServletContext时,激发contextDestroyed(ServletContextEvent sce)方法.
c) HttpSessionListener监听HttpSession的操作
当创建一个Session时,激发sessionCreated(HttpSessionEvent se)方法;
当销毁一个Session时,激发sessionDestroyed(HttpSessionEvent se)方法.
d) HttpSessionAttributeListener监听HttpSession中的属性的操作
当在Session增加一个属性时,激发attributeAdded(HttpSessionBindingEvent se) 方法;
当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent se)方法;
当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se)方法.
Listener的配置:
<listener>
    <listener-class>OnLineCountListener</listener-class>
</listener>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics