首页 > 教程 > 关键词 > 网页设计最新资讯 > 正文

用xmlhttp和Java session监听改善站内消息系统

2007-04-04 14:40 · 稿源:中国站长站

  这个题目含有许多需要解释的概念,最容易说明的是“站内消息”,这是很多论坛都有的功能,可以通过web向其他的在线用户发送消息,很多用户都使用过。站内消息的第一个好处是大家都不需要安装客户端,你不用知道对方的MSN或者QQ,就能与他联系,称赞他的观点或者是给他一顿臭骂。第二个好处是客户管理方便,利用session来维护在线名单,各种脚本都已经把session操作封装得很易用了,不用像其他无状态的即时通信工具(比如使用UDP通信的工具)一样,要费一些脑细胞来解决在线名单的问题。缺点嘛,就是实时性不好,一般是在用户跳转或者刷新页面才能探测消息、更新在线名单。

  Session监听嘛,java提供了很灵活的事件机制来监听session,可以监听session的创建和销毁,监控session所携带数据的创建、变化和销毁,可以监听session的锐化和钝化,其他的平台是个什么情况我不太清楚,估计也差不多吧。如果能够对所有客户的session进行监控,就不用再去操作麻烦而危险的Application了。

  Xmlhttp是MS推的一项技术,功能很复杂,可以做很多事情,比如客户端可以在简单的HTML中打开HTTP连接,主动向server请求数据并获得返回数据,是DOM技术一个非常重要的应用,利用它来写无刷新的动态页面简直是so easy,做过web开发的兄弟应该明白它的意义有多么重大。

  一、 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 count=0;

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 count=org.bromon.test.SessionCount.getCount();
out.println(count);
%>

  需要注意的是,这里根本不涉及任何session的操作。重启动App server,试着连接test.jsp,可以看到监听器已经开始工作。

  2、 Attribute监听

  作为一个站内消息系统,肯定要获得所有登陆者的ID,才有可能互发消息。这就涉及Attribute监听。假设我们写了个用户登陆的模块,用户通过身份验证之后会产生一个session,保存它的相关信息,比如:

