用个人的信息备案网站吗,品牌建设的路径,阿里云虚拟主机配置wordpress,邵阳红网站Session监听嘛#xff0c;没什么好解释的#xff0c;java提供了很灵活的事件机制来监听session#xff0c;可以监听session的创建和销毁#xff0c;监控session 所携带数据的创建、变化和销毁#xff0c;可以监听session的锐化和钝化#xff08;了解对象序列化的兄弟应该… Session监听嘛没什么好解释的java提供了很灵活的事件机制来监听session可以监听session的创建和销毁监控session 所携带数据的创建、变化和销毁可以监听session的锐化和钝化了解对象序列化的兄弟应该知道这个其他的平台是个什么情况我不太清楚估计也差不多吧。如果能够对所有客户的session进行监控就不用再去操作麻烦而危险的Application了。 ----- 一、 session监听 servlet中对session的监听有很多接口功能很灵活最常用的是监听Session和Attribute。这里要澄清一下概念servlet中的session监听和Attribute监听含义有差别session监听指的不是我们一般所理解的放置一个session或者销毁一个session这是Attribute监听的功能因为servlet中放置session的语法是 session.setAttribute(session名,要放入的对象)。而session监听监听的是HTTP连接只要有用户与 server连接就算连接的是一个空白的jsp页面也会触发session事件所以此处的session实际上指的是connection用来统计当前在线用户数最合适了。不知道我说清楚了没有。下面分别讲解这两种监听方式。 1、 session监听 首先编写一个session监听类实作HttpSessionListener接口它的作用是计算当前有多少个在线用户 package org.bromon.test; import javax.servlet.*; import javax.servlet.http.*; public class SessionCount implements HttpSessionListener { private static int count0; public void sessionCreated(HttpSessionEvent se) { count; System.out.println(session创建new java.util.Date()); } public void sessionDestroyed(HttpSessionEvent se) { count--; System.out.println(session销毁:new java.util.Date()); } public static int getCount() { return(count); } } 怎么样是不是一目了然count被定义为static是因为要保证整个系统只有这一个count。如果你实在不放心可以把它写成一个单例类。 然后在web.xml中声明这个监听器 listener listener-class org.bromon.test.SessionCount /listener-class /listener 编写一个测试页面test.jsp内容是获得count % int countorg.bromon.test.SessionCount.getCount(); out.println(count); % 需要注意的是这里根本不涉及任何session的操作。重启动App server试着连接test.jsp可以看到监听器已经开始工作。 2、 Attribute监听 作为一个站内消息系统肯定要获得所有登陆者的ID才有可能互发消息。这就涉及Attribute监听。假设我们写了个用户登陆的模块用户通过身份验证之后会产生一个session保存它的相关信息比如 //check.jsp % String namerequest.getParameter(name); Namenew String(name.getBytes(ISO8859-1)); session.setAttribute(user,name); % 做过jsp的兄弟应该对这段代码再熟悉不过了下面写个监听器来监听用户登陆把所有用户的ID保存到一个List当中这个监听器实作HttpSessionAttributeListener接口 package org.bromon.test; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; public class OnlineList implements HttpSessionAttributeListener { private static List listnew ArrayList(); public void attributeAdded(HttpSessionBindingEvent se) { if(user.equals(se.getName())) { list.add(se.getValue()); } } public void attributeRemoved(HttpSessionBindingEvent se) { if(user.equals(se.getName())) { list.remove(se.getValue()); } } public void attributeReplaced(HttpSessionBindingEvent se){} public static List getList() { return(list); } } 写个简单的jsp来得到用户列表 ly;% java.util.List listorg.bromon.test.OnlineList.getList(); out.println(共有list.size()名用户已登陆); for(int I0;Ilise.size();i) { out.println(list.get(i)); } % 也许你说这有什么神奇呢监听session而已不着急看看xmlhttp。 二、 XMLHTTP XMLHTTP的用处很多这里只说我们需要的就是无刷新的与server通信看这段代码 script languagejavascript 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 headtitle探测器/title script languagejavascript 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.innerTextres; setTimeout(detect(),5000);//每隔5秒钟轮询一次 } /script body οnlοaddetect() a idlist/a /body /html 这样的通信方式数据量很小不用重新传递整个页面5秒钟轮一次普通PC也能承受较大的在线数。构造一个探测器来监听在线列表和消息效果是很好的即使你的客户坐在电脑前袖手旁观键鼠都不碰一下也能保证数据即时传递页面也不会发生跳转和刷新。 Session监听加上XMLHTTP通信 转载于:https://www.cnblogs.com/backuper/archive/2008/10/10/1307801.html