public void attributeReplaced(HttpSessionBindingEvent se){} public static List getList() { return(list); } } 写个简单的jsp来得到用户列表:
&ly;% java.util.List list=org.bromon.test.OnlineList.getList(); out.println(“共有”+list.size()+”名用户已登陆:”); for(int I=0;I<lise.size();i++) { out.println(list.get(i)); } %>
也许你说,这有什么神奇呢,监听session而已,不着急,看看xmlhttp。 二、 XMLHTTP
XMLHTTP的用处很多,这里只说我们需要的,就是无刷新的与server通信,看这段代码: <script language="javascript"> xml = new ActiveXObject("Microsoft.XMLHTTP"); var post=" ";//构造要携带的数据 xml.open("POST","http://localhost:7001/TestWL/index.jsp",false);//使用POST方法打开一个到服务器的连接,以异步方式通信 xml.setrequestheader("content-length",post.length); xml.setrequestheader("content-type","application/x-www-form-urlencoded"); xml.send(post);//发送数据 var res = xml.responseText;//接收服务器返回的数据 document.write(res); </script>
豁然开朗,这段代码就是打开一个HTTP连接,以标准的HTTP格式传递数据,如果你喜欢,可以用XML的格式来传递。更改一下xml对象的构造方式就可以兼容Mozilla和Netscape。下面来写一个轮询,每隔一段时间刷新一次用户列表,当然,是不需要刷新页面的:
<html> <head><title>探测器</title> <script language="javascript"> function detect() { xml = new ActiveXObject("Microsoft.XMLHTTP"); var post=" ";//构造要携带的数据 xml.open("POST","http://localhost:7001/TestWL/index.jsp",false);//使用POST方法打开一个到服务器的连接,以异步方式通信 xml.setrequestheader("content-length",post.length); xml.setrequestheader("content-type","application/x-www-form-urlencoded"); xml.send(post);//发送数据 var res = xml.responseText;//接收服务器返回的数据 list.innerText=res; setTimeout(“detect()”,5000);//每隔5秒钟轮询一次 } </script> <body onload=”detect()”> <a id=”list”></a> </body> </html>
这样的通信方式数据量很小,不用重新传递整个页面,5秒钟轮一次,普通PC也能承受较大的在线数。构造一个探测器来监听在线列表和消息,效果是很好的,即使你的客户坐在电脑前袖手旁观,键鼠都不碰一下,也能保证数据即时传递,页面也不会发生跳转和刷新。 |