实现在线用户列表显示、注销的Listener
文章分类:Java编程
实现一个对在线用户的监听:即监听用户的登录和注销两个操作。需要自定义一个Listener,实现ServletContextListener,HttpSessionListener和HttpSessionAttributeListener。
一、表示层:
1、用户登录表单Login.jsp
1. <%@ page language="java" contentType="text/html;charset=gb2312"%>
2. <html>
3. <head>
4. <title>用户登录表单</title>
5. </head>
6. <body>
7. <%--表单,提交方式为post-,提交到DoGetDemo--%>
8. "LoginConf.jsp" method="post">
9. "text" name="username"/><br>
10. "submit" value="登录"/>
11. "reset" value="重置"/>
12. </form>
13. </body>
14. </html>
2、用户登录处理页:LoginConf.jsp
1. <%@ page language="java" contentType="text/html;charset=gb2312"%>
2. <html>
3. <head>
4. <title>登录判断</title>
5. </head>
6. <body>
7. <center>
8. <%
9. "username") ; //接受用户名参数
10. //登录判断省略
11. "username",username);
12. %>
13. //跳转到用户列表页
14. "ShowAllUser.jsp"></jsp:forward>
15. </center>
16. </body>
17. </html>
3、用户列表显示页面:ShowAllUser.jsp
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*"%>
<html>
<head>
<title>在线用户列表</title>
</head>
<body>
<%=session.getAttribute("username")%>
欢迎你的登录,你可以<a href="Logout.jsp">注销</a>。
<h3>在线用户列表</h3><hr>
<%
ArrayList<String> allUser = (ArrayList<String>)application.getAttribute("allUser");
Iterator<String> iter = allUser.iterator();
while(iter.hasNext()) {
out.println("★" + iter.next() + "★ ");
}
%>
</body>
</html>
4、用户注销页面Logout.jsp
1. <%@ page language="java" contentType="text/html;charset=gb2312"%>
2. <html>
3. <head>
4. <title>注销</title>
5. </head>
6. <body>
7. <%
8. //注销时进行session销毁
9. session.invalidate() ;
10. %>
11. </body>
12. </html>
二、自定义Listener:OnlineUserListener
package 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{
// 声明一个ServletContext对象
private ServletContext application = null ;
//ServletContext创建时调用该方法
public void contextInitialized(ServletContextEvent sce) {
//储存所用用户名
ArrayList<String> allUser = new ArrayList<String>();
//获得当前application对象
application = sce.getServletContext();
//设置到application范围
application.setAttribute("allUser", allUser);
}
//ServletContext销毁时调用该方法
public void contextDestroyed(ServletContextEvent sce) {
}
//session创建时调用该方法
public void sessionCreated(HttpSessionEvent se) {
}
//session销毁时调用该方法
public void sessionDestroyed(HttpSessionEvent se) {
//获得当前所有的用户
ArrayList<String> allUser = (ArrayList<String>) application.getAttribute("allUser");
//获得删除的用户
String user = (String)se.getSession().getAttribute("username");
//删除该用户
allUser.remove(user);
//重新设置到application范围中
application.setAttribute("allUser", allUser);
}
//session范围属性添加时调用
public void attributeAdded(HttpSessionBindingEvent se) {
//获得当前所有的用户
ArrayList<String> allUser = (ArrayList<String>) application.getAttribute("allUser");
//获得添加的用户
String user = (String) se.getValue();
//添加到所有用户中
allUser.add(user);
}
//session范围属性移除时调用
public void attributeRemoved(HttpSessionBindingEvent se) {
}
//session范围属性替换时调用
public void attributeReplaced(HttpSessionBindingEvent se) {
}
}
三、Listener配置
1. <listener>
2. <listener-class>listener.OnlineUserListener</listener-class>
3. </listener>
标签:ArrayList,用户,列表,Listener,application,allUser,import,注销,public From: https://blog.51cto.com/u_16115638/6286405