探索与发现

研究java技术

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  83 随笔 :: 0 文章 :: 109 评论 :: 0 Trackbacks
//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程序员,故特别指出。s `|*)

posted on 2006-07-31 19:42 蜘蛛 阅读(6938) 评论(8)  编辑  收藏 所属分类: jsp

评论

# re: 在线人数统计,解决了关闭浏览器窗口,释放session的问题 2006-08-01 23:53 Jonney
当用户打开了多个浏览器窗口时,多窗口是共用一个session的,有一个窗口关闭了,那么其他窗口的session不也失效了吗?  回复  更多评论
  

# re: 在线人数统计,解决了关闭浏览器窗口,释放session的问题 2006-08-02 04:29 蜘蛛
不会啊,比如126的邮箱来说,你打开多个你的邮件,当关了一个,并不会使你退出啊  回复  更多评论
  

# re: 在线人数统计,解决了关闭浏览器窗口,释放session的问题 2006-08-02 04:39 蜘蛛
根据需求来用,比如只给你的主页用上,其它就不要用了  回复  更多评论
  

# re: 在线人数统计,解决了关闭浏览器窗口,释放session的问题 2006-08-02 09:02 Jonney
如果只是主页用上而已,那么还有一种情况:
用户打开两个窗口,一个是主页,一个是二级栏目,用户想关闭主页窗口而保留二级栏目窗口,关闭主页窗口的时候岂不是把session给validate了?  回复  更多评论
  

# re: 在线人数统计,解决了关闭浏览器窗口,释放session的问题 2006-08-02 16:49 cainiao
老大,问个问题,不知道是不很低级 :
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(CONTENT_TYPE);
HttpSession session=request.getSession();
}

这里面为什么要生成session呀 ,但是又没用 ?  回复  更多评论
  

# re: 在线人数统计,解决了关闭浏览器窗口,释放session的问题 2006-08-02 23:43 剑事
呵呵 有些都是我当时文档的原话呢  回复  更多评论
  

# re: 在线人数统计,解决了关闭浏览器窗口,释放session的问题 2006-08-03 06:49 蜘蛛
--->剑事
呵呵,不好意思偷了点你的东西,也就那时才发现你这么个人才的.呵呵
--->cainiao
HttpSession session=request.getSession();
/*
public HttpSession getSession()Returns the current session associated with this request, or if the request does not have a session, creates one.
*/
-->Jonney
这只是一种方法,过去进过一些网站,就是关闭某些比较重要的页面,那么就会又要重新要你登录了,,关键看你的需求,一般还会结合idel-timeout,session-timeout一起使用,比较好一点吧  回复  更多评论
  

# re: 在线人数统计,解决了关闭浏览器窗口,释放session的问题 2007-02-04 22:47 刹那
if(event.clientX<0&&event.clientY<0)
这个在多窗口的浏览器中.关闭单个页面是不会触发的
详情请看:
http://hi.baidu.com/chanajianxin/blog/item/e53ef9c45101faa98226ac09.html

如果你知道怎么在多窗口浏览器中触发onunload时间的代码...麻烦告诉我声..谢谢
zuan8888@126.com
  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: