JavaWeb中的Session
在JavaWeb中使用HttpSession(以下簡(jiǎn)稱session)對(duì)象來(lái)表示一個(gè)會(huì)話。
Session的創(chuàng)建(代表會(huì)話周期的開始):第一次調(diào)用request.getSession()方法時(shí),會(huì)創(chuàng)建一個(gè)session對(duì)象。
Session的銷毀(代表會(huì)話周期的結(jié)束):在某個(gè)請(qǐng)求周期內(nèi)調(diào)用了Session.invalidate()方法,此請(qǐng)求周期結(jié)束后,session被銷毀;或者是session超時(shí)后自動(dòng)銷毀。
對(duì)于JSP,如果指定了<%@ page session="false"%>,則在JSP中無(wú)法直接訪問(wèn)內(nèi)置的session變量,同時(shí)也不會(huì)主動(dòng)創(chuàng)建session,因?yàn)榇藭r(shí)JSP未自動(dòng)執(zhí)行request.getSession()操作獲取session。
在session對(duì)象剛創(chuàng)建的第一個(gè)請(qǐng)求周期內(nèi),調(diào)用session.isNew()方法將得到true。
可以在web.xml文件中配置session默認(rèn)的超時(shí)時(shí)間(分鐘):
<session-config>
<session-timeout>10</session-timeout>
</session-config>
也可以調(diào)用session. setMaxInactiveInterval()方法設(shè)置session超時(shí)時(shí)間(分鐘)
SessionListener
通過(guò)SessionListenr可以監(jiān)聽session的創(chuàng)建和銷毀,步驟:
1.寫一個(gè)類MySessionListener,實(shí)現(xiàn)javax.servlet.http.HttpSessionListener接口及其sessionCreated()、sessionDestroyed()方法
2.在web.xml中配置SessionListener:
<listener>
<listener-class>MySessionListener類全名</listener-class>
</listener>
當(dāng)session 被創(chuàng)建和銷毀時(shí),容器會(huì)分別調(diào)用SessionListener的sessionCreated()方法和sessionDestroyed()方法,這 兩個(gè)方法中傳入了一個(gè)參數(shù)對(duì)象HttpSessionEvent,可以通過(guò)此對(duì)象的getSession()方法獲取session對(duì)象。
應(yīng)用:在線人數(shù)統(tǒng)計(jì)
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范圍由一個(gè)HashSet集保存所有的session
HashSet sessions = (HashSet) application.getAttribute("sessions");
if (sessions == null) {
sessions = new HashSet();
application.setAttribute("sessions", sessions);
}
// 新創(chuàng)建的session均添加到HashSet集中
sessions.add(session);
// 可以在別處從application范圍中取出sessions集合
// 然后使用sessions.size()獲取當(dāng)前活動(dòng)的session數(shù),即為“在線人數(shù)”
}
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession session = event.getSession();
ServletContext application = session.getServletContext();
HashSet sessions = (HashSet) application.getAttribute("sessions");
// 銷毀的session均從HashSet集中移除
sessions.remove(session);
}
}