文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 招聘 专题 新闻
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» Java » 用session监听实现在线统计       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: [转载] 用session监听实现在线统计  ( 查看:33  回复:0 )   
 
amyhang
技术员  点击可查看详细



帖子 86
精华 0
无忧币 2483
积分 306
阅读权限 30
注册日期 2008-4-12
最后登录 2008-5-14 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-5-9 08:46   标题:用session监听实现在线统计
上一帖 |
首先编写一个模型类[如果还需要其他信息可增加类属性]:

代码:package com.bupticet.listener;

public class OnlineModel{
  private String userName;
  private String ipAddress;
  private String loadTime;
  private String address;

  /**
   * OnlineModel
   */
  public OnlineModel() {
  }

  public OnlineModel(String name,String ip,
                     String time,String address){
    this.userName = name;
    this.ipAddress = ip;
    this.loadTime = time;
    this.address = address;
  }

  public String getIpAddress() {
    return ipAddress;
  }

  public String getAddress() {
    return address;
  }

  public String getLoadTime() {
    return loadTime;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  public void setIpAddress(String ipAddress) {
    this.ipAddress = ipAddress;
  }

  public void setAddress(String address) {
    this.address = address;
  }

  public void setLoadTime(String loadTime) {
    this.loadTime = loadTime;
  }

  public String getUserName() {
    return userName;
  }

  public String toString(){
    return this.userName+"    "+this.ipAddress+"    "+this.loadTime+"    "+this.address+"\n\n"+"
";
  }

}再写一个session监听类,实现HttpSessionListener接口:

代码:package com.bupticet.listener;

import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

public class OnlineList implements HttpSessionAttributeListener{
        private static List list=new ArrayList();

        public void attributeAdded(HttpSessionBindingEvent se){
                if("online".equals(se.getName()))        {
                        list.add((OnlineModel)(se.getValue()));
                }
        }

        public void attributeRemoved(HttpSessionBindingEvent se){
                if("online".equals(se.getName())){
                        list.remove((OnlineModel)(se.getValue()));
                }
        }

        public void attributeReplaced(HttpSessionBindingEvent se){}

        public static List getList(){
                return(list);
        }
}然后在web.xml中声明这个监听器:

代码:

com.bupticet.listener.OnlineList

最后在登陆的servlet或者页面中加入如下代码[请做适当修改]:

代码:java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
                    String time = sdf.format(java.util.Calendar.getInstance().getTime());
                    String[] address = IPLocalizer.search(request.getRemoteAddr());
                    session.setAttribute("online",new OnlineModel(userName,request.getRemoteAddr(),time,address[0]+address[1]));
这样就较为完美的实现了一个在线统计系统


显示在线统计:

PHP 代码:

table width="100%" border="0" cellspacing="0" cellpadding="0">
  tr class="tableHead" align=center>
    td width='5%' nowrap>序号a>td>
    td width="0%">|td>
    td width='18%'>姓名a>td>
    td width="0%">|td>
    td width='20%'>IPa>td>
    td width="0%">|td>
    td width='30%'>登陆时间a>td>
    td width="0%">|td>
        td width='27%'>来自于a>td>
    td width="0%">|td>
  tr>
java.util.List list=com.bupticet.listener.OnlineList.getList();
int onlineNumber = list.size();
int onlinePageCount = 0;
if(onlineNumber%pagesize==0){
    onlinePageCount = onlineNumber/pagesize;
}else{
    onlinePageCount = onlineNumber/pagesize+1;
}
String str = "";
String trbgcolor=Page_trbgcolor;

int i = (pageNum-1)*pagesize;
int j = 0;
for(;ionlineNumber&&jpagesize;i++,j++){
    com.bupticet.listener.OnlineModel om = (com.bupticet.listener.OnlineModel)(list.get(i));
    trbgcolor=(trbgcolor==Page_trbgcolor)?"#FFFFFF"age_trbgcolor;
     str+=" +trbgcolor+"'>"+"\n";
       str+="+Page_warncolor+"'>"+(i+1)+""+"\n";
       str+=""+"\n";
       str+="+Page_warncolor+"'>"+om.getUserName()+""+"\n";
       str+=""+"\n";
       str+="+Page_warncolor+"'>"+om.getIpAddress()+""+"\n";
       str+=""+"\n";
       str+="+Page_warncolor+"'>"+om.getLoadTime()+""+"\n";
       str+=""+"\n";
       str+="+Page_warncolor+"'>"+om.getAddress()+""+"\n";
           str+=""+"\n";
}
for(;jpagesize;j++){
        trbgcolor=(trbgcolor==Page_trbgcolor)?"#FFFFFF"age_trbgcolor;
     str+=" +trbgcolor+"'>"+"\n";
       str+="+Page_warncolor+"'>"+" "+""+"\n";
       str+=""+"\n";
       str+="+Page_warncolor+"'>"+" "+""+"\n";
       str+=""+"\n";
       str+="+Page_warncolor+"'>"+" "+""+"\n";
       str+=""+"\n";
       str+="+Page_warncolor+"'>"+" "+""+"\n";
       str+=""+"\n";
       str+="+Page_warncolor+"'>"+" "+""+"\n";
           str+=""+"\n";

}
%>
table>  

  




千里之外,传递你对震灾人民的关怀
2008-5-9 08:461楼
[ 顶部 ]
     
论坛跳转:  

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号