Struts+Ajax实现定时刷新Table内容,实现在线人员显示

 

 

Ajax代码如下:

 

< script language = " JavaScript "  type = "" >
    
var  XMLHttpReq  =   false ;
    
// 创建XMLHttpRequest对象
     function  createXMLHttpRequest() {
        
if(window.XMLHttpRequest){                //Mozilla浏览器
            XMLHttpReq = new XMLHttpRequest();
        }

        
else if(window.ActiveXObject){          //IE浏览器
            try{
                XMLHttpReq 
= new ActiveXObject("Msxml2.XMLHTTP");
            }
catch(e){
                
try{
                    XMLHttpReq 
= new ActiveXObject("Microsoft.XMLHTTP");
                }
catch(e){}
            }

        }

    }

    
// 发送请求函数
     function  sendRequest() {
        
var url="handlerList.do"
        createXMLHttpRequest(); 
//调用创建对象方法
        XMLHttpReq.open("post",url,true);
        XMLHttpReq.onreadystatechange 
= processResponse;//指定响应函数 调用
        XMLHttpReq.setRequestHeader("If-Modified-Since","0"); 
        XMLHttpReq.send(
null);//发送请求
    }

    
// 处理返回信息函数
     function  processResponse() {
        
if(XMLHttpReq.readyState==4){//代表服务器已经传回所有的信息,可以处理了
            if(XMLHttpReq.status==200){   //信息已经成功返回,开始处理信息
                updateTable();
                setInterval(
"sendRequest()",10000);
            }
else   //页面不正常
                window.alert("您所请求的页面有异常。");
        }

        
    }


                     
// 更新table的内容
     function  updateTable() {
        clearTable();
        
var results=XMLHttpReq.responseXML.getElementsByTagName("handler");
        
for(var i=0;i<results.length;i++){
                                       
var name=results[i].childNodes[0].firstChild.nodeValue;
                                       addTableRow(name);
                                          }

    }

                     
// 向table的行添加单元格
     function  addTableRow(name) {
        
var table=document.getElementById("handlerList");
        
var row = table.insertRow(1);
        
var cell = row.insertCell(0);
        cell.align
="center";
        cell.innerHTML
="<strong>"+name+"</strong>";
    }

                     
// 清除表格内容
     function  clearTable() {
        
var table=document.getElementById("handlerList");
        
for(var i=table.rows.length-1;i>0;i--)
        
{
            table.deleteRow(i);
        }

    }

</ script >

 下面是JSP的内容

 

< body  onload ="sendRequest()" >
  
< table  width  = "124"  height ="100%"  border ="0"  cellspacing ="0"  background ="../image/bak.jpg" >
  
< tr >
    
< td  height ="39"  align ="center"  valign ="middle" >< align ="center" >< html:link  forward ="main" >< strong > 业务受理 </ strong ></ html:link ></ p >
    
</ td >
  
</ tr >
  
< tr >
    
< td  height ="36"  align ="center"  valign ="middle" >< html:link  forward ="payMoney" >< strong > 业务处理 </ strong ></ html:link ></ td >
  
</ tr >
  
< tr >
    
< td  height ="35"  align ="center"  valign ="middle" >< html:link  forward ="query" >< strong > 业务查询 </ strong ></ html:link ></ td >
  
</ tr >
  
< tr >
  
< td  height ="35"  align ="center"  valign ="middle" >< html:link  forward ="update" >< strong > &#36164;&#26009;&#20462;&#25913; </ strong ></ html:link ></ td >
  
</ tr >
  
< tr >
  
< td  height ="42"  align ="center"  valign ="middle" >< strong >< html:link  href ="admin.jsp" > &#31649;&#29702; </ html:link ></ strong ></ td >
  
</ tr >
  
< tr >
  
< td  height ="34"  align ="center"  valign ="middle" >< strong >< br >
    &#36864;&#20986;
</ strong >  
  
</ td >
  
</ tr >
  
< tr >
  
< td  height ="21"  align ="center"  valign ="middle" > &nbsp;
  
</ td >
  
</ tr >
      
< tr >
          
< td  align ="center"  valign ="middle" >
              
< table  id ="handlerList"  width ="100%"  height ="20"   border ="0"  cellpadding ="0"  cellspacing ="0" >
              
< tr >
                
< td  align ="center" >< strong > 在线人员: </ strong ></ td >
              
</ tr >
            
</ table >
        
</ td >
      
</ tr >
</ table >
</ body >

handlerListAction内容如下

 

public  ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) 
{
        
try {
            request.setCharacterEncoding(
"GBK");
        }
 catch (UnsupportedEncodingException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }

        response.setContentType(
"text/xml;charset=GBK");
        response.setHeader(
"Cache-Control","no-cache");
        
        ServletContext context
=getServlet().getServletContext();
        List list
=(List)context.getAttribute("onlineHandler");
        
        PrintWriter out 
= null;
        
try {
            out 
= response.getWriter();
        }
 catch (IOException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }

        String str
="";
        str
="<?xml version="1.0" encoding="GBK"?>";
        str
+="<handlers>";
        
for(int i=0;i<list.size();i++)
        
{
            str
+="<handler>";
            Handler handler
=(Handler)list.get(i);
            str
+="<name>"+handler.getHandlerName()+"</name>";
            str
+="</handler>";
        }

        str
+="</handlers>";
        out.println(str);
        out.close();
        
return null;
    }

 

为了实现对在线人员的统计

我在登陆的时候将登陆人员放入了ServletContext中,然后使用HttpSessionListenter来监视登陆用户情况

 

public   class  SessionListenter  implements  HttpSessionListener  {

    
public SessionListenter()
    
{}
    
public void sessionCreated(HttpSessionEvent arg0) {
        
// TODO Auto-generated method stub
        System.out.println("Session监听启动了");
        arg0.getSession().setMaxInactiveInterval(
1*60);//设置Session的过期时间为1分钟
    }


    
public void sessionDestroyed(HttpSessionEvent arg0) {
        System.out.println(
"session释放启动了");
        
        HttpSession session 
= arg0.getSession();
        ServletContext ctx 
= session.getServletContext();
        List list 
= (List)ctx.getAttribute("onlineHandler");
        list.remove(session.getAttribute(
"handler"));
        System.out.println(
"List的个数为:"+list.size());
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值