日期:2014-05-20  浏览次数:20716 次

javaweb中HttpSessionListener使用
java文档一
package web1Pac;
public class onLineCounter
{ private static long onLineUser=0;
  public static long getOnLineUser()
  { return onLineUser;
  }
  public static void UserIn()
  { onLineUser++;
 
  }
  public static void UserOut()
  { onLineUser--;
 
  }
}
java文档二
package web1Pac;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebServlet("/CounterListener")
public class CounterListener extends HttpServlet implements HttpSessionListener
 { public void sessionCreated(HttpSessionEvent event) 
{ HttpSession session=event.getSession();
session.setMaxInactiveInterval(60);
synchronized(this)
{ onLineCounter.UserIn();
 
}
}

  public void sessionDestroyed(HttpSessionEvent event) 
{ synchronized(this)
{ onLineCounter.UserOut();
 
}


}

jsp文档三
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="web1Pac.onLineCounter" %>
<%@page import="web1Pac.CounterListener" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String s=String.valueOf(onLineCounter.getOnLineUser());
out.println(s);
%>
</body>
</html>

上面的三个文档是实现session的计数功能,当我用springsource自带浏览器运行文档三时,显示的结果是0;也就是类onLineCounter成员变量的默认值.此结果表明监听器事件没有发生。我作为第一个访问服务器资源的用户,public void sessionCreated(HttpSessionEvent event) 应该发生啊,也就是结果输出的结果应为1,这是怎么回事??


------解决方案--------------------
我在本机测试了下,显示为1,是正常的。
你是否没有在web.xml中添加:
<listener>
<listener-class>web1Pac.CounterListener</listener-class>
</listener>