首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

基础的在线人数的统计

2012-10-28 
基础的在线人数的统计.工具:Myeclipse或lomboz-eclipse环境:xp,服务器:tomcat6.0. 本机使用技术: 监听器(

基础的在线人数的统计.
工具:Myeclipse或lomboz-eclipse
    环境:xp,
服务器:tomcat6.0. 本机
    使用技术: 监听器(对servlet上下文的监听和对session的监听)
-----------------------------------
首先介绍下监听器。
(-)监听器主要对三个事件的动作监听:
1 对servletContext的监听
2 对session的监听
3 对request的监听
注:今天只讨论第一和第二种监听,利用这两种监听来完成我们的在线人数统计的程序。
(二) 要想实现监听, 必须实现了一个或多个servlet事件监听器接口的类型。
(三)需要注意的是必须在部署描述符中配置实现类。
今天所使用的类和接口主要有:

import java.util.ArrayList;import java.util.List;import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.http.HttpSessionAttributeListener;import javax.servlet.http.HttpSessionBindingEvent;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;


统计当前在线人员:
(1)思路:1.首先就是我们要实现几个类,哪几个类。首先在线人员,那就必须打开多个浏览器。那就要监听servlet上下文,把所以数据必须保存在application中,必须有一个servletContext对象。
2.针对session变化进行操作。如果登录成功,则将user保存到session中,session.setAttribute(“”);
如果用户注销,则从application中删除此记录。
(2)下面给出登录页面:--------------------------------------------------login.jsp-----------------------------------<%@ page contentType="text/html;charset=gb2312"%><%@ page import="java.util.*"%><form action="" method="post">用户名: <input type="text" name="name" /> <input type="submit" value="登录" /> <a href="logout.jsp">注销</a></form><%request.setCharacterEncoding("gb2312");if (request.getParameter("name") != null) {session.setAttribute("uname",request.getParameter("name"));}%><h2>在线人员</h2><hr><%List l = (List)application.getAttribute("alluser");Iterator iter = l.iterator();while (iter.hasNext()) {%><li><%=iter.next()%></li><%}%>2注销页面:这个就好简单了,直接调用session中的invalidate ()------------------------------------------logout.jsp-----------------------------------<%session.invalidate();%>3监听类:------------------------OnLineDemo.java----------------package com.zhangkai.servlet;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.http.HttpSessionAttributeListener;import javax.servlet.http.HttpSessionBindingEvent;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;public class OnLineDemo implements ServletContextListener, HttpSessionListener,HttpSessionAttributeListener {// 声明一个ServletContext对象.private ServletContext application = null;public void contextInitialized(ServletContextEvent sce) {// 容器初始化时,向application中存放一个空的容器this.application = sce.getServletContext();this.application.setAttribute("alluser", new ArrayList());}public void contextDestroyed(ServletContextEvent sce) {}public void sessionCreated(HttpSessionEvent se) {}public void sessionDestroyed(HttpSessionEvent se) {// 将用户名称从列表中删除,首先拿到所以的在线人员,然后找到当前的用户,remove移除掉。然后再把当前的所以人员保存到session中。List l = (List) this.application.getAttribute("alluser");String value = (String) se.getSession().getAttribute("uname");l.remove(value);this.application.setAttribute("alluser", l);}public void attributeAdded(HttpSessionBindingEvent se) {// 如果登陆成功,则将用户名保存在列表之中List l = (List) this.application.getAttribute("alluser");l.add(se.getValue());this.application.setAttribute("alluser", l);}public void attributeRemoved(HttpSessionBindingEvent se) {}public void attributeReplaced(HttpSessionBindingEvent se) {}Ok了,大体的通过监听session和servlet上下文实现了简单了在线人员的统计。如果您有好的建议和写的有不对的地方,给我提出来。谢谢。。

1 楼 sunyujia 2008-08-16   无意间发现csdn的兄弟,看来都跑javaeye来了、 2 楼 smallboby 2008-08-17   csdn上不去,实在郁闷,给了eye很大的空间啊。。。
版面不一样,别扭死了。。赶快开吧。。。。

热点排行