跟我学AJAX技术应用AJAX技术实现Web网站的实时在线用户计数的应用示例第二部分

上传人:仙*** 文档编号:101090406 上传时间:2022-06-04 格式:DOC 页数:9 大小:338.50KB
返回 下载 相关 举报
跟我学AJAX技术应用AJAX技术实现Web网站的实时在线用户计数的应用示例第二部分_第1页
第1页 / 共9页
跟我学AJAX技术应用AJAX技术实现Web网站的实时在线用户计数的应用示例第二部分_第2页
第2页 / 共9页
跟我学AJAX技术应用AJAX技术实现Web网站的实时在线用户计数的应用示例第二部分_第3页
第3页 / 共9页
点击查看更多>>
资源描述
1.1 跟我学AJAX技术应用AJAX技术实现Web网站的实时在线用户计数的应用示例(第二部分)1.1.1 测试本示例项目功能实现的效果1、部署该Web应用2、启动Tomcat服务器3、输入并打开多个不同的浏览器来模拟多个不同的用户,系统将能够及时并准确地计数。1.1.2 进一步完善本示例1、解决用户离线时的及时更新的问题方法之一:利用“在线注销”由于某个用户关闭浏览器窗口,浏览器没有通知服务器,从而在服务器端没有更新记数器。(1)添加“在线注销”功能,但这样的方法的效果不是太理想。在线注销 (2)实现的原理在该超链接中对后台发送用户离线的信息(浏览器窗口正要被关闭),从而使得后台能够知道浏览器窗口现在正在关闭。这样session的close事件能够正常地被捕获。(3)修改OnLineUserInfoServlet程序package com.px1987.webcrm.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet. . Servlet;import javax.servlet. . ServletRequest;import javax.servlet. . ServletResponse;import javax.servlet. . Session;import com.px1987.webcrm.util.OnLineCounter;public class OnLineUserInfoServlet extends Servlet public OnLineUserInfoServlet() super();public void doPost( ServletRequest request, ServletResponse response)throws ServletException, IOException String requestAction=request.getParameter(action);if(requestAction.equals(showOnLineUserCounter)doShowOnLineUserCounter(request,response);else if(requestAction.equals(onLineLogout) Session session=request.getSession();session.invalidate(); /触发session被删除的事件public void doGet( ServletRequest request, ServletResponse response)throws ServletException, IOException String requestAction=request.getParameter(action);if(requestAction.equals(onLineLogout) Session session=request.getSession();session.invalidate(); /触发session被删除的事件public void doShowOnLineUserCounter( ServletRequest request, ServletResponse response)throws ServletException, IOException response.setContentType(text/html;charset=gb2312);PrintWriter out = response.getWriter();int onlineUserCounter=OnLineCounter.getOnLineUserCounter();out.print(onlineUserCounter);out.flush();out.close();2、再进行该Web并测试 :/127.0.0.1:8080/webcrm/index.jsp(1)点击其中的某个页面中的“在线注销”链接而退出后的结果(2)系统及时更新在线计数(3)而如果某个操作者直接关闭浏览器而退出系统后的结果将不能及时更新在线计数3、解决用户离线时的及时更新的问题方法之二:缩短会话超时时间(1)会话超时在 协议中,客户机不再活跃时没有明确的终止信号.这意味着只有超时才是标识客户机不再活跃的唯一机制。(2)通过配置方式改变会话超时值 5 需要在5分钟以后(在本示例中的会话超时为5分钟)将自动更新在线计数人数。session-config元素为Web应用中的javax.servlet. . Session对象定义参数。session-timeout元素用来指定默认的会话超时时间间隔,以分钟为单位。该元素值必须为整数。如果session-timeout元素的值为零或负数,则表示会话将永远不会超时。(3)当然,也可以通过编程实现缺省的会话超时由servlet容器定义,在 Session接口上调用getMaxInactiveIntervalfangaf得到该值.开发人员可以使用 Session接口上的setMaxInactiveInterval方法改变该值.时间单位是秒.若设置为-1,表示该会话永不过期。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; 或者: function removeCurrentSession() 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),XML Request对象中的open函数的第三参数表示是同步还是异步1) 异步发送请求的代码示例:xml Obj.open(GET, url, true); 2) 同步发送请求的代码示例:xml Obj.open(GET, url, false);xml Obj.open(GET, url, false);xml Obj.send(null);var dataFromWebServer = xml Obj.responseText;注意此时不需要应用异步回调函数,而是直接获得服务器程序的返回结果。而下面的代码是发送Post的同步请求:xml Obj.open(post, url, false);xml Obj.setRequestHeader(Content-type, application/x-www-form-urlencoded);xml Obj.send(sendThisDataAsAPost);var dataFromWebServer = xml Obj.responseText;2、在包含的通用资源页面(如)中添加如下的代码 function removeCurrentSession()window.location.href=$pageContext.request.contextPath/onLineUserInfoServlet.action+ ?action=onLineLogout; 3、测试现在的效果(1)分别打开不同个数的浏览器,并观察在线用户记数的状况(2)然后再关闭其中的某个浏览器窗口
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!