使用AJAX技术,结合监听器,实现页面中动态显示当前网站在线人数(电子工业出版社《Java Web程序设计》P171第九题)

news/2024/5/20 13:00:54/文章来源:https://blog.csdn.net/weixin_51282350/article/details/122692753

导航

    • 先上思维图纸
    • 第一步: 参考了课本(如题教材)实现了Listener
    • 第二步:个性化适配
    • 第三步:实现JSP界面
    • 总体问题:

刚看到的时候心里想的是写一个Servlet集成Listener的相关接口实现。然后JSP的JS每1ms获取一次doGet()中的数据实时刷新。

但是中途不知道出现什么问题,老是不成功。

然后更换了在Listener之外重新写了一个Servlet,但是Context中的数据共享老是失败。

最后更换了方案,Listener将数据先传输到log.txt文件,JS实时将数据从txt文件中获取,传递给HTML。

但是这个方案出现了很大的问题,就是响应的时间过长(长到怀疑人生,中途我还以为自己方案出问题了,关闭服务器重新调试),这只是个“捷径方案”,在这篇总结写完之后还是要重新尝试Servlet集成的方案。响应时间应该可以正常一些。

其实就是懒得写Servlet (大雾)

先上思维图纸

在这里插入图片描述

第一步: 参考了课本(如题教材)实现了Listener

但是在后续发现需要个性化调整的部分有很多。

