//统计在线人数
application.setAttribute("counter",new Integer(0));
out.println(application.getAttribute("counter"));
//记录在线人名
application.setAttribute("onlineName",new String(""));
out.println(application.getAttribute("onlineName"));
%>
</BODY>
</HTML>
count.JSP(用来统计总人数并显示到页面):
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
</head>
<BODY BGCOLOR="#FFFFFF" onUnload="javascript:cancel();">
<%
Integer i=(Integer)application.getAttribute("counter");
String name=(String)application.getAttribute("onlineName");
//StringBuffer total=new StringBuffer(name);
%>
<font color="blue">
<%out.println((String)Session.getAttribute("username"));%>您好:
</font>
<br><font color="blue">
当前在线人数:<%=i%>
</font>
<br>
<font color="red">
在线人总名册:<%out.println(name);%>
</font>
</BODY>
</HTML>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
</head>
<BODY BGCOLOR="#FFFFFF" onUnload="javascript:cancel();">
<%
Integer i=(Integer)application.getAttribute("counter");
String name=(String)application.getAttribute("onlineName");
%>
<br><font color="blue">
当前在线人数:<%=i%>
</font>
<br>
<font color="red">
在线人总名册:<%out.println(name);%>
<font color="blue">
<%//out.println((String)Session.getAttribute("username"));%>
</font>
</font>
<script language="javascript">
<!--
function cancel(){
<%
if(Session.getAttribute("username")!=""&&Session.getAttribute("username")!=null){
//cancelname为注销的人名
String cancelname;
cancelname=(String)Session.getAttribute("username");
//out.println(cancelname);
//j为cancelname在总名册中的初始位置
//k为cancelname的总长度
//t为cancelname在总名册中的结束位置
int j,k,t;
j=name.indexOf(cancelname);
k=cancelname.length();
t=j+k;
//out.println(j);
//out.println(t);
///总名词中去除cancelname
StringBuffer total=new StringBuffer(name);
total=total.delete(j-4,t);
//总人数减1
i=new Integer(i.intValue()-1);
application.setAttribute("counter",i);
name=(String)total.toString();
application.setAttribute("onlineName",name);
//out.println("window.alert('"+name+"')");
Session.setAttribute("username","");
}
%>
}
-->
</script>
</BODY>
</HTML>
--------------------------------------------------------------------------------
你可以用HttpSessionListener来实现,用它来监听session!
定义一个int number;
public void sessionCreated(HttpSessionEvent ev){
number++;
]
public void sessionDestroyed(HttpSessionEvent ev){
number--;
]
类似这样,具体的功能你自己实现,即监听session的数量来控制在线人数!
--------------------------------------------------------------------------------
在线人数统计
需积分: 0 188 浏览量
更新于2008-08-06
收藏 1KB RAR 举报
在线人数统计是网络应用中常见的功能,用于实时展示当前网站或平台上有多少用户正在活动。在本场景中,我们将探讨如何使用JavaScript实现这样的统计模块,同时结合Java后端技术进行数据处理和存储。以下是关于这个主题的详细知识讲解:
1. **JavaScript基础**:
JavaScript是一种广泛用于Web开发的脚本语言,它主要运行在用户的浏览器端,能够动态更新网页内容,处理用户交互。在线人数统计功能通常依赖JavaScript来收集和处理前端数据。
2. **事件监听**:
要统计在线人数,首先要监听用户的行为,例如页面加载、页面离开等事件。JavaScript中的`window.onload`和`window.unload`事件分别用于检测页面加载完成和用户离开页面。
3. **AJAX异步通信**:
当用户事件触发时,JavaScript可以通过AJAX(Asynchronous JavaScript and XML)发送异步请求到服务器,报告用户的状态改变。如今,更常用的API是`fetch`或`XMLHttpRequest`。
4. **计数逻辑**:
服务器端接收到请求后,需要维护一个在线用户计数器。每当有用户加入或离开时,计数器相应增加或减少。计数逻辑可以设计为原子操作,以防止并发问题。
5. **Java后端处理**:
使用Java作为后端语言,我们可以利用Spring框架、Express.js(如果使用Node.js环境)或其他HTTP服务器库处理这些AJAX请求。Java的`synchronized`关键字或`ReentrantLock`可以帮助我们实现线程安全的计数。
6. **数据库存储**:
用户数量可能需要持久化存储,以便后续分析或展示。Java可以与多种数据库(如MySQL、MongoDB或Redis)进行交互。如果需求简单,也可以选择内存数据库,如Redis,它支持高效的原子操作,非常适合计数场景。
7. **实时更新**:
前端展示的在线人数需要实时更新,可以使用WebSocket提供双向通信,服务器主动推送最新计数到客户端。WebSocket API在JavaScript中易于使用,Java后端则可以通过库如`Jetty`或`Tomcat`的WebSocket支持实现。
8. **优化与安全性**:
为了防止恶意刷量,可以设置IP限制或者使用Cookie来识别唯一用户。此外,考虑性能优化,避免频繁的数据库操作,可以设定一定的刷新间隔,比如每分钟更新一次在线人数。
9. **前端展示**:
在HTML页面中,用JavaScript动态修改显示的在线人数,可以使用模板引擎如Mustache或EJS简化工作,或者直接操作DOM元素。
10. **测试与监控**:
确保进行充分的单元测试和集成测试,验证统计功能的正确性。同时,通过日志和监控工具(如Prometheus、Grafana)监控在线人数的变化,及时发现并解决问题。
实现在线人数统计涉及前端JavaScript的事件监听、AJAX通信,后端Java的计数逻辑处理,以及数据库交互和前端展示。理解这些知识点,并将其应用于实际项目,将帮助你构建出稳定可靠的在线人数统计系统。
hsq_123
- 粉丝: 1
- 资源: 44
最新资源
- cim-websocket
- TouchSocket-websocket
- ubuntu-ubuntu
- ABAQUS UMAT&VUMAT子程序二次开发实例源码Fortran DISP 材料损伤断裂弹塑性
- comsol介质阻挡放电DBD模型,可以得到电子数目密度和电子密度等分布
- 声子晶体声表面波光学特性
- 西门子1200博图程序冷却油泵PID控制系统,和多台油泵及水泵G120西门子变频器Modbud RTU通讯,画面采用西门子KTP700触摸屏,内有变频器参数 Modbus通讯报文详细讲解,PID带手动
- STM32F405_RAW-stm32cubemx
- 西门子1200 1500博途单部电梯程序,文件包含一个四层电梯程序,三个六层电梯程序,版本TIA16 仅一个六层电梯有触摸屏画面,程序仅限于用于参考对比 博图版本V15.1及以上
- Javascript-javascript
- 西门子1200PLC加KTP触摸屏画面博途程序案例,博图版本V16,程序具体为电池涂布机浆料输送系统新能源项目 程序结构分: 1.配料系统物料分配输送 2.模拟量转,监测
- 西门子S7-1500暖通空调冷水机组PLC程序案例, 硬件采用西门子1500CPU+ET200SP接口IO模块,HMI采用西门子触摸屏 程序采用SCL控制程序编程,系统水泵采用一用一备,通过程序实现
- 西门子200Smart加维纶触摸屏程序画面程序案例,项目内容为某制造企业疫苗车间控制系统,报告配液工艺,发酵工艺,纯化工艺及CIP清洗工艺控制 程序结构清晰,控制功能较多,包含模拟量,泵,PID,U
- stm32CubeMx_F429-stm32cubemx
- 51单片机8路抢答器(二)C程序、proteus仿真、报告 支持按键设置、LED数码管显示 支持按键设置开始、加分、减分、准备 1.八个按键分别表示1至8号选手 2当按下开始键后,从10秒开始倒计
- ModBus-stm32cubemx