上下文的创建与销毁监听器,记录聊天室的创建和解散
package com.company.project.listener;
import java.util.ArrayList;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import com.company.project.po.Message;
@WebListener
public class ServletContextListenerImpl implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent sce) {
ServletContextListener.super.contextDestroyed(sce);
System.out.println("聊天室已解散");
}
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContextListener.super.contextInitialized(sce);
System.out.println("聊天室创建成功");
ArrayList<Message> messages = new ArrayList<>();
ArrayList<String> userList = new ArrayList<>();
sce.getServletContext().setAttribute("userList", userList);
sce.getServletContext().setAttribute("messages", messages);
}
}
会话的创建与销毁监听器,记录在线的用户。
package com.company.project.listener;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import com.company.project.po.Message;
@WebListener
public class HttpSessionListenerImpl implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
se.getSession().setMaxInactiveInterval(2);
ServletContext servletContext = se.getSession().getServletContext();
System.out.println("用户加入");
ArrayList<Message> messages = (ArrayList<Message>) servletContext.getAttribute("messages");
ArrayList<String> userList = (ArrayList<String>) servletContext.getAttribute("userList");
String userId = se.getSession().getId();
userList.add(userId);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String sendTime = df.format(new Date());// new Date()为获取当前系统时间
Message message = new Message();
message.setUserName("系统提示");
message.setContent("欢迎"+userId+"加入");
message.setSendTime(sendTime);
messages.add(message);
servletContext.setAttribute("userList", userList);
servletContext.setAttribute("messages", messages);
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext servletContext = se.getSession().getServletContext();
System.out.println("用户退出");
ArrayList<Message> messages = (ArrayList<Message>) servletContext.getAttribute("messages");
ArrayList<String> userList = (ArrayList<String>) servletContext.getAttribute("userList");
String userId = se.getSession().getId();
userList.remove(userId);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String sendTime = df.format(new Date());// new Date()为获取当前系统时间
Message message = new Message();
message.setUserName("系统提示");
message.setContent("用户"+userId+"已退出聊天室");
message.setSendTime(sendTime);
messages.add(message);
servletContext.setAttribute("userList", userList);
servletContext.setAttribute("messages", messages);
}
}