amyhang
技术员
帖子
86
精华
0
无忧币 2483
积分 306
阅读权限 30
|
发表于: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>

|
 千里之外,传递你对震灾人民的关怀 |
|