`
zscomehuyue
  • 浏览: 412012 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在线人数统计,解决了关闭浏览器窗口,释放session的问题

阅读更多
在线人数统计,解决了关闭浏览器窗口,释放session的问题
关键字: jsp

/SessionCounter.java\ozdvw
package SessionCount;e?
import javax.servlet.*; L9k0
import javax.servlet.http.*; plT
import java.io.*; w;
import java.util.*; JC;@
©达内科技论坛 -- 达内科技论坛  @b!Q5
public class SessionCounter extends HttpServlet  implements HttpSessionListener { 2#
private static final String CONTENT_TYPE = "text/html; charset=GBK"; bd35
private static int activeSessions = 1; xZi"Yx
//Initialize global variables +iRX;1
public void init() throws ServletException { n3
©达内科技论坛 -- 达内科技论坛  {Ytdk
} ©达内科技论坛 -- 达内科技论坛  ri04&
©达内科技论坛 -- 达内科技论坛  C
//Process the HTTP Get request @8Ob%
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { zH
  response.setContentType(CONTENT_TYPE); EPjJ
  HttpSession session=request.getSession(); ]g
} ©达内科技论坛 -- 达内科技论坛  )9lR?P
©达内科技论坛 -- 达内科技论坛  !S
//Clean up resources UxUNe
public void destroy() { :=e2NM
} ©达内科技论坛 -- 达内科技论坛  W'F
©达内科技论坛 -- 达内科技论坛  aHW&x9
public void sessionCreated(HttpSessionEvent httpSessionEvent) { HH
  activeSessions++; DyZpv
} ©达内科技论坛 -- 达内科技论坛  4WJ
©达内科技论坛 -- 达内科技论坛  8)#.
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { \s,_t
  activeSessions--; *z
  System.out.println("test test");$s0T@W
//  System.out.println("---111"); ZF+
} ©达内科技论坛 -- 达内科技论坛  MX
public static int getActiveSessions() { tQ
return activeSessions; )a4
} ©达内科技论坛 -- 达内科技论坛  y%s
} ©达内科技论坛 -- 达内科技论坛  n-=u*
////$E
////1^[
//count.jsp?
<%@ page import="SessionCount.SessionCounter"%> r-cXS
<%@ page language="java"  contentType="text/html; charset=gb2312"{Z
   pageEncoding="gb2312"%>~|Q"eP
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">, l
<html>z>
<head>&5)~
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">%G*M?
<title>Insert title here</title>ij7z
</head>$i:
<script language="javascript" type="text/javascript">?.k
<!--#*>}
function MM_callJS(jsStr) { //v2.0mnu)IK
return eval(jsStr)-A
}©达内科技论坛 -- 达内科技论坛  ]M\-
//-->#}q
</script>rs(
<script language="javascript">Ax%Qs3
function removeline(){Q \@
if(event.clientX<0&&event.clientY<0).45
{©达内科技论坛 -- 达内科技论坛  y!Rw%u
document.write('<iframe width="100" height="100" src="remove.jsp"></iframe><OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0  id=WebBrowser width=0></OBJECT>');Dgo!x
document.all.WebBrowser.ExecWB(45,1);[
}©达内科技论坛 -- 达内科技论坛  ad6+
}©达内科技论坛 -- 达内科技论坛  1`maF
</script>0.
©达内科技论坛 -- 达内科技论坛  9
<body onUnload="MM_callJS('removeline()')">I=QwN
在线:<%= SessionCounter.getActiveSessions() %> Abd\
</body>.
</html>YZmy
////////////////////////////////6K6(k
///////////////////////////////HoW?y
remove.jspZ{>=
/////©达内科技论坛 -- 达内科技论坛  ]|65(
<%@ page language="java" contentType="text/html; charset=gb2312"!
   pageEncoding="gb2312"%>4"cD
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">|r<G
<html>8
<head>m.
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">$#9
<title>Insert title here</title>H/hoe0
</head>z_g_
<body>?=9
<%session.invalidate();%>i
</body>-r
</html>Lw;7{.
///////////////////////////}PiE
/////////////////////////////[
web.htmlP&
^^^^^^^^^^^^加上Bz2J
<listener> y+
  <listener-class>SessionCount.SessionCounter</listener-class> q1d{
</listener> h1
if(event.clientX<0&&event.clientY<0)判断浏览器是关闭还是刷新 ,因为刷新也会调用onunload&&
©达内科技论坛 -- 达内科技论坛  c07F
document.all.WebBrowser.ExecWB(45,1);是无提示的关闭浏览器!Q!*pf
classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 |0gLI
这个是调用不弹出对话框的方法,实际是调用系统的方法如下 ]9M
document.all.WebBrowser.ExecWB(45,1); f:
因为在javascript当中不能调用java方法,所以选择另外写一个jsp文件用于调用,;?(5yi
invalidate()方法,(?A|`K
©达内科技论坛 -- 达内科技论坛  xv
现在这个结果是正确的,因为我把private static int activeSessions = 1; //这里改成了1,本来照理应该设为0的,可以我运行第一次http://localhost:8080/servlet/count.jsp的时候得到的是0,所以我才把它改成1的,dKOp0
那们老师或同学知道的话,麻烦告诉怎么为事,为什么在第一次创建session时不能触发事件sessionCreated()Rw

现在这个结果是正确的,因为我把private static int activeSessions = 1; //这里改成了1,本来照理应该设为0的,可以我运行第一次http://localhost:8080/servlet/count.jsp的时候得到的是0,所以我才把它改成1的, h(
,为什么在第一次创建session时不能触发事件sessionCreated()g?

session是个双向机制,第一次访问的时候,是从客户端发起的,浏览器不知道这个网页是否需要session,所以浏览器不会创建sessionId,当这个请求到达服务器的时候,没有sessionId,d}--5
©达内科技论坛 -- 达内科技论坛  r0_/S
SessionCounter 是被嵌在jsp里的,所以第一次显示的时候,得到jsp页面的session创建是在jsp页面滞后,也就是说SessionCounter是滞后于jsp页面的.xKTZrv
©达内科技论坛 -- 达内科技论坛  V@)
顺便说一句,extends HttpServlet 是多余的。]&

在页面里页设置一个退出按钮.调用quit.jsp=
它的内容是:h>
我们用一个quit.jsp来处理用户退出系统的操作,quit.jsp负责注销session,及时释放资源。>D6T
©达内科技论坛 -- 达内科技论坛  uj&B
  ·注销session。Z5K&
©达内科技论坛 -- 达内科技论坛  ##
  ·关闭浏览器窗口。@Q(
©达内科技论坛 -- 达内科技论坛  TP^wA
  其代码如下所示:"
©达内科技论坛 -- 达内科技论坛  IWeVHc
1. <%@ page contentType="text/html; charset=GBK" %>z
2. <%E
3.  session.invalidate();F"[}H
4. %>A
5. <script language="javascript" >4_
6.  window.opener = null;`ngL
7.  window.close();M|j%
8. </script> OnZH?
©达内科技论坛 -- 达内科技论坛  3-L-
  其中第3行负责注销session,原先放入session的对象将解绑定,等待垃圾回收以释放资源。对于本例而言,session中有一个名为 ses_userBean的userBean对象(它是在switch.jsp中放入session的),调用session.invalidate() 后,userBean从session中解绑定,它的valueUnbound()方法会被触发调用,然后再等待垃圾回收。A/cr
©达内科技论坛 -- 达内科技论坛  +Nb
  第5~8行是一段javascript脚本程序,负责关闭窗口,如果网页不是通过脚本程序打开的(window.open()),调用 window.close()脚本关闭窗口前,必须先将window.opener对象置为null,如第6行所示,否则浏览器会弹出一个确定关闭的对话框,笔者发现这个问题困扰了不少的Web程序员,故特别指出。
分享到:
评论

相关推荐

    Spring boot通过HttpSessionListener监听器统计在线人数的实现代码

    - 为了防止用户在同一个浏览器使用多个tab或窗口时导致在线人数统计重复计数,可以将用户唯一标识符(如session中的某个属性)存储到一个HashSet集合中。在`sessionDestroyed`方法中,可以从HashSet中移除对应的...

    网页在线人数统计

    网页在线人数统计是网站...总之,网页在线人数统计是一个涉及多方面技术的问题,可以通过多种方式实现,上述方法仅是一种基础且直观的解决方案。在实际应用中,还需要根据网站的具体需求和环境进行相应的优化和调整。

    在线人数统计程序.rar

    这个"在线人数统计程序.rar"是一个特别设计的解决方案,它无需依赖Global.asa文件,这对于那些不支持或限制使用此文件的免费Web托管服务尤其有用。Global.asa文件在ASP(Active Server Pages)中是一个重要的组件,...

    .net C# 通过session控制重复登录及在线用户统计

    - **强制登出**:销毁当前`Session`,并允许新登录,这样可以防止同一用户在多个设备或浏览器窗口同时登录。 - **多设备支持**:允许用户在多个设备上同时登录,但限制某些操作(如修改密码)只能在一个会话中进行...

    jsp实现在线人数及在线用户统计

    ### JSP实现在线人数及在线用户统计 #### 知识点概述 在现代Web开发中,统计在线人数和在线用户是十分重要的功能之一,尤其是在构建社区、论坛等交互性强的网站时。通过JSP(JavaServer Pages)可以方便地实现这一...

    php获取在线人数

    在服务器端,我们可以定期检查所有活跃Session,并统计在过去一段时间内有更新的Session数量,这就是在线人数。 关键代码可能如下: ```php session_start(); if(!isset($_SESSION['last_activity']) || (time...

    Web网站(在线人数)

    在Web开发领域,统计在线人数和历史访问人数是衡量网站活跃度、用户参与度和优化用户体验的重要指标。本文将深入探讨如何实现这一功能,并提供相关的技术细节。 首先,要统计当前在线人数,我们通常需要考虑以下几...

    Discuz! X3服务器优化设置.docx

    11. **是否关闭session机制**:在在线用户数超过2万时,关闭session机制可以显著减轻服务器负担,但同时会导致游客数、用户在线时长统计及在线用户列表功能失效。 通过以上各项设置的调整,可以有效地平衡Discuz! ...

    Application,Session,Cookies对象应用介绍

    这使得Application对象非常适合用来统计网站的访问量,比如记录在线人数或者累计页面访问次数。当IIS(Internet Information Services)启动时,会触发Application_Start()事件,而当IIS停止时,触发Application_End...

    新思维防刷新计数器

    总之,《新思维防刷新计数器》是一个实用的工具,它结合了ASP编程技术和防止刷新的策略,为网站管理员提供了实时、准确的在线访问人数统计。对于想要学习Web开发和统计技术的初学者来说,这是一个很好的学习资源。...

    asp.net下判断用户什么时候离开,以什么方式离开

    通过这种方式,每当用户关闭浏览器窗口时,服务器端都会收到通知,并能据此更新在线用户计数器。 #### 五、总结 综上所述,在ASP.NET环境中判断用户何时离开以及以何种方式离开需要综合运用客户端脚本和服务器端...

    ASP200问.EXE

    59.如何使用Counters组件实现网站访问人数统计 60.如何使用ASPPing组件 61.如何使用ASPHttp组件 62.如何用Visual Basic编写ActiveX DLL及其使用 63.如何远程注册DLL文件 64.如何把ASP代码编写成DLL文件 65.如何在ASP...

    JSP聊天室课程设计

    - **Application对象**:代表整个Web应用程序的共享域,所有用户都可以访问其中的数据,常用于全局变量或统计在线人数。 - **Request对象**:它包含了来自客户端的HTTP请求信息,如请求参数、头信息等,是处理HTTP...

    php利用cookie实现访问次数统计代码

    部分内容提到了其他相关的PHP统计代码,如统计代码行数的工具、广告点击统计、基于PHP+MySQL的统计代码以及使用memcache进行在线人数统计,这些都扩展了PHP在数据分析和网站监控中的应用范围。在实际开发中,理解并...

    陕西师范大学-《动态网页设计与制作》(高起专)考评作业-含答案.pdf

    综合题部分涉及到 ASP 文件的实际编程应用,包括用户登录验证、在线人数统计、Cookies 输出、数据库交互以及文件操作等,这些都是动态网页开发中常见的功能实现。对于这些问题的解答,需要对 ASP 脚本语言(如 ...

    LeadBBS v2.05 论坛.rar

    61.支持查看特定论坛在线人数统计功能 62.论坛首页最上页显示登陆用户资料(包括IP,浏览器和操作系统) 63.支持论坛最后更新时间和发帖人功能 64.支持论坛分类功能,主题帖和总帖统计功能 65.支持论坛版面只有登陆...

    ASP.NET3.5典型模块开发源代码

    15.3.6 统计在线人数 183 15.4 小结 184 第16章 聊天模块 185 16.1 简单的聊天功能 185 16.1.1 简单的聊天登录 185 16.1.2 保存聊天信息 186 16.1.3 获取聊天信息 187 16.1.4 格式化显示聊天信息 ...

    南开大学复习资料-Web页面设计0001.docx

    8. **Application对象**:在ASP中,`Application`对象用于在服务器端存储全局变量,可供所有用户共享,可以统计网站访问人数,但数据不会永久保存(D)。 9. **Session对象**:`Session`对象则用来存储特定用户会话...

Global site tag (gtag.js) - Google Analytics