[Servlet] 配置listener监听器(HttpSessionListener和HttpSessionBindingListener)细说
原文地址:
http://blog.csdn.net/opnmzxcvb/archive/2009/09/15/4554329.aspx
1、了解如何使用HttpSessionListener监听session的销毁。
2、了解如何使用HttpSessionBindingListener监听session的销毁。
一、使用HttpSessionListener编写一个OnlineUserListener。
package anni;import java.util.List;import javax.servlet.ServletContext;import javax.servlet.http.HttpSession;import javax.servlet.http.HttpSessionListener;import javax.servlet.http.HttpSessionEvent;public class OnlineUserListener implements HttpSessionListener { public void sessionCreated(HttpSessionEvent event) { } public void sessionDestroyed(HttpSessionEvent event) { HttpSession session = event.getSession(); ServletContext application = session.getServletContext(); // 取得登录的用户名 String username = (String) session.getAttribute("username"); // 从在线列表中删除用户名 List onlineUserList = (List) application.getAttribute("onlineUserList"); onlineUserList.remove(username); System.out.println(username + "超时退出。"); }}
<listener> <listener-class>anni.OnlineUserListener</listener-class></listener>
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { // 销毁session request.getSession().invalidate(); // 成功 response.sendRedirect("index.jsp");}
<session-config> <session-timeout>1</session-timeout></session-config>
public void valueBound(HttpSessionBindingEvent event) { HttpSession session = event.getSession(); ServletContext application = session.getServletContext(); // 把用户名放入在线列表 List onlineUserList = (List) application.getAttribute("onlineUserList"); // 第一次使用前,需要初始化 if (onlineUserList == null) { onlineUserList = new ArrayList(); application.setAttribute("onlineUserList", onlineUserList); } onlineUserList.add(this.username);}
public void valueUnbound(HttpSessionBindingEvent event) { HttpSession session = event.getSession(); ServletContext application = session.getServletContext(); // 从在线列表中删除用户名 List onlineUserList = (List) application.getAttribute("onlineUserList"); onlineUserList.remove(this.username); System.out.println(this.username + "退出。");}