用户在线人数统计

实现思路:

     用户登陆,将用户信息存到session的时候,自动将该用户存到用户列表中,获取在线用户信息的时候,从该用户列表中取。


例子:

用户列表UserList.java

package session.login;

import java.util.Enumeration;
import java.util.Vector;

/**
 * 文件名称: UserList.java
 * 编写人: yh.zeng
 * 编写时间: 17-1-5 下午7:48
 * 文件描述: 已登录的用户列表
 */
public class UserList
{
    private static UserList userList = new UserList();

    private Vector<String>  v = null;


    private UserList(){
        v = new Vector<String>();
    }


    public static UserList getInstance(){
        return userList;
    }


    public void addUser(String userName){
        if(userName != null && !v.contains(userName)){
            v.add(userName);
        }
    }

    public void removeUser(String userName){
        if(userName != null){
            v.remove(userName);
        }
    }

    public Enumeration<String>  getUserList(){
        return v.elements();
    }

    public int getUserCount(){
        return v.size();
    }


}

用户对象User.java

package session.login;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

/**
 * 文件名称: User.java
 * 编写人: yh.zeng
 * 编写时间: 17-1-5 下午8:30
 * 文件描述: 1)往Session中存放User对象,则自动往UserList用户列表中添加该用户
 *         2)Session中移除User对象,则自动从UserList用户列表中移除该用户
 */
public class User  implements HttpSessionBindingListener
{
    private String userName;

    public User(String userName){
        this.userName = userName;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    @Override
    public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {
         UserList.getInstance().addUser(userName);
    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
         UserList.getInstance().removeUser(userName);
    }
}


模拟用户登陆的servlet :

package session.login;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

/**
 * 文件名称: UserLoginAction.java
 * 编写人: yh.zeng
 * 编写时间: 17-1-15 下午6:30
 * 文件描述: 用户登陆
 */
public class UserLoginAction extends HttpServlet
{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        Object userObj = req.getSession().getAttribute("user");
        boolean  hasLogin = false;  //是否已经登陆系统
        if(userObj == null){
             User user = new User(username);
             req.getSession().setAttribute("user", user);
        }else{
            hasLogin = true;
        }

        resp.setContentType("text/html");
        PrintWriter writer = resp.getWriter();
        if(hasLogin){
           writer.println("<font color='red'>已经登陆系统,无需重新登录!</font><br>");
        }
        writer.println("当前登录用户:" + ( (User)req.getSession().getAttribute("user") ).getUserName() +"<br>");

        //在线用户列表
        UserList userList =  UserList.getInstance();
        writer.println("在线用户数量:" + userList.getUserCount() + "<br>");
        Enumeration<String> userEnum = userList.getUserList();
        boolean isFirst = true;
        while(userEnum.hasMoreElements()){
            if(isFirst){
                writer.print("在线用户:" + userEnum.nextElement());
                isFirst = false;
            }else{
                writer.print("、"+ userEnum.nextElement());
            }

        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}


UserLoginAction.java 模拟用户登陆的Servlet的在web.xml 中的配置:

    
    <!-- 用户登陆 Servlet -->
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>session.login.UserLoginAction</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/servlet/LoginServlet</url-pattern>
    </servlet-mapping>


模拟登陆页面:

  <body>
       <form action="servlet/LoginServlet" method="post">
            用户名:<input type="text" name="username"/>
            <input type="submit" value="提交"/>
       </form>
  </body>



效果:


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值