方式一:web.xml文件中配置
<listener>
<listener-class>com.java.listener.FirstListener</listener-class>
</listener>
方式二:在类名上面使用注解
@WebListener
@WebListener
public class OnlineHttpServletContextListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent sce) {
//存用户
ArrayList<String> userList = new ArrayList<>();
ServletContext servletContext = sce.getServletContext();
servletContext.setAttribute("onlineList",userList);
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
@WebListener
public class OnlineHttpSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("session对象创建啦。。。。。");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("session对象销毁啦!!!");
String name = (String) se.getSession().getAttribute(ConstantData.LOGIN_USER);
ServletContext servletContext = se.getSession().getServletContext();
List<String> userList = (List<String>) servletContext.getAttribute("onlineList");
userList.remove(name);
}
}
监听SessionAttribute的变化
@WebListener
public class OnlineHttpSessionAttributeListener implements HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent se) {
String name = se.getName();
if (name.equals(ConstantData.LOGIN_USER)) {
String value = (String) se.getValue();
List<String> userList = (List<String>) se.getSession().getServletContext().getAttribute("onlineList");
userList.add(value);
}
}
@Override
public void attributeRemoved(HttpSessionBindingEvent se) {
String name = se.getName();
if (name.equals(ConstantData.LOGIN_USER)) {
String value = (String) se.getValue();
List<String> userList = (List<String>) se.getSession().getServletContext().getAttribute("onlineList");
userList.remove(value);
}
}
@Override
public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
}
}