用HttpSessionListener统计在线人数 去网上找例子 去

解决方案 »

  1.   

    使用HttpSessionBindingListener。孙鑫的JAVA WEB开发详解里面有讲这个程序。
      

  2.   

    HttpSessionListener无法监听到IE关闭的时候,IE关闭时,显然在线用户要count--,我想知道zhaochunhui(没有烟抽的日子@事不过三,过三重构) 是怎么做的.谢谢.
      

  3.   

    http://alumni.ustb.edu.cn/onlineUsersList.html
    是这样的效果么?
      

  4.   

    这里用到的基本上就是楼上的几位说的那两个东东
    只不过是写了一个 filter 对所有页面进行了过滤   
    效率上,目前为止,还不错
      

  5.   

    关注,楼主解决了这个问题的话,请给我发一份,谢谢,共同学习!
    [email protected]
      

  6.   

    *********** login.html *************<html>
        <head>
            <title>登录页面</title>
        </head>
        <body>
            <form action="online" method="post">
                <table>
                    <tr>
                        <td>请输入用户名:</td>
                        <td><input type="text" name="user"></td>
                    </tr>
                    <tr>
                        <td>请输入密码:</td>
                        <td><input type="password" name="password"></td>
                    </tr>
                    <tr>
                        <td><input type="reset" value="重填"></td>
                        <td><input type="submit" value="登录"></td>
                    </tr>
                </table>
            </form>
        </body>
    </html>*********** OnlineUser.java ************package org.sunxin.lesson.jsp.ch09.online;import javax.servlet.*;
    import java.io.*;
    import javax.servlet.http.*;
    import java.util.Enumeration;public class OnlineUser extends HttpServlet
    {
        public void doGet(HttpServletRequest req, HttpServletResponse resp)
                   throws ServletException,IOException
        {
            req.setCharacterEncoding("gb2312");
            String name=req.getParameter("user");
            String pwd=req.getParameter("password");
                
            if(null==name || null==pwd || name.equals("") || pwd.equals(""))
            {
                resp.sendRedirect("login.html");
            }
            else
            {
                HttpSession session=req.getSession();
                User user=(User)session.getAttribute("user");
                if(null==user || !name.equals(user.getName()))
                {
                    user=new User(name);
                    session.setAttribute("user",user);
                }
                
                resp.setContentType("text/html;charset=gb2312");
                PrintWriter out=resp.getWriter();
                
                out.println("欢迎用户<b>"+name+"</b>登录");
                UserList ul=UserList.getInstance();
                out.println("<br/>当前在线的用户列表:<br/>");
                Enumeration<String> enums=ul.getUserList();
                int i=0;
                while(enums.hasMoreElements())
                {
                    out.println(enums.nextElement());
                    out.println("&nbsp;&nbsp;&nbsp;&nbsp;");
                    if(++i==10)
                    {
                        out.println("<br/>");
                    }
                }
                out.println("<br/>当前在线的用户数:"+i);
                out.println("<p><a href=logout>退出登录</a>");
                out.close();
            }
        }
        
        public void doPost(HttpServletRequest req, HttpServletResponse resp)
                   throws ServletException,IOException
        {
            doGet(req,resp);
        }
    }*********** LogoutServlet.java ************package org.sunxin.lesson.jsp.ch09.online;import javax.servlet.*;
    import java.io.*;
    import javax.servlet.http.*;public class LogoutServlet extends HttpServlet
    {
        public void doGet(HttpServletRequest req, HttpServletResponse resp)
                   throws ServletException,IOException
        {
            resp.setContentType("text/html;charset=gb2312");
            
            HttpSession session=req.getSession();
            User user=(User)session.getAttribute("user");
            session.invalidate();
            
            PrintWriter out=resp.getWriter();
            out.println("<html><head><title>退出登录</title></head><body>");
            out.println(user.getName()+",你已退出登录<br/>");
            out.println("<a href=login.html>重新登录</a>");
            out.println("</body></html>");
            out.close();
        }
    }
      

  7.   

    接上
    *********** User.java ************package org.sunxin.lesson.jsp.ch09.online;import javax.servlet.http.HttpSessionBindingListener;
    import javax.servlet.http.HttpSessionBindingEvent;public class User implements HttpSessionBindingListener
    {
        private String name;
        private UserList ul=UserList.getInstance();
        
        public User()
        {
        }
        public User(String name)
        {
            this.name=name;
        }
        public void setName(String name)
        {
            this.name=name;
        }
        public String getName()
        {
            return name;
        }
        public void valueBound(HttpSessionBindingEvent event)
        {
            ul.addUser(name);
        }
        public void valueUnbound(HttpSessionBindingEvent event)
        {
            ul.removeUser(name);
        }
    }*********** UserList.java ************
    package org.sunxin.lesson.jsp.ch09.online;import java.util.Vector;
    import java.util.Enumeration;public class UserList
    {
        private static final UserList userList=new UserList();
        private Vector<String> v;
        
    private UserList()
    {
        v=new Vector<String>();
    }public static UserList getInstance()
    {
    return userList;
    }
        
        public void addUser(String name)
        {
            if(name!=null)
                v.addElement(name);
        }
        
        public void removeUser(String name)
        {
            if(name!=null)
                v.remove(name);
        }
        
        public Enumeration<String> getUserList()
        {
            return v.elements();
        }
        
        public int getUserCount()
        {
            return v.size();
        }
    }
    ****************************
    主要思想是将所有登陆用户放到集合中。
    用户登陆成功就添加到用户列表,用户退出就从用户列表中移出。
    注意User类所实现的接口以及其中以下两个方法:    //对象被绑定到session中时通知该对象
        public void valueBound(HttpSessionBindingEvent event)
        {
            ul.addUser(name);
        }    //从session中删除对象时通知该对象
        public void valueUnbound(HttpSessionBindingEvent event)
        {
            ul.removeUser(name);
        }