首页布局: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>
05-11 21:45