Java代码
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class OnlineListener implements HttpSessionListener{
private int onlineCount;
public OnlineListener(){
onlineCount=0;
}
/*回话创建时的处理*/
public void SessionCreated(HttpSessionEvent sessionEvent){
onlineCount++;
sessionEvent.getSession().getServletContext().setAttribute("<!-- 可见注释-->", new Integer(onlineCount));
}
/*会话销毁时的处理*/
public void sessionDestoryed(HttpSessionEvent sessionEvent){
onlineCount--;
sessionEvent.getSession().getServletContext().setAttribute("online", new Integer(onlineCount));
}
@Override
public void sessionCreated(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
}
}
web.xml
<listener>
<!-- 以前弄成了sunyang.Onlistener-->
<listener-class>OnlineListener</listener-class>
</listener>
jsp:
<%@ page language="java" pageEncoding="GBK"%>
<html>
<head>
<title>使用监听器监听在线人数的例子</title>
</head>
<body>
<center>
<!-- getAttribute()方法:获取指定属性的属性值; eg:getAttribute(String name); -->
<!-- setAttribute()方法:保存应用程序环境属性; eg:setAttribute(String name,Object obj) -->
<!-- 其中name指应用程序环境的属性名称,obj指指定属性值,其值可以是任何JAVA数据类型 -->
<!--以前把online写成onlineCount去了,应该是name属性,而不是obj值 -->
<h2>当前在线人数:<%=(Integer)application.getAttribute("online") %></h2>
</center>
</body>
</html>
------解决思路----------------------
xml中配置listener了没?
------解决思路----------------------
把下面两个函数中的内容加到带@override 的函数中,否则不会被框架调用。
/*回话创建时的处理*/
public void SessionCreated(HttpSessionEvent sessionEvent){
onlineCount++;
sessionEvent.getSession().getServletContext().setAttribute("<!-- 可见注释-->", new Integer(onlineCount));
}
/*会话销毁时的处理*/
public void sessionDestoryed(HttpSessionEvent sessionEvent){
onlineCount--;
sessionEvent.getSession().getServletContext().setAttribute("online", new Integer(onlineCount));
}
------解决思路----------------------
打个日志,或者debug下,看着两段被调用了没有。
------解决思路----------------------
楼主用session?,难道不是application,session针对的是当前会话而已,你想统计系统全部的在线用户。 请考虑清楚啊!!!!
------解决思路----------------------
你的 onlineCount++写到下面带 @Override的方法里面就可以了。
public void sessionCreated(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
}
------解决思路----------------------
你的 onlineCount++写到下面带 @Override的方法里面就可以了。
public void sessionCreated(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
}
------解决思路----------------------
public void sessionCreated(HttpSessionEvent arg0) {
onlineCount++;
sessionEvent.getSession().getServletContext().setAttribute("online", new Integer(onlineCount));
}
------解决思路----------------------
不同的浏览器SESSION不同的吧 这样统计出来可能不太准确吧