创建监听器,主要用到session和request,所以,自定义监听器类要实现HttpSessionListener和ServletRequestListener接口:
package com.lzxh.listener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class MyServletContextListener implements HttpSessionListener, ServletRequestListener {
private int count = 1;
//创建session的时候在线人数增加。
public void sessionCreated(HttpSessionEvent arg0) {
count++;
System.out.println("session被创建 --- :" + count);
arg0.getSession().setAttribute("count", count);
}
//session销毁的时候在线人数减少
public void sessionDestroyed(HttpSessionEvent se) {
count--;
System.out.println("session被销毁");
}
public void requestDestroyed(ServletRequestEvent arg0) {
System.out.println("request请求被销毁");
}
//请求发生时,统计人数。
public void requestInitialized(ServletRequestEvent arg0) {
HttpServletRequest request = (HttpServletRequest) arg0.getServletRequest();
request.getSession().setAttribute("count", count);
System.out.println("request被创建");
}
}
在删除用户的servlet中做个测试:
@WebServlet("/userDeleteHandler")
public class UserDeleteHandler extends HttpServlet {
private static final long serialVersionUID = 1L;
UserService us = new UserServiceImpl();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
int count = (int) request.getSession().getAttribute("count");
//request.getServletContext().getAttribute(name)
int code = Integer.parseInt(request.getParameter("code"));
int num = us.delete(code);
String msg = num > 0 ? "删除成功" : "删除失败";
PrintWriter out = response.getWriter();
out.print(msg + " : 当前网站在线人数:" + count);
out.flush();
out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
页面效果:
该博客介绍了如何利用Servlet的HttpSessionListener和ServletRequestListener接口来实现网站在线人数的统计。通过监听session和request事件,自定义监听器类来跟踪用户活动,确保统计的准确性。在删除用户操作的Servlet中进行了实际测试,并展示了页面效果。

1118

被折叠的 条评论
为什么被折叠?



