一.在线人员列表需求描述
用户登录,登录成功后,跳转到在线人员列表,在该页面显示当前在线人员的列表以及人数统计数目。
二.模块实现
文件 | 功能 |
---|---|
loginForm.jsp | 用户登录页面,用来输入用户登录信息 |
loginConfig.jsp | 用来判断登录的用户是否合法 |
UserList.jsp | 1.显示在线人员的列表 2.显示当前在线总人数 |
OnlineUserListener.java | 1.监听Servlet上下文的创建和销毁 2.监听Http会画画的创建和销毁 3.监听HttpSession对象中属性的操作 |
三.程序清单
loginForm.jsp
<%@ page language = "java" pageEncoding = "gb2312" %>
<html>
<head>
<title>
登录表格
</title>
</head>
<body>
<form action = "loginConfig.jsp" method = "post" >
<table>
<tr>
<td>用户名:</td>
<td><input type = "text" name = "username" /></td>
</tr>
<tr>
<td>密码:</td>
<td><input type = "password" name = "upassword" /></td>
</tr>
<tr>
<td>
<input type = "submit" name = "submit" value = "提交" />
<input type = "reset" name = "reset" value = "重置" />
</td>
</tr>
</table>
</form>
</body>
</html>
loginConfig.jsp
<%@ page language = "java" pageEncoding = "gb2312" %>
<html>
<head>
<title>
用户登录判断
</title>
</head>
<body>
<%
String username = request.getParameter("username");//获取用户名参数
//登录判断省略
session.setAttribute("username", username);
%>
<%-- 跳转到用户列表页 --%>
<jsp:forward page = "UserList.jsp"></jsp:forward>
</body>
</html>
UserList.jsp
<%@ page language = "java" pageEncoding = "gb2312" %>
<html>
<head>
<title>
用户列表页
</title>
</head>
<body>
<h3>在线人员列表</h3><hr> <%-- <hr>是创建一条水平线 --%>
<h5>当前总在线人数${fn:length(applicationScope.allUser)}</h5>
<c:forEach items = "${applicationScope.allUser}" var = "username" varStatus = "stat">
<c:out value = "${username}"></c:out>
<c:if test = "(stat.index + 1) % 5 == 0">
<br> <%-- 每5个一行就换行 --%>
</c:if>
</c:forEach>
</body>
</html>
OnlineUserListener.java
package com.javaweb.Listener;
import java.util.ArrayList;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class OnlineUserListener implements ServletContextListener,
HttpSessionListener, HttpSessionAttributeListener{
private ServletContext application = null;//声明一个ServletContext对象
public void contextInitialized(ServletContextEvent sce) {
// TODO Auto-generated method stub
ArrayList<String> allUser = new ArrayList<String>();//存储所有用户名
application = sce.getServletContext();//获得当前ServletContext对象
application.setAttribute("allUser", allUser);//设置到application范围
}
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
//当ServletContext销毁时调用
}
public void sessionCreated(HttpSessionEvent se) {//session创建时调用该方法
// TODO Auto-generated method stub
}
public void sessionDestroyed(HttpSessionEvent se) {//session销毁时调用该方法
// TODO Auto-generated method stub
}
public void attributeAdded(HttpSessionBindingEvent se) {//session范围属性添加时调用
// TODO Auto-generated method stub
//获得当前所有的用户
ArrayList<String> allUser = (ArrayList<String>)application.getAttribute("allUser");
String user = (String)se.getValue();//获得添加的用户
allUser.add(user);//添加到所有用户列表中
application.setAttribute("allUser", allUser);//重新设置到application范围中
}
public void attributeRemoved(HttpSessionBindingEvent se) {//session属性移除时调用
// TODO Auto-generated method stub
}
public void attributeReplaced(HttpSessionBindingEvent se) {//session属性替换时调用
// TODO Auto-generated method stub
}
}
在web.xml配置listener
<listener>
<listener-class>com.javaweb.Listener.OnlineUserListener</listener-class>
</listener>
摘自《Java Web 程序设计与项目实践》,电子工业出版社