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>