//check.jsp
<%
String name=request.getParameter(“name”);
Name=new 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 list=new 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 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也能承受较大的在线数。构造一个探测器来监听在线列表和消息,效果是很好的,即使你的客户坐在电脑前袖手旁观,键鼠都不碰一下,也能保证数据即时传递,页面也不会发生跳转和刷新。

  Session监听加上XMLHTTP通信,开发一个较为完善的站内消息系统实在易如反掌。

  请作者联系本站,及时附注您的姓名。联系邮箱:edu#chinaz.com(把#改为@)。

  • 相关推荐
  • 大家在看
  • 微信辟谣监听用户聊天记录

    昨日,针对“微信正在监听用户的聊天记录”的传闻,微信官方辟谣平台“谣言过滤器”回应称,聊天内容属于用户的通信秘密和个人隐私,微信不会监测用户的聊天记录,腾讯更不会通过监测用户聊天记录来推送广告。

  • 微信辟谣监听用户聊天记录 微信绝不会做

    6月1日,对于近日有短视频声称“微信正在监听你的聊天纪录,并推送相关广告”一事,微信团队回应称,这当然是假的,微信表示数据都经过加密处理,可以保护用户隐私的安全。

  • 华为云FusionAccess连续四年中国桌面云市场第一

    IDC最新研究数据显示,华为云FusionAccess桌面云一马当先,又一次斩获中国桌面云市场第一。这已经是自该报告2016年发布以来,华为连续第四年领跑中国桌面云市场,显示了客户对华为在桌面云市场多年来持续投入的认可。 IDC数据显示,华为不仅继续在其耕耘多年的政府市场持续领先,并且在金融、制造、能源等更多的行业也越来越受欢迎。同时期待FusionAccess基于华为鲲鹏生态会有更加优异的表现。 2020年,华为云FusionAccess针对日?

  • 微信否认监听用户聊天记录:聊天内容属于用户隐私

    今日,针对“微信正在监听你的聊天记录”的传闻,微信官方辟谣平台“谣言过滤器”回应称,聊天内容属于用户的通信秘密和个人隐私,微信不会监测用户的聊天记录,腾讯更不会通过监测用户聊天记录来推送广告。

  • 编程语言最新排名:Java最受欢迎、JS用户最多

    IDE工具开发商JetBrains基于2万名开发者,对编程语言的最新情况进行了统计描摹。就受欢迎程度而言,Java高居第一位,但在使用人数上,JavaScript则名列榜首。欢迎程度的统计方法是,让参与的

  • playstation:请尽情享受以《刀剑神域:Alicization》为舞台的《UW》世界

    预定于 7 月 9 日(星期四)发售的“刀剑神域”游戏系列最新作、即将登陆PlayStation? 4 平台的“SWORD ART ONLINE Alicization Lycoris”游戏,是一款以原作和动画中看到的虚拟世界“Under World”为舞台,通过操作Kirito(桐人)在《Alicization》篇的世界中冒险的RPG游戏。故事再现了TV动画《Alicization》篇中前半战、从前半战最终话到游戏原创路线的分歧这一部分剧情。值得一提的是,该作故事内容不是原有的《Alicization》的

  • 报告:JavaScript为最常用整体编程语言 Python超过Java

    在过去的 12 个月中,Python在使用的编程语言列表中已经超过了Java,它也是被研究最多的语言。报告称,在过去的 12 个月里,30%的受访者开始或继续学习Python,甚至比去年还要多。

  • 引领潮流,耶鲁家居智能生态系统Yale Access守护居家安全

    从 1840 年涉足银行锁开始, 180 年来,耶鲁始终专注于制锁领域。通过坚持不懈地探索奋斗,耶鲁如今已经构建了完善的家居智能安防系统,包括锁芯、保险箱或挂锁,以及智能家庭安全产品,如报警器、室内和室外摄像头、连接和独立智能锁的丰富的产品矩阵,产品组合高达数百万之众,是当下全球毋庸置疑的智能锁巨头。 但耶鲁并没有放下前进的步伐。在互联网时代的浪潮下,耶鲁再度站在时代的前列。即将上市的YaleAccess正是耶鲁在万

  • HTTP和HTTPS是什么?

    我们都知道使用浏览器访问一个网站页面,需要知道该网站的域名,例如访问百度知道,在浏览器的地址栏中我们会看到一串URL。网站的URL会分为两部分:通信协议和域名地址。域名地址都很好理解,不同的域名地址表示网站中不同的页面,而通信协议,简单来说就是浏览器和服务器之间沟通的语言。网站中的通信协议一般就是HTTP协议和HTTPS协议。两者分别是什么,有什么区别呢?HTTP协议HTTP协议也就是超文本传输协议,是一种使用明文数据?

  • 顺应新趋势发展,潭州教育助力学员系统学习平面设计

    一提及平面设计,很多人在脑海中浮现的职位就是美工,最直观的就是淘宝美工。其实不然,平面设计也称为视觉传达设计,常见用途包括标识(商标和品牌)、出版物(杂志,报纸和书籍)、平面广告、海报、广告牌、网站图形元素、标志和产品包装等。潭州教育众所周知,近年来企业越来越注重其产品和形象的包装,因为好的平面设计师会为公司的形象和市场的开拓推波助澜。其中广告设计对企业和企业产品的作用不可忽视,尤其是在新媒体时代,广告的影响?

  • 享学课堂Java进阶架构班三期6月开营

    疫情过后,网课的热度依旧没有褪去。虽然刚刚过完“金三银四”程序员面试跳槽的旺季,但是还是有很多程序员继续选择学习深造,提高技术水平,为下一个面试跳槽周期“金九银十”做准备。据享学课堂官方提供的数据,在 2020 年第一季度Java类目下新增VIP学员超过 1000 人,Java课堂VIP总人数已经超过 6000 人。为提高教学服务,保证每位学员得到高质量的学习效果,本月开始享学课堂Java进阶架构班三期正式开营。享学课堂Java进阶架构

  • “服装设计dress”时尚领域排行榜,百家号分类应该怎么选

    备注:本文数据来自站长之家移动传媒平台,文章涉及的数据依托平台大数据计算所得,非百度官方数据,仅供参考。服装设计dress是当前百家号中的普通号,目前账号百家号权重为3,综合排名位列18328名,时尚分类排名位列466名,领先了98.4%的百家号。 服装设计dress百家号概况 服装设计dress的简介为我爱设计,时尚生活彰显魅力个性。,是一家主旨明确、领域专注的自媒体作者,截止目前为止他们已经在百家号上发布了超过109篇的游戏内

  • Java已被超越?Python当道,风变编程带你化身编程高手

    在程序员中,一直流传着“Python除了不会生孩子,什么都会”的传说。作为人工智能时代最重要的脚本语言之一,Python现在已经逐步占领统计学、机器学习、爬虫、图形处理、软件和游戏开发、人工智能等多个领域,且都有突出表现。可以说,在众多编程语言中,python如今已经杀出重围,从容超越Java和Javascript,化身程序员必备的编程利器之一。目前,国内外许多公司都已使用Python,如:YouTube、豆瓣、知乎、Google、百度、腾讯、美?

  • 巴菲特宣布退休为假消息 伯克希尔官网没有任何相关消息

    今日,网传有消息称巴菲特宣布退休。在网传信件中,巴菲特表示,在过去的几年里,自己一直在考虑伯克希尔·哈撒韦的未来及其继任计划。阿贝尔(Greg Abel)和简恩(Ajit Jain)将会联合执掌伯克希尔哈撒韦,DDTG的David Scott Portnoy将接任董事会主席,立即生效。

  • 抵制破解!索尼上线全新的PlayStation BUG悬赏计划

    游戏主机一直是黑客破解的重点,包括任天堂Switch和索尼PS4在内的现世代几大游戏主机,均不同程度上的遭遇了破解。索尼全新一代游戏主机PlayStation 5已经确定将于今年圣诞假期期间正式发布,为了不再重蹈此前的覆辙,索尼今日正式上线了新的PlayStation BUG悬赏计划,如果有开发者或者用户发现了PS系统以及线上服务的重大安全漏洞,索尼将会提供5万美元的现金奖励。据悉,索尼目前已经向发现PS漏洞的黑客

  • 猿辅导招聘服务器端研发工程师(JAVA)诚邀技术大拿

    猿辅导是一家在线教育领域的互联网公司,众所周知互联网公司最重要的岗位非程序员莫属,猿辅导也不例外,近日猿辅导招聘服务器端研发工程师(JAVA)正如火如荼的进行着。猿辅导可以为工程师们提供舒适的工作环境以便大家可以大显身手。猿辅导望京办公楼猿辅导的这份工作主要内容是负责猿辅导主app相关产品服务器端的开发,而且作为一名有经验的研发工程师,你还需要指导新人进行开发。猿辅导的办公环境对于这个岗位,猿辅导有相应?

  • 设计实战 赞扬设计服务带你探究LOGO设计

    我们都知道,每个公司都有着它自己的独特性,这种独特性是由它的发展历程和特有的服务细节所塑造的,也正是因为这种独特性的存在,设计师们才能基于它们来为这些公司企业进行LOGO设计。LOGO绝对是最能够直观的体现一个公司属性和风格的东西之一。专门设计一个独立的、与众不同的LOGO是一件很艰难的事,因为就目前市场上存在的公司企业和五花八门品牌LOGO实在是太多太多了。LOGO设计的独一无二,对公众而言,能够看一眼就能快速的想起某一?

  • 利用网页抓取数据赚钱的3个思路

    在大数据时代,如何有效获取数据已成为驱动业务决策的关键技能。分析市场趋势,监视竞争对手等都需要进行数据采集。而网页抓取则是数据采集的主要方法之一。在本文中,Christopher Zita将和大家展示 3 种利用网络抓取赚钱的方法,全程只需几个小时就能学会,所用代码不到 50 行。

  • 从新技术到健康生态,华米科技通过AI技术改善用户健康

    6月15日,华米科技(NYSE:HMI)在安徽合肥举办主题为「AI to Decode Future」的首届AI创新大会,为我们带来了诸多AI技术研究与相关应用。次日,华米科技还举办了AI技术开放日活动,邀请业内专家与高校院校学生共同探讨国内外人工智能话题,探索人工智能未来发展的趋势方向。 AI创新大会:华米自研新技术、新硬件惊喜不断在本届AI创新大会上,华米科技正式发布了新一代智能可穿戴芯片“黄山2号”、第二代PPG?物追踪光学传感器BioTrack

  • 丐帮设计打造人人共享在线设计平台

    受疫情影响,互联网经济整体增速放缓,新的营销困境也随之而来。流量是企业的核心困境,而营销渠道是流量的新动能。丐帮设计率先打破了数字化营销的技术壁垒,通过强大的人工智能技术,研发出能随时满足用户需求的设计共享平台。人人都是设计师提到设计,我们会想到什么?是长城、金字塔那样的伟大建筑?是每年巴黎时装周的高定新款?还是埃舍尔的矛盾空间?是,却不止如此。工薪族如何做出精美被老板夸赞的PPT?自媒体人怎样作图?

  • 参与评论
文明上网理性发言,请遵守新闻评论服务协议