欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

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

    • 资源ID:13887232       资源大小:245.46KB        全文页数:18页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    1、利用DWR框架反向AJAX技术实现Web模式的实时在线用户计数的应用实例1.1 利用DWR框架反向AJAX技术实现Web模式的实时在线用户计数的应用实例1.1.1 在示例项目的服务器端相关程序及配置文件的功能实现示例1、在项目的系统部署描述web.xml文件中配置定义出回传(PiggyBack)方式 dwr-invoker org.directwebremoting.servlet.DwrServlet config /WEB-INF/dwr.xml debug true logLevel DEBUG activeReverseAjaxEnabled true initApplicationS

    2、copeCreatorsAtStartup true 1 dwr-invoker /dwr/* 2、在示例项目中添加一个在线用户计数的程序组件(1)程序类名称为OnLineCounter,程序包名称为com.px1987.webcrm.util(2)编程该计数器类本示例采用单例模式实现package com.px1987.webcrm.util;public class OnLineCounter private int onlineUserCounter = 0; /不再需要设置为static 类型的变量 private static OnLineCounter oneOnLineCount

    3、er = null; /(1) private OnLineCounter() /(2) public static OnLineCounter newInstance() /(3) if(oneOnLineCounter=null) oneOnLineCounter=new OnLineCounter(); return oneOnLineCounter; /* 下面的所有方法不再需要设置为static方法 */ public synchronized void incrementCounter() onlineUserCounter+; public synchronized void r

    4、educeCounter() if(onlineUserCounter=0) return; onlineUserCounter-; public synchronized int getOnLineUserCounter() return onlineUserCounter; 3、在示例项目中添加一个记数组件的代理组件类(1)程序类名称为OnLineCounterProxy,程序包名称为com.px1987.webcrm.util(2)编程OnLineCounterProxy程序类package com.px1987.webcrm.util;import org.directwebremot

    5、ing.Browser;import org.directwebremoting.ScriptSessions;public class OnLineCounterProxy public OnLineCounterProxy() private int onlineUserCounter; public void piggyBackOnLineUserCounterToClient() onlineUserCounter= OnLineCounter.newInstance().getOnLineUserCounter(); Browser.withCurrentPage(new Runna

    6、ble() /启用监听客户端当前页线程 public void run() /把数据添加到客户端调用的方法中 ScriptSessions.addFunctionCall(receiveOnLineUserCounterFromServer, new Integer(onlineUserCounter); ); 在该类的piggyBackOnLineUserCounterToClient方法中回调客户端页面中指定的名称(本示例为receiveOnLineUserCounterFromServer)的JavaScript函数。4、编程实现对HttpSessionListener事件监听器程序(1

    7、)在项目中添加一个HttpSessionListener事件监听器程序类类名称为OnLineCounterListener ,包名称为com.px1987.webcrm.listener,实现javax.servlet.http.HttpSessionListener、javax.servlet.http.HttpSessionAttributeListener接口(2)将产生出下面的程序结果(3)编程OnLineCounterListener程序类中的功能实现方法package com.px1987.webcrm.listener;import javax.servlet.http.Http

    8、SessionAttributeListener;import javax.servlet.http.HttpSessionBindingEvent;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;import com.px1987.webcrm.util.OnLineCounter;public class OnLineCounterListener implements HttpSessionListener, HttpSessionAttributeListe

    9、ner public OnLineCounterListener() public void sessionCreated(HttpSessionEvent arg0) /创建会话 OnLineCounter.newInstance().incrementCounter(); public void sessionDestroyed(HttpSessionEvent arg0) /结束会话 OnLineCounter.newInstance().reduceCounter(); public void attributeAdded(HttpSessionBindingEvent event)

    10、public void attributeRemoved(HttpSessionBindingEvent event) public void attributeReplaced(HttpSessionBindingEvent arg0) 由于session监听的是HTTP连接,只要有用户与后台服务器连接,就算连接的是一个空白的JSP页面,也会触发session事件,所以此处的session实际上指的是连接数(Connection)。而如果还需要监控登录者的用户名达到显示在线用户名列表,则需要编程attributeAdded和attributeReplaced等方法。(4)部署OnLineCo

    11、unterListener监听器程序 com.px1987.webcrm.listener.OnLineCounterListener 5、在示例项目中新建dwr.xml配置定义文件 6、进入DWR的在线客户端测试页(1)http:/127.0.0.1:8080/webcrm/dwr/index.html(2)测试piggyBackOnLineUserCounterToClient方法的正确性 但页面会有错误,因为DWR的在线测试页不支持反向AJAX技术的测试。1.1.2 示例项目中客户端相关的程序及文件实例1、在页面中(authorInfo.jsp)定位显示在线计数的标签 版权信息页 JOn

    12、LineCounterProxy.piggyBackOnLineUserCounterToClient(); function receiveOnLineUserCounterFromServer(onLineUserCounterFromServer) document.getElementById(onLineUserCounterSpanTagID).innerHTML =onLineUserCounterFromServer; 版权所有:蓝梦集团网络信息资源中心,中国最优秀的J2EE平台开源社区,提供丰富的B2B 和B2C平台下的各种技术资料和在线服务 北京 ICP备012345678

    13、9号 网站统计 站长统计 目前在线人数是:人, 在线登录的用户名: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页面,并打开多个不同的浏览器来模拟多个不同的用户访问的状况,系统将能够及时并准确地计数出在线用户数量。目前的在线记数功能能够达到“实时”的效果,但如果某个用户离线(关闭浏览器、会话超时),不能实时显示变

    14、化后的新的在线人数。因为用户关闭了浏览器窗口就表明用户已经不在线了,所有的对话都应该要结束。但由于本示例项目中的服务器端程序并不能够及时地知道这个状态的变化。此时只要依赖于Session会话过期超时,但导致在线记数将不准确。1.1.3 解决用户离线时如何及时更新在线用户总数的问题1、更好地解决用户离线时的及时更新的问题方法(1)在用户关闭浏览器窗口时及时通知服务器端程序 在AJAX应用实例的实现方法中提及利用“在线注销”和“缩短会话超时时间”在实际应用方面都存在一定的不足,更好地解决用户离线时的及时更新的问题方法是“在用户关闭浏览器时,通知服务器端程序”。(2)利用onunload 事件通知服

    15、务器 在页面上注册 onunload 事件如 body元素的 onunload 属性,或直接设置 window.onunload。但要注意的是 onunload 而不是 onbeforeunload 事件,因为用户可以在 onbeforeunload 事件时选择“取消”从而不关闭窗口,而onunload 事件意味着窗口肯定是要被关闭的。代码示例如下: window.onunload = function() window.location.href=$pageContext.request.contextPath/onLineUserInfoServlet.action+ ?action=on

    16、LineLogout; 或者: function removeCurrentSession() window.location.href=$pageContext.request.contextPath/onLineUserInfoServlet.action+ ?action=onLineLogout; 当然,该方法在如下的情况下,比如用户电脑突然停电、浏览器崩溃等无法让服务器程序及时获得客户端状态,浏览器在此时关闭时没有成功地通知服务器端程序。(3)在onunload事件中要发送同步的AJAX请求到服务器端而非默认的异步Ajax请求 ,因为调用异步的Ajax请求在一些浏览器下无法真正使服务

    17、器端程序得到通知,实际上根本无法保障!在发出了这个异步请求之后,浏览器就要关闭窗口并清理所有相关资源,因为这是异步请求,所以浏览器有理由认为无需等待该请求完成即可开始关闭窗口,这样该请求就可能失败(IE上就是这样,用异步请求无法通知到服务器端程序)。(4)也可以应用AJAX技术发送同步请求同步的Ajax请求将使得浏览器会等待该请求完成后才关闭浏览器窗口并清理资源。尽管Ajax技术应用中的第一个“a”指的是 asynchronous 异步,当初引入Ajax的主要目的就是引入一种异步执行的方法。在绝大部分情况下应该使用异步方式执行Ajax请求。同步Ajax也许应该叫做 Sjax ( 其中的S是 s

    18、ynchronously),XMLHttpRequest对象中的open函数的第三参数表示是同步还是异步1)异步发送请求的代码示例:xmlHttpObj.open(GET, url, true); 2)同步发送请求的代码示例:xmlHttpObj.open(GET, url, false);xmlHttpObj.open(GET, url, false);xmlHttpObj.send(null);var dataFromWebServer = xmlHttpObj.responseText; 注意此时不需要应用异步回调函数,而是直接获得服务器程序的返回结果。而下面的代码是发送Post的同步请

    19、求:xmlHttpObj.open(post, url, false);xmlHttpObj.setRequestHeader(Content-type, application/x-www-form-urlencoded);xmlHttpObj.send(sendThisDataAsAPost);var dataFromWebServer = xmlHttpObj.responseText;2、在示例项目中添加会话管理的Servlet组件OnLineUserInfoServlet程序类(1)添加OnLineUserInfoServlet程序类,程序包名称为com.px1987.webcrm.

    20、servlet(2)URL-Pattern设置为:/onLineUserInfoServlet.action(3)最后产生出下面的配置定义的结果(4)编程实现OnLineUserInfoServlet程序中的功能实现方法package com.px1987.webcrm.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import j

    21、avax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class OnLineUserInfoServlet extends HttpServlet private static final long serialVersionUID = 1L; public OnLineUserInfoServlet() super(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException String requestAction=request.getParameter(action); if(requestAction.equals(onLineLogout) HttpSession session=request.getSession(); session.invalidate(); /触发session被删除的事件 3、在页面中添加如下的代码 版权信息页 body onload=dwr.engine.setActiveReverseAjax(true); onunload=


    注意事项

    本文(利用DWR框架反向AJAX技术实现Web模式的实时在线用户计数的应用实例.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


    收起
    展开