书签 分享 收藏 举报 版权申诉 / 18

类型利用DWR框架反向AJAX技术实现Web模式的实时在线用户计数的应用实例.docx

  • 文档编号:13887232
  • 上传时间:2023-06-18
  • 格式:DOCX
  • 页数:18
  • 大小:245.46KB

目前在线人数是:

人,

在线登录的用户名:

Admin

2、测试示例项目目前的功能实现的效果

在浏览器的URL地址栏中输入如下的http:

//127.0.0.1:

8080/webcrm/index.jsp或者http:

//127.0.0.1:

8080/webcrm/commonPage/authorInfo.jsp地址,其中的index.jsp页面包含authorInfo.jsp页面,并打开多个不同的浏览器来模拟多个不同的用户访问的状况,系统将能够及时并准确地计数出在线用户数量。

目前的在线记数功能能够达到“实时”的效果,但如果某个用户离线(关闭浏览器、会话超时),不能实时显示变化后的新的在线人数。

因为用户关闭了浏览器窗口就表明用户已经不在线了,所有的对话都应该要结束。

但由于本示例项目中的服务器端程序并不能够及时地知道这个状态的变化。

此时只要依赖于Session会话过期超时,但导致在线记数将不准确。

1.1.3解决用户离线时如何及时更新在线用户总数的问题

1、更好地解决用户离线时的及时更新的问题方法

(1)在用户关闭浏览器窗口时及时通知服务器端程序

在AJAX应用实例的实现方法中提及利用“在线注销”和“缩短会话超时时间”在实际应用方面都存在一定的不足,更好地解决用户离线时的及时更新的问题方法是“在用户关闭浏览器时,通知服务器端程序”。

(2)利用onunload事件通知服务器

在页面上注册onunload事件——如body元素的onunload属性,或直接设置window.onunload。

但要注意的是onunload而不是onbeforeunload事件,因为用户可以在onbeforeunload事件时选择“取消”从而不关闭窗口,而onunload事件意味着窗口肯定是要被关闭的。

代码示例如下:

window.onunload=function(){window.location.href="${pageContext.request.contextPath}/onLineUserInfoServlet.action"+"?

action=onLineLogout";

}

或者:

functionremoveCurrentSession(){window.location.href="${pageContext.request.contextPath}/onLineUserInfoServlet.action"+"?

action=onLineLogout";

}

当然,该方法在如下的情况下,比如用户电脑突然停电、浏览器崩溃等无法让服务器程序及时获得客户端状态,浏览器在此时关闭时没有成功地通知服务器端程序。

(3)在onunload事件中要发送同步的AJAX请求到服务器端

而非默认的异步Ajax请求,因为调用异步的Ajax请求在一些浏览器下无法真正使服务器端程序得到通知,实际上根本无法保障!

在发出了这个异步请求之后,浏览器就要关闭窗口并清理所有相关资源,因为这是异步请求,所以浏览器有理由认为无需等待该请求完成即可开始关闭窗口,这样该请求就可能失败(IE上就是这样,用异步请求无法通知到服务器端程序)。

(4)也可以应用AJAX技术发送同步请求

同步的Ajax请求将使得浏览器会等待该请求完成后才关闭浏览器窗口并清理资源。

尽管Ajax技术应用中的第一个“a”指的是asynchronous异步,当初引入Ajax的主要目的就是引入一种异步执行的方法。

在绝大部分情况下应该使用异步方式执行Ajax请求。

同步Ajax也许应该叫做Sjax(其中的S是synchronously),XMLHttpRequest对象中的open函数的第三参数表示是同步还是异步

1)异步发送请求的代码示例:

xmlHttpObj.open("GET",url,true);

2)同步发送请求的代码示例:

xmlHttpObj.open("GET",url,false);

xmlHttpObj.open("GET",url,false);

xmlHttpObj.send(null);

vardataFromWebServer=xmlHttpObj.responseText;

注意此时不需要应用异步回调函数,而是直接获得服务器程序的返回结果。

而下面的代码是发送Post的同步请求:

xmlHttpObj.open("post",url,false);

xmlHttpObj.setRequestHeader("Content-type","application/x-www-form-urlencoded");

xmlHttpObj.send(sendThisDataAsAPost);

vardataFromWebServer=xmlHttpObj.responseText;

2、在示例项目中添加会话管理的Servlet组件OnLineUserInfoServlet程序类

(1)添加OnLineUserInfoServlet程序类,程序包名称为com.px1987.webcrm.servlet

(2)URL-Pattern设置为:

/onLineUserInfoServlet.action

(3)最后产生出下面的配置定义的结果

(4)编程实现OnLineUserInfoServlet程序中的功能实现方法

packagecom.px1987.webcrm.servlet;

importjava.io.IOException;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importjavax.servlet.http.HttpSession;

publicclassOnLineUserInfoServletextendsHttpServlet{

privatestaticfinallongserialVersionUID=1L;

publicOnLineUserInfoServlet(){

super();

}

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

StringrequestAction=request.getParameter("action");

if(requestAction.equals("onLineLogout")){

HttpSessionsession=request.getSession();

session.invalidate();//触发session被删除的事件

}

}

}

3、在页面中添加如下的代码

<%@pageisELIgnored="false"pageEncoding="GB18030"%>

DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

版权信息页

rel="stylesheet"type="text/css"/>

src='${pageContext.request.contextPath}/dwr/interface/JOnLineCounterProxy.js'>

src='${pageContext.request.contextPath}/dwr/engine.js'>

src='${pageContext.request.contextPath}/dwr/util.js'>

onunload=

配套讲稿:

如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

特殊限制:

部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

关 键  词:
利用 DWR 框架 反向 AJAX 技术 实现 Web 模式 实时 在线 用户 计数 应用 实例
提示  冰点文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:利用DWR框架反向AJAX技术实现Web模式的实时在线用户计数的应用实例.docx
链接地址:https://www.bingdoc.com/p-13887232.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2


收起
展开