码迷,mamicode.com
首页 > 编程语言 > 详细

Javaweb基础--->利用监听器统计在线用户数量和用户信息

时间:2017-08-31 12:35:14      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:sts   nts   context   cycle   ssi   html 4.01   lang   webapp   err   

首页布局:index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ page import="com.hanqi.model.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
当前在线人数: <%=application.getAttribute("userCount") %>
<hr>
在线用户列表:<br>
<%
List<User> userList = (List<User>)application.getAttribute("userList");
if(userList!=null) {
    for(User u : userList) {
        out.print(u+"<br>");
    }
}
%>
</body>
</html>

创建用户信息:User

package com.hanqi.model;

import java.text.SimpleDateFormat;
import java.util.Date;

public class User {
    private String sessionid;
    private Date firstTime;

    public String getSessionid() {
        return sessionid;
    }

    public void setSessionid(String sessionid) {
        this.sessionid = sessionid;
    }

    public Date getFirstTime() {
        return firstTime;
    }

    public void setFirstTime(Date firstTime) {
        this.firstTime = firstTime;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((firstTime == null) ? 0 : firstTime.hashCode());
        result = prime * result + ((sessionid == null) ? 0 : sessionid.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        User other = (User) obj;
        if (firstTime == null) {
            if (other.firstTime != null)
                return false;
        } else if (!firstTime.equals(other.firstTime))
            return false;
        if (sessionid == null) {
            if (other.sessionid != null)
                return false;
        } else if (!sessionid.equals(other.sessionid))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return "User [sessionid=" + sessionid + ", 最近登录时间="
                + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(firstTime) + "]";
    }

}

编写监听器:TestSessionListener

package com.hanqi.listener;

import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import com.hanqi.model.User;

/**
 * Application Lifecycle Listener implementation class TestSessionListener
 *
 */
@WebListener
public class TestSessionListener implements HttpSessionListener {

    private int userCount;
    
    private ArrayList<User> userList;

    /**
     * Default constructor.
     */
    public TestSessionListener() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpSessionListener#sessionCreated(HttpSessionEvent)
     */
    public void sessionCreated(HttpSessionEvent sessionEvent) {
        userCount++;
        if(userList==null) {
            userList = new ArrayList<User>();
        }
        HttpSession session = sessionEvent.getSession();
        
        String sessionid = session.getId();
        long stime = session.getCreationTime();
        
        if(!checkUsersSession(sessionid, userList)) {
            User u = new User();
            u.setFirstTime(new Date(stime));
            u.setSessionid(sessionid);
            userList.add(u);
        }
        
        session.getServletContext().setAttribute("userCount", userCount);
        session.getServletContext().setAttribute("userList", userList);
    }

    private boolean checkUsersSession(String sessionid, ArrayList<User> userList2) {
        for(User u : userList2) {
            if(u.getSessionid().equals(sessionid)) {
                return true;
            }
        }
        return false;
    }

    /**
     * @see HttpSessionListener#sessionDestroyed(HttpSessionEvent)
     */
    public void sessionDestroyed(HttpSessionEvent sessionEvent) {
        userCount--;    
        HttpSession session = sessionEvent.getSession();    

        String sessionid = session.getId();
        System.out.println(sessionid + "的用户下线");
        
        if(checkUsersSession(sessionid, userList)) {
            Iterator<User> iter = userList.iterator();
            while(iter.hasNext()) {
                User u = iter.next();
                if(u.getSessionid().equals(sessionid)) {
                    iter.remove();
                }
            }
        }
        session.getServletContext().setAttribute("userCount", userCount);
        session.getServletContext().setAttribute("userList", userList);
    }

}

在web.xml文件中注册监听器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">

<listener> <listener-class>com.hanqi.listener.TestSessionListener</listener-class> </listener> <session-config> <session-timeout>1</session-timeout> </session-config> </web-app>

 

Javaweb基础--->利用监听器统计在线用户数量和用户信息

标签:sts   nts   context   cycle   ssi   html 4.01   lang   webapp   err   

原文地址:http://www.cnblogs.com/sutao/p/7457141.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!