0
点赞
收藏
分享

微信扫一扫

实现在线用户列表显示、注销的Listener




实现在线用户列表显示、注销的Listener


文章分类:Java编程

实现一个对在线用户的监听:即监听用户的登录和注销两个操作。需要自定义一个Listener,实现ServletContextListener,HttpSessionListener和HttpSessionAttributeListener。

一、表示层:

1、用户登录表单Login.jsp



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


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



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

 



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

 



Java代码

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配置



Xml代码


1. <listener>  
2.   <listener-class>listener.OnlineUserListener</listener-class>   
3.  </listener>





 

举报

相关推荐

0 条评论