HttpSessionEvent和HttpSessionListener17 Mar 2025 | 阅读 2 分钟 当会话对象发生改变时,HttpSessionEvent会被通知。这个事件对应的监听器接口是HttpSessionListener。 |
我们可以在这个事件上执行一些操作,例如统计总用户数和当前登录用户数,维护用户详情日志,例如登录时间、注销时间等。 |
HttpSessionListener接口的方法HttpSessionListener接口中声明了两个方法,servlet程序员必须实现这些方法来执行一些操作。- public void sessionCreated(HttpSessionEvent e):当会话对象创建时被调用。
- public void sessionDestroyed(ServletContextEvent e):当会话失效时被调用。
|
HttpSessionEvent和HttpSessionListener的例子,用于统计总用户数和当前登录用户数在这个例子中,我们统计总用户数和当前登录用户数。为此,我们创建了三个文件:- index.html:从用户那里获取输入。
- MyListener.java:一个监听器类,用于统计总用户数和当前登录用户数,并将这些信息作为属性存储在ServletContext对象中。
- First.java:一个Servlet类,用于创建会话并打印总用户数和当前登录用户数。
- Logout.java:一个Servlet类,用于使会话失效。
|
index.html<form action="servlet1"> 姓名:<input type="text" name="username"><br> 密码:<input type="password" name="userpass"><br> <input type="submit" value="login"/> </form> MyListener.javaimport javax.servlet.ServletContext; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class CountUserListener implements HttpSessionListener{ ServletContext ctx=null; static int total=0,current=0; public void sessionCreated(HttpSessionEvent e) { total++; current++; ctx=e.getSession().getServletContext(); ctx.setAttribute("totalusers", total); ctx.setAttribute("currentusers", current); } public void sessionDestroyed(HttpSessionEvent e) { current--; ctx.setAttribute("currentusers",current); } } First.javaimport java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class First extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String n=request.getParameter("username"); out.print("欢迎 "+n); HttpSession session=request.getSession(); session.setAttribute("uname",n); //从ServletContext对象检索数据 ServletContext ctx=getServletContext(); int t=(Integer)ctx.getAttribute("totalusers"); int c=(Integer)ctx.getAttribute("currentusers"); out.print("<br>总用户数= "+t); out.print("<br>当前用户数= "+c); out.print("<br><a href='logout'>退出</a>"); out.close(); } } Logout.javaimport java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class LogoutServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); HttpSession session=request.getSession(false); session.invalidate();//使会话失效 out.print("您已成功退出"); out.close(); } }
|