首先在服务器启动时,进行初始化servletContext,并且将在线用户的HashSet<User>存入其中。
接着,监听session的创建和销毁,在创建时,将其加入HashSet<User>中,销毁时,进行移除!
具体实现:
package com.chat.listen;
import java.util.HashSet;
import java.util.Set;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import com.chat.bean.User;
/**
* Application Lifecycle Listener implementation class MyListen
*
*/
@WebListener
public class MyListen implements ServletContextListener {
/**
* Default constructor.
*/
public MyListen() {
// TODO Auto-generated constructor stub
}
/**
* @see ServletContextListener#contextDestroyed(ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
/**
* @see ServletContextListener#contextInitialized(ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
ServletContext context = arg0.getServletContext();
Set<User> onlineUsers = new HashSet<User>();
context.setAttribute("onlineUsers", onlineUsers);
System.out.println("init service");
}
}
package com.chat.listen;
import java.util.Set;
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import com.chat.bean.User;
/**
* Application Lifecycle Listener implementation class MySessionListen
*
*/
@WebListener
public class MySessionListen implements HttpSessionListener,HttpSessionAttributeListener {
private ServletContext context = null;
@SuppressWarnings("unchecked")
@Override
public void attributeAdded(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
HttpSession session = event.getSession();
User user = (User)session.getAttribute("user");
ServletContext context = session.getServletContext();
Set<User> onlineUsers = (Set<User>)context.getAttribute("onlineUsers");
onlineUsers.add(user);
System.out.println("####################################");
System.out.println(user.getUserName());
context.setAttribute("onlineUsers", onlineUsers);
Set<User> temp = (Set<User>)context.getAttribute("onlineUsers");
System.out.println(temp.size());
System.out.println("####################################");
}
@Override
public void attributeRemoved(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void attributeReplaced(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}
/**
* Default constructor.
*/
public MySessionListen() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpSessionListener#sessionCreated(HttpSessionEvent)
*/
public void sessionCreated(HttpSessionEvent event) {
// TODO Auto-generated method stub
if(context == null) {
HttpSession session = event.getSession();
context = session.getServletContext();
}
System.out.println(" a session had been create");
}
/**
* @see HttpSessionListener#sessionDestroyed(HttpSessionEvent)
*/
public void sessionDestroyed(HttpSessionEvent event) {
// TODO Auto-generated method stub
HttpSession session = event.getSession();
User user = (User)session.getAttribute("user");
ServletContext context = session.getServletContext();
@SuppressWarnings("unchecked")
Set<User> onlineUsers = (Set<User>)context.getAttribute("onlineUsers");
onlineUsers.remove(user);
System.out.println(" a session had been delete");
}
}
具体在jsp页面中如何展示就不罗列了。