1. 程式人生 > >Javaweb基礎--->利用監聽器統計在線用戶數量和用戶信息

Javaweb基礎--->利用監聽器統計在線用戶數量和用戶信息

ttr ica event mls rate .text sim println char

首頁布局: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基礎--->利用監聽器統計在線用戶數量和用戶信息