编写一个监听器类CountListener.java,记录记录当前在线人数,以及web应用程序启动以来被访问的总次数。
时间: 2024-02-22 15:59:51 浏览: 23
下面是一个简单的示例代码,实现了CountListener.java监听器类,用于记录当前在线人数和被访问的总次数:
```java
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class CountListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
// 应用程序启动时,初始化在线人数和访问次数
ServletContext context = sce.getServletContext();
context.setAttribute("onlineCount", 0);
context.setAttribute("visitCount", 0);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// 应用程序关闭时,清空在线人数和访问次数
ServletContext context = sce.getServletContext();
context.removeAttribute("onlineCount");
context.removeAttribute("visitCount");
}
@Override
public void sessionCreated(HttpSessionEvent se) {
// 有新的会话创建时,增加在线人数
ServletContext context = se.getSession().getServletContext();
Integer onlineCount = (Integer) context.getAttribute("onlineCount");
onlineCount++;
context.setAttribute("onlineCount", onlineCount);
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
// 有会话销毁时,减少在线人数
ServletContext context = se.getSession().getServletContext();
Integer onlineCount = (Integer) context.getAttribute("onlineCount");
onlineCount--;
context.setAttribute("onlineCount", onlineCount);
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
// 有新的请求时,增加访问次数
ServletContext context = sre.getServletContext();
Integer visitCount = (Integer) context.getAttribute("visitCount");
visitCount++;
context.setAttribute("visitCount", visitCount);
}
@Override
public void requestDestroyed(ServletRequestEvent sre) {
// 请求结束时不做任何处理
}
}
```
在web.xml中配置监听器,如下所示:
```xml
<listener>
<listener-class>com.example.CountListener</listener-class>
</listener>
```
这样,当应用程序启动时,CountListener会被初始化,并将在线人数和访问次数都设置为0。当有新的会话创建时,会增加在线人数;当有会话销毁时,会减少在线人数。当有新的请求时,会增加访问次数。最后,当应用程序关闭时,CountListener会被销毁,在线人数和访问次数会被清空。