測試環境:Tomcat 5.0.28
需要用5.5以上的tomcat,5.5一下會產生一個BUG,sessionDestroyed會執行兩次
JavaWeb中的Session
SessionListener
- 通過SessionListenr可以監聽session的建立和銷毀,步驟:
1.寫一個類MySessionListener,實現javax.servlet.http.HttpSessionListener介面及其sessionCreated()、sessionDestroyed()方法
2.在web.xml中配置SessionListener:<listener>
<listener-class>MySessionListener類全名</listener-class>
</listener>
- 當session被建立和銷毀時,容器會分別調用SessionListener的sessionCreated()方法和sessionDestroyed()方法,這兩個方法中傳入了一個參數對象HttpSessionEvent,可以通過此對象的getSession()方法擷取session對象。
應用:線上人數統計
import java.util.HashSet;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MySessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent event) {
HttpSession session = event.getSession();
ServletContext application = session.getServletContext();
// 在application範圍由一個HashSet集儲存所有的session
HashSet sessions = (HashSet) application.getAttribute("sessions");
if (sessions == null) {
sessions = new HashSet();
application.setAttribute("sessions", sessions);
}
// 新建立的session均添加到HashSet集中
sessions.add(session);
// 可以在別處從application範圍中取出sessions集合 // 然後使用sessions.size()擷取當前活動的session數,即為“線上人數”
}
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession session = event.getSession();
ServletContext application = session.getServletContext();
HashSet sessions = (HashSet) application.getAttribute("sessions");
// 銷毀的session均從HashSet集中移除
sessions.remove(session);
}
}