免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1902 | 回复: 1

JavaWeb中的Session、SessionListener、在线人数统计 [复制链接]

论坛徽章:
0
发表于 2012-03-19 20:20 |显示全部楼层

JavaWeb中的Session、SessionListener、在线人数统计











JavaWeb中的Session

在JavaWeb中使用HttpSession(以下简称session)对象来表示一个会话。
Session的创建(代表会话周期的开始):第一次调用request.getSession()方法时,会创建一个session对象。
Session的销毁(代表会话周期的结束):在某个请求周期内调用了Session.invalidate()方法,此请求周期结束后,session被销毁;或者是session超时后自动销毁。
对于JSP,如果指定了<%@ page session="false"%>,则在JSP中无法直接访问内置的session变量,同时也不会主动创建session,因为此时JSP未自动执行request.getSession()操作获取session。
在session对象刚创建的第一个请求周期内,调用session.isNew()方法将得到true。
可以在web.xml文件中配置session默认的超时时间(分钟):
  1. <session-config>
  2.     <session-timeout>10</session-timeout>
  3. </session-config>
复制代码
也可以调用session. setMaxInactiveInterval()方法设置session超时时间(分钟)
SessionListener

通过SessionListenr可以监听session的创建和销毁,步骤:
1.写一个类MySessionListener,实现javax.servlet.http.HttpSessionListener接口及其sessionCreated()、sessionDestroyed()方法
2.在web.xml中配置SessionListener:
  1. <listener>
  2.     <listener-class>MySessionListener类全名</listener-class>
  3. </listener>
复制代码
当session 被创建和销毁时,容器会分别调用SessionListener的sessionCreated()方法和sessionDestroyed()方法,这 两个方法中传入了一个参数对象HttpSessionEvent,可以通过此对象的getSession()方法获取session对象。
应用:在线人数统计
  1. import java.util.HashSet;
  2. import javax.servlet.ServletContext;
  3. import javax.servlet.http.HttpSession;
  4. import javax.servlet.http.HttpSessionEvent;
  5. import javax.servlet.http.HttpSessionListener;

  6. public class MySessionListener implements HttpSessionListener {

  7.        public void sessionCreated(HttpSessionEvent event) {
  8.               HttpSession session = event.getSession();
  9.               ServletContext application = session.getServletContext();
  10.               
  11.               // 在application范围由一个HashSet集保存所有的session
  12.               HashSet sessions = (HashSet) application.getAttribute("sessions");
  13.                if (sessions == null) {
  14.                      sessions = new HashSet();
  15.                      application.setAttribute("sessions", sessions);
  16.               }
  17.               
  18.               // 新创建的session均添加到HashSet集中
  19.               sessions.add(session);
  20.               // 可以在别处从application范围中取出sessions集合
  21.               // 然后使用sessions.size()获取当前活动的session数,即为“在线人数”
  22.        }

  23.        public void sessionDestroyed(HttpSessionEvent event) {
  24.               HttpSession session = event.getSession();
  25.               ServletContext application = session.getServletContext();
  26.               HashSet sessions = (HashSet) application.getAttribute("sessions");
  27.                
  28.               // 销毁的session均从HashSet集中移除
  29.               sessions.remove(session);
  30.        }
  31. }
复制代码
推荐网文:《Java基础-关于session的详细解释》




本文来源:http://blog.csdn.net/CaiKanXP/archive/2007/09/11/1780924.aspx

论坛徽章:
0
发表于 2012-03-19 20:23 |显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP