| JavaWeb中的Session 在JavaWeb中使用HttpSession(以下簡(jiǎn)稱session)對(duì)象來表示一個(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中無法直接訪問內(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í)間(分鐘):
 也可以調(diào)用session. setMaxInactiveInterval()方法設(shè)置session超時(shí)時(shí)間(分鐘)<session-config><session-timeout>10</session-timeout>
 </session-config>
 SessionListener 通過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,可以通過此對(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);
 }
 }
 |