package com.filter;import java.io.PrintWriter
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;/*** Application Lifecycle Listener implementation class OnLineuser**/
@WebListener
public class OnLineuser implements ServletContextListener, HttpSessionListener {private int count=0;private ServletContext context=null;/*** Default constructor. */public OnLineuser() {// TODO Auto-generated constructor stub/*** @see HttpSessionListener#sessionCreated(HttpSessionEvent)*/public void sessionCreated(HttpSessionEvent se)  { // TODO Auto-generated method stubcount++;context.setAttribute("count", (Integer)count);System.out.println("创建session方法启动,当前Session数:"+count);}/*** @see HttpSessionListener#sessionDestroyed(HttpSessionEvent)*/public void sessionDestroyed(HttpSessionEvent se)  { // TODO Auto-generated method stubcount--;context.setAttribute("count", (Integer)count);System.out.println("删除session方法启动,当前Session数:"+count);}/*** @see ServletContextListener#contextDestroyed(ServletContextEvent)*/public void contextDestroyed(ServletContextEvent sce)  { // TODO Auto-generated method stubcontext=null;System.out.println("消除context方法启动");}/*** @see ServletContextListener#contextInitialized(ServletContextEvent)*/public void contextInitialized(ServletContextEvent sce)  { // TODO Auto-generated method stubcontext=sce.getServletContext();System.out.println("创建context方法启动");}}

第二步:个性化适配

加上输出count输出到log.txt文件的方法,删去我们愚蠢的 方案不需要的Context监听接口。

package com.filter;import java.io.FileOutputStream;
import java.io.PrintWriter;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;/*** Application Lifecycle Listener implementation class OnLineuser**/
@WebListener
public class OnLineuser implements ServletContextListener, HttpSessionListener {private int count=0;/*** Default constructor. */public OnLineuser() {// TODO Auto-generated constructor stub}private void logout(int message){PrintWriter out=null;try {out=new PrintWriter(new FileOutputStream("D://ServletDemo/src/main/webapp/log.txt"));out.println(message);out.close();}catch(Exception e) {out.close();e.printStackTrace();//控制台输出;}}/*** @see HttpSessionListener#sessionCreated(HttpSessionEvent)*/public void sessionCreated(HttpSessionEvent se)  { // TODO Auto-generated method stubcount++;System.out.println("创建session方法启动,当前Session数:"+count);logout(count);}/*** @see HttpSessionListener#sessionDestroyed(HttpSessionEvent)*/public void sessionDestroyed(HttpSessionEvent se)  { // TODO Auto-generated method stubcount--;System.out.println("删除session方法启动,当前Session数:"+count);logout(count);}
}

第三步:实现JSP界面

着重注意JS部分,是实现AJAX技术的关键。注意实现URL:count+i的操作是实现多次请求的技术关键点。使服务器判断这重复发的请求不是一个而是多个,避免不需要的意外。关键使每1ms重复获取数据一次。

<script type="text/javascript">var xmlHttp;var i=0;function createXMLHttpRequest(){xmlHttp=new XMLHttpRequest();}function updateUser(){createXMLHttpRequest();xmlHttp.onreadystatechange=processor;i=i+1;xmlHttp.open("GET", "log.txt?count="+i);<!--关键1-->xmlHttp.send(null);}function processor(){if(xmlHttp.readyState==4){if(xmlHttp.status==200){document.getElementById("count").innerHTML=xmlHttp.responseText;}}}setInterval("updateUser();",1);<!--关键2-->
</script>
<title>动态显示在线人数</title>
</head>
<body>在线人数:<br><div id="count"></div><!-- 直接连接log.txt -->
</body>
</html>

总体问题:

长延迟是程序的最大问题,从Listener传递数据到log.txt的速度很快(正常),但是从txt到JS的反应速度慢的可怕。下一节使用Servlet内置Listener看看反应速度会不会快点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_871203.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

curl网站开发指南

来源&#xff1a;http://www.ruanyifeng.com/blog/2011/09/curl.html curl网站开发指南 作者&#xff1a; 阮一峰 我一向以为&#xff0c;curl只是一个编程用的函数库。 最近才发现&#xff0c;这个命令本身&#xff0c;就是一个无比有用的网站开发工具&#xff0c;请看我整理…

怎样用SharePoint创建网站?

SharePoint能够让企业开发出智能的门户站点&#xff0c;无缝连接用户、团队及信息。下面&#xff0c;我们就将教你如何在sharepoint中创建网站&#xff1a; 创建网站 2. 在 SharePoint 主页上选择“ 创建网站”。 3. 在向导中对网站属性进行基本设置&#xff0c;如网站类型、网…

Linux 安装apache ,发布网站修改端口和配置第二顺位默认发布文件

1.安装apache 软件和手册 2.发布网站&#xff0c;找到默认的发布目录 用xftp 链接上自己的主机传送需要发布的网站到/var/www/html 目录下 使用命令ls查看是否有文件上传 上传成功打开浏览器&#xff0c;输入主机名&#xff0c;查看是否发布成功 3.修改默认端口 #主配置目录 …

js逆向入门网站分析(某空气质量监测平台)

文章目录 前言一、瞧一瞧网站是啥样呢二、新的开始&#xff0c;新的挑战2.1通过第一个 eval2.2分析第二个eval 三、模拟得到服务器传回的数据3.1如何得到关键js文件3.2如何模拟运行eval3.3匹配参数3.4发出请求3.5解密数据 前言 又要到放假的时间啦&#xff0c;学习了好一段时间…

novipnoad电影网站分析

文章目录 前言一.url跳转反调试二.整个过程分析2.1ts重定向2.2 寻找m3u82.3寻找ckey 声明&#xff1a;本文只作学习研究&#xff0c;禁止用于非法用途&#xff0c;否则后果自负&#xff0c;如有侵权&#xff0c;请告知删除&#xff0c;谢谢&#xff01; 前言 记录远哥讲的一次…

学习前端的有用网站

藏匿 1. 文档型教程 1.1 HTML教程 W3C的HTML教程 1.2 CSS教程 W3C的CSS教程 W3C Candidate Recommendation Draft 1.3 JavaScript教程 MDN的JavaScript教程 2.视频型教程 2.1 HTML & CSS Udemy排名第一的 HTML5CSS3 课程 2.1 JavaScript Udemy排名第一的JavaSc…

大型分布式网站架构

大型分布式网站架构 2016-02-22 17:50 480人阅读 评论(0) 收藏 举报 大型分布式网站架构技术总结 本文是学习大型分布式网站架构的技术总结。对架构一个高性能&#xff0c;高可用&#xff0c;可伸缩&#xff0c;可扩展的分布式网站进行了概要性描述&#xff0c;并给出一个架…

各大日语学习网站整理

日语学习网站 一、http://www.gavo.t.u-tokyo.ac.jp/ojad/search 二、http://yomikatawa.com/ 三、http://nlt.tsukuba.lagoinst.info/ 四、http://j-nihongo.com/about/ 五、https://mnamae.jp/ 六、http://18.art-studio.cc/~koenoizumi/ 七、http://www.jakka.jp/index.htm…

c# 爬虫之(搜狗微信网站)

1、需求获取搜狗微信网站 通过关键词搜索得到的结果列表及详情 2、通过跟踪发现具体的url为&#xff1a;https://weixin.sogou.com/weixin?query%E9%92%9B%E6%A3%92%E6%BB%A4%E8%8A%AF&_sug_type_&s_frominput&_sug_n&type2&page2&ieutf8 其中query…

基于ASP.NET的日语学习网站 毕业设计成品讲解(程序+论文)-王翔-专题视频课程...

基于ASP.NET的日语学习网站 毕业设计成品讲解&#xff08;程序论文&#xff09;—1467人已学习 课程介绍 本文是基于ASP.NET的日语学习网站的毕业设计成品讲解&#xff0c;包括整套网站程序、数据库和配套的论文&#xff0c;网站期初使用的技术和设计比较一般&#xff0c;本…

基于ASP.NET网站开发的 SQL SERVER 数据库教学辅导 新手基础实用技术精讲-王翔-专题视频课程...

基于ASP.NET网站开发的 SQL SERVER 数据库教学辅导 新手基础实用技术精讲—1183人已学习 课程介绍 ASP.NET网站开发 数据库教学辅导 实用技术精讲,主要针对基于ASP.NET的Visual Studio 2010和SQL SERVER 2008 R2下开发的基础数据库部分 课程收益 快速掌握对数据库开发的基础…

从小型网站到超大规模网站的MySQL参考架构

转自&#xff1a;http://www.infoq.com/cn/news/2013/03/MySQL-Reference-Architectures Oracle发布《面向大规模可伸缩网站基础设施的MySQL参考架构》白皮书&#xff0c;针对将MySQL用作数据存储的不同类型和不同规模的网站给出了推荐的拓扑结构。 根据分别提供4类服务——用…

读书笔记-大型网站架构案例分析

从事传统软件行业多年&#xff0c;一直钻研于基于企业应用环境下的快速开发平台&#xff0c;而这种平台应用场景同时在线人数也不会超过百人&#xff0c;同一业务并发数在同一时间点或段内出现猛烈的增长&#xff0c;曾经也一度想设计一个怎样怎么样的NB架构&#xff0c;但现在…

网站交互相互技术

cookie和session什么区别&#xff1f; 1、cookie存本地&#xff0c;session存服务器 2、cookie只能存最大4k&#xff0c;session可以无限大

jmeter与apache测试网站并发

本文主要介绍性能测试中的常用工具jmeter的使用方式&#xff0c;以方便开发人员在自测过程中就能自己动手对系统进行自动压测和模拟用户操作访问请求。最后还用linux下的压测工具ab做了简单对比。 1. Jmeter相关概念简介&#xff1a; JMeter是Apache组织开发的基于Java的压…

大型网站架构演变过程理解

web动静资源分离 浏览器的请求分为静态资源请求&#xff0c;与动态资源请求。 静态有&#xff1a;html文件&#xff0c;js脚本&#xff0c;css等。 动态有&#xff1a;jsp&#xff0c;php等 http服务器用来处理静态请求&#xff0c;应用服务器处理动态请求。分别可以称为前端…

解决火车头7.6版本无法采集部分https网站处理方法

因为现在大多数网站都采取https&#xff0c;导致很多网站无法采集。那哪行&#xff0c;肯定得有解决办法&#xff0c;今日就说说关于火车头采集器7.6版本无法采集部分https网站处理方法。 火车头7.6版本由于发布时间久远&#xff0c;虽然采集器大部分功能都还可以正常使用&…

destooon7.0装修网站源码带分站多地区带设计报价

源码为destoon7.0系统&#xff0c;整站打包&#xff0c;功能很多&#xff0c;不保证无bug&#xff0c;请测试好演示站&#xff1b; 安装测试环境为&#xff1a;宝塔-php-mysql&#xff1b; 源码带手机版&#xff0c;dt内核&#xff0c;安全稳定&#xff0c;支持二次开发等 下…

响应式行业资讯网类网站织梦mip模板带数据完整无错版

织梦最新内核开发的模板&#xff0c;该模板属于比特币新闻资讯类、博客类企业都可使用&#xff0c; 这款模板使用范围极广&#xff0c;不仅仅局限于一类型的企业&#xff0c;你只需要把图片和产品内容&#xff1b; 换成你的&#xff0c;颜色都可以修改&#xff0c;改完让你耳目…

响应式自适应推土机挖掘机机械类网站织梦模板

响应式自适应推土机挖掘机机械类网站织梦模板介绍 响应式自适应推土机挖掘机机械类网站织梦模板&#xff0c;此套dedecms模板可以作为推土机挖掘机机械类、大型机械重工类网站&#xff0c;比较简洁实用的网站模板&#xff0c;是做推土机挖掘机机械类、大型机械重工类网站朋友的…