当前位置: 代码迷 >> J2EE >> 使用Servlet监听器监听网站在线人数,老是显示为null怎么处理
  详细解决方案

使用Servlet监听器监听网站在线人数,老是显示为null怎么处理

热度:9   发布时间:2016-04-17 23:15:29.0
使用Servlet监听器监听网站在线人数,老是显示为null怎么办?
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));
    }

------解决思路----------------------
引用:
Quote: 引用:

把下面两个函数中的内容加到带@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不同的吧  这样统计出来可能不太准确吧
  相关解决方案