您现在的位置:中国下载站学院中心网络编程JSP教程Jsp开发技巧 → 文章列表

JSP中基于Session的在线用户统计分析

作者:佚名  来源:不详  发布时间:2007-4-14 11:56:27   

减小字体 增大字体

 
 
  JSP作为后起之秀能够在服务器编程环境中占据一定地位,是和它良好支持一系列业界标准密切相关的。Session就是它提供的基础设施之一。作为一个程序员,你可以不介意具体在客户端是如何实现,就方便的实现简单的基于session的用户管理。现在对于处理在线用户,有几种不同的处理方法。

  一种是页面刷新由用户控制,服务器端控制一个超时时间比如30分钟,到了时间之后用户没有动作就被踢出。这种方法的优点是,如果用户忘了退出,可以防止别人恶意操作。缺点是,如果你在做一件很耗时间的事情,超过了这个时间限制,submit的时候可能要再次面临登陆。如果原来的叶面又是强制失效的话,就有可能丢失你做的工作。在实现的角度来看,这是最简单的,Server端默认实现的就是这样的模式。

  另一种方式是,站点采用框架结构,有一个Frame或者隐藏的iframe在不断刷新,这样你永远不会被踢出,但是服务器端为了判断你是否在线,需要定一个发呆时间,如果超过这个发呆时间你除了这个自动刷新的页面外没有刷新其他页面的话,就认为你已经不在线了。采取这种方式的典型是xici.net。 他的优点是可以可以利用不断的刷新实现一些类似server-push的功能,比如网友之间发送消息。

  不管哪一种模式,为了实现浏览当前所有的在线用户,还需要做一些额外的工作。servlet API中没有得到Session列表的API。

  可以利用的是Listener. Servlet 2.2和2.3规范在这里略微有一些不一样。2.2中HttpSessionBindingListener可以实现当一个HTTPSession中的Attribute变化的时候通知你的类。而2.3中还引入了HttpSessionAttributeListener.鉴于我使用的环境是Visual age for java 4和JRun server 3.1,他们还不直接支持Servlet 2.3的编程,这里我用的是HttpSessionBindingListener.

  需要做的事情包括做一个新的类来实现HttpSessionBindingListener接口。这个接口有两个方法:

  public void valueBound(HttpSessionBindingEvent event)
public void valueUnbound(HttpSessionBindingEvent event)

  当你执行Session.addAttribute(String,Object)的时候,如果你已经把一个实现了HttpSessionBindingListener接口的类加入为Attribute,Session会通知你的类,调用你的valueBound方法。相反,Session.removeAttribute方法对应的是valueUndound方法。

  public class HttpSessionBinding implements javax.servlet.http.HttpSessionBindingListener
{
 ServletContext application = null;
 public HttpSessionBinding(ServletContext application)
 {
  super();
  if (application ==null)
   throw new IllegalArgumentException("Null application is not accept.");
  this.application = application;
 }
 public void valueBound(javax.servlet.http.HttpSessionBindingEvent e)
 {
  Vector activeSessions = (Vector) application.getAttribute("activeSessions");
  if (activeSessions == null)
  {
   activeSessions = new Vector();
  }
  JDBCUser sessionUser = (JDBCUser)e.getSession().getAttribute("user");
  if (sessionUser != null)
  {
   activeSessions.add(e.getSession());
  }
  application.setAttribute("activeSessions",activeSessions);
 }
 public void valueUnbound(javax.servlet.http.HttpSessionBindingEvent e)
 {
  JDBCUser sessionUser = (JDBCUser)e.getSession().getAttribute("user");
  if (sessionUser == null)
  {
   Vector activeSessions = (Vector) application.getAttribute("activeSessions");
   if (activeSessions != null)
   {
    activeSessions.remove(e.getSession().getId());
    application.setAttribute("activeSessions",activeSessions);
   }
  }
 }
}


在百度中搜索更多JSP中基于Session的在线用户统计分析相关网页 转贴于:中国下载站

  • 上一篇文章:用JSP构建动态网站
  • 下一篇文章:在JSP中访问数据库大全
  • 阅读统计:[]
  • 中国下载站】【设为主页】【收藏本页】【打印本文】【回到顶部】【关闭此页

    相关文章
    文章评论(评论内容只代表网友观点,与本站立场无关!)

    用户名: 查看更多评论

    分 值:100分 85分 70分 55分 40分 25分 10分 0分

    内 容:

             (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码


    设为首页 - 关于我们 - 广告服务 - 网站地图 - 加入收藏 - 网站声明 - 网站帮助 - 友情链接

    • Copyright (C) 2006-2008 www.cndownz.com All Rights Reserved.
      中国下载站 版权所有. 粤ICP备05141802号. 对本站有任何建议、意见或投诉,请来信:cndownzcom@yahoo.com.cn.
      喜欢中国下载站(cndownz.com),请把中国下载站(cndownz.com)告诉你QQ上的5位好友,多谢支持!