探索與發(fā)現(xiàn)

          研究java技術(shù)

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            83 隨筆 :: 0 文章 :: 109 評(píng)論 :: 0 Trackbacks
          //SessionCounter.java\ozdvw
          package SessionCount;e?
          import javax.servlet.*; L9k0
          import javax.servlet.http.*; plT
          import java.io.*; w;
          import java.util.*; JC;@
          ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  @b!Q5
          public class SessionCounter extends HttpServlet ?implements HttpSessionListener { 2#
          private static final String CONTENT_TYPE = "text/html; charset=GBK"; bd35
          private static int activeSessions = 1; xZi"Yx
          //Initialize global variables +iRX;1
          public void init() throws ServletException { n3
          ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  {Ytdk
          } ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  ri04&
          ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  C
          //Process the HTTP Get request @8Ob%
          public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { zH
          ? response.setContentType(CONTENT_TYPE); EPjJ
          ? HttpSession session=request.getSession(); ]g
          } ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  )9lR?P
          ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  !S
          //Clean up resources UxUNe
          public void destroy() { :=e2NM
          } ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  W'F
          ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  aHW&x9
          public void sessionCreated(HttpSessionEvent httpSessionEvent) { HH
          ? activeSessions++; DyZpv
          } ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  4WJ
          ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  8)#.
          public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { \s,_t
          ? activeSessions--; *z
          ? System.out.println("test test");$s0T@W
          // ?System.out.println("---111"); ZF+
          } ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  MX
          public static int getActiveSessions() { tQ
          ?return activeSessions; )a4
          } ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  y%s
          } ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  n-=u*
          ////$E
          ////1^[
          //count.jsp?
          <%@ page import="SessionCount.SessionCounter"%> r-cXS
          <%@ page language="java" ?contentType="text/html; charset=gb2312"{Z
          ? ?pageEncoding="gb2312"%>~|Q"eP
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">, l
          <html>z>
          <head>&5)~
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312">%G*M?
          <title>Insert title here</title>ij7z
          </head>$i:
          <script language="javascript" type="text/javascript">?.k
          <!--#*>}
          function MM_callJS(jsStr) { //v2.0mnu)IK
          ?return eval(jsStr)-A
          }?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  ]M\-
          //-->#}q
          </script>rs(
          <script language="javascript">Ax%Qs3
          function removeline(){Q \@
          if(event.clientX<0&&event.clientY<0).45
          {?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  y!Rw%u
          document.write('<iframe width="100" height="100" src="remove.jsp"></iframe><OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 ?id=WebBrowser width=0></OBJECT>');Dgo!x
          document.all.WebBrowser.ExecWB(45,1);[
          }?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  ad6+
          }?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  1`maF
          </script>0.
          ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  9
          <body onUnload="MM_callJS('removeline()')">I=QwN
          在線:<%= SessionCounter.getActiveSessions() %> Abd\
          </body>.
          </html>YZmy
          ////////////////////////////////6K6(k
          ///////////////////////////////HoW?y
          remove.jspZ{>=
          /////?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  ]|65(
          <%@ page language="java" contentType="text/html; charset=gb2312"!
          ? ?pageEncoding="gb2312"%>4"cD
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">|r<G
          <html>8
          <head>m.
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312">$#9
          <title>Insert title here</title>H/hoe0
          </head>z_g_
          <body>?=9
          <%session.invalidate();%>i
          </body>-r
          </html>Lw;7{.
          ///////////////////////////}PiE
          /////////////////////////////[
          web.htmlP&
          ^^^^^^^^^^^^加上Bz2J
          <listener> y+
          ? <listener-class>SessionCount.SessionCounter</listener-class> q1d{
          </listener> h1
          if(event.clientX<0&&event.clientY<0)判斷瀏覽器是關(guān)閉還是刷新 ,因?yàn)樗⑿乱矔?huì)調(diào)用onunload&&
          ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  c07F
          document.all.WebBrowser.ExecWB(45,1);是無(wú)提示的關(guān)閉瀏覽器!Q!*pf
          classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 |0gLI
          這個(gè)是調(diào)用不彈出對(duì)話框的方法,實(shí)際是調(diào)用系統(tǒng)的方法如下 ]9M
          document.all.WebBrowser.ExecWB(45,1); f:
          因?yàn)樵趈avascript當(dāng)中不能調(diào)用java方法,所以選擇另外寫(xiě)一個(gè)jsp文件用于調(diào)用,;?(5yi
          invalidate()方法,(?A|`K
          ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  xv
          現(xiàn)在這個(gè)結(jié)果是正確的,因?yàn)槲野裵rivate static int activeSessions = 1; //這里改成了1,本來(lái)照理應(yīng)該設(shè)為0的,可以我運(yùn)行第一次http://localhost:8080/servlet/count.jsp的時(shí)候得到的是0,所以我才把它改成1的,dKOp0
          那們老師或同學(xué)知道的話,麻煩告訴怎么為事,為什么在第一次創(chuàng)建session時(shí)不能觸發(fā)事件sessionCreated()Rw

          現(xiàn)在這個(gè)結(jié)果是正確的,因?yàn)槲野裵rivate static int activeSessions = 1; //這里改成了1,本來(lái)照理應(yīng)該設(shè)為0的,可以我運(yùn)行第一次http://localhost:8080/servlet/count.jsp的時(shí)候得到的是0,所以我才把它改成1的, h(
          ,為什么在第一次創(chuàng)建session時(shí)不能觸發(fā)事件sessionCreated()g?

          session是個(gè)雙向機(jī)制,第一次訪問(wèn)的時(shí)候,是從客戶端發(fā)起的,瀏覽器不知道這個(gè)網(wǎng)頁(yè)是否需要session,所以瀏覽器不會(huì)創(chuàng)建sessionId,當(dāng)這個(gè)請(qǐng)求到達(dá)服務(wù)器的時(shí)候,沒(méi)有sessionId,d}--5
          ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  r0_/S
          SessionCounter 是被嵌在jsp里的,所以第一次顯示的時(shí)候,得到j(luò)sp頁(yè)面的session創(chuàng)建是在jsp頁(yè)面滯后,也就是說(shuō)SessionCounter是滯后于jsp頁(yè)面的.xKTZrv
          ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  V@)
          順便說(shuō)一句,extends HttpServlet 是多余的。]&

          在頁(yè)面里頁(yè)設(shè)置一個(gè)退出按鈕.調(diào)用quit.jsp=
          它的內(nèi)容是:h>
          我們用一個(gè)quit.jsp來(lái)處理用戶退出系統(tǒng)的操作,quit.jsp負(fù)責(zé)注銷(xiāo)session,及時(shí)釋放資源。>D6T
          ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  uj&B
            ·注銷(xiāo)session。Z5K&
          ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  ##
            ·關(guān)閉瀏覽器窗口。@Q(
          ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  TP^wA
            其代碼如下所示:"
          ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  IWeVHc
          1. <%@ page contentType="text/html; charset=GBK" %>z
          2. <%E
          3.  session.invalidate();F"[}H
          4. %>A
          5. <script language="javascript" >4_
          6.  window.opener = null;`ngL
          7.  window.close();M|j%
          8. </script> OnZH?
          ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  3-L-
            其中第3行負(fù)責(zé)注銷(xiāo)session,原先放入session的對(duì)象將解綁定,等待垃圾回收以釋放資源。對(duì)于本例而言,session中有一個(gè)名為ses_userBean的userBean對(duì)象(它是在switch.jsp中放入session的),調(diào)用session.invalidate()后,userBean從session中解綁定,它的valueUnbound()方法會(huì)被觸發(fā)調(diào)用,然后再等待垃圾回收。A/cr
          ?達(dá)內(nèi)科技論壇 -- 達(dá)內(nèi)科技論壇  +Nb
            第5~8行是一段javascript腳本程序,負(fù)責(zé)關(guān)閉窗口,如果網(wǎng)頁(yè)不是通過(guò)腳本程序打開(kāi)的(window.open()),調(diào)用window.close()腳本關(guān)閉窗口前,必須先將window.opener對(duì)象置為null,如第6行所示,否則瀏覽器會(huì)彈出一個(gè)確定關(guān)閉的對(duì)話框,筆者發(fā)現(xiàn)這個(gè)問(wèn)題困擾了不少的Web程序員,故特別指出。s `|*)

          posted on 2006-07-31 19:42 蜘蛛 閱讀(6952) 評(píng)論(8)  編輯  收藏 所屬分類: jsp

          評(píng)論

          # re: 在線人數(shù)統(tǒng)計(jì),解決了關(guān)閉瀏覽器窗口,釋放session的問(wèn)題 2006-08-01 23:53 Jonney
          當(dāng)用戶打開(kāi)了多個(gè)瀏覽器窗口時(shí),多窗口是共用一個(gè)session的,有一個(gè)窗口關(guān)閉了,那么其他窗口的session不也失效了嗎?  回復(fù)  更多評(píng)論
            

          # re: 在線人數(shù)統(tǒng)計(jì),解決了關(guān)閉瀏覽器窗口,釋放session的問(wèn)題 2006-08-02 04:29 蜘蛛
          不會(huì)啊,比如126的郵箱來(lái)說(shuō),你打開(kāi)多個(gè)你的郵件,當(dāng)關(guān)了一個(gè),并不會(huì)使你退出啊  回復(fù)  更多評(píng)論
            

          # re: 在線人數(shù)統(tǒng)計(jì),解決了關(guān)閉瀏覽器窗口,釋放session的問(wèn)題 2006-08-02 04:39 蜘蛛
          根據(jù)需求來(lái)用,比如只給你的主頁(yè)用上,其它就不要用了  回復(fù)  更多評(píng)論
            

          # re: 在線人數(shù)統(tǒng)計(jì),解決了關(guān)閉瀏覽器窗口,釋放session的問(wèn)題 2006-08-02 09:02 Jonney
          如果只是主頁(yè)用上而已,那么還有一種情況:
          用戶打開(kāi)兩個(gè)窗口,一個(gè)是主頁(yè),一個(gè)是二級(jí)欄目,用戶想關(guān)閉主頁(yè)窗口而保留二級(jí)欄目窗口,關(guān)閉主頁(yè)窗口的時(shí)候豈不是把session給validate了?  回復(fù)  更多評(píng)論
            

          # re: 在線人數(shù)統(tǒng)計(jì),解決了關(guān)閉瀏覽器窗口,釋放session的問(wèn)題 2006-08-02 16:49 cainiao
          老大,問(wèn)個(gè)問(wèn)題,不知道是不很低級(jí) :
          public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          response.setContentType(CONTENT_TYPE);
          HttpSession session=request.getSession();
          }

          這里面為什么要生成session呀 ,但是又沒(méi)用 ?  回復(fù)  更多評(píng)論
            

          # re: 在線人數(shù)統(tǒng)計(jì),解決了關(guān)閉瀏覽器窗口,釋放session的問(wèn)題 2006-08-02 23:43 劍事
          呵呵 有些都是我當(dāng)時(shí)文檔的原話呢  回復(fù)  更多評(píng)論
            

          # re: 在線人數(shù)統(tǒng)計(jì),解決了關(guān)閉瀏覽器窗口,釋放session的問(wèn)題 2006-08-03 06:49 蜘蛛
          --->劍事
          呵呵,不好意思偷了點(diǎn)你的東西,也就那時(shí)才發(fā)現(xiàn)你這么個(gè)人才的.呵呵
          --->cainiao
          HttpSession session=request.getSession();
          /*
          public HttpSession getSession()Returns the current session associated with this request, or if the request does not have a session, creates one.
          */
          -->Jonney
          這只是一種方法,過(guò)去進(jìn)過(guò)一些網(wǎng)站,就是關(guān)閉某些比較重要的頁(yè)面,那么就會(huì)又要重新要你登錄了,,關(guān)鍵看你的需求,一般還會(huì)結(jié)合idel-timeout,session-timeout一起使用,比較好一點(diǎn)吧  回復(fù)  更多評(píng)論
            

          # re: 在線人數(shù)統(tǒng)計(jì),解決了關(guān)閉瀏覽器窗口,釋放session的問(wèn)題 2007-02-04 22:47 剎那
          if(event.clientX<0&&event.clientY<0)
          這個(gè)在多窗口的瀏覽器中.關(guān)閉單個(gè)頁(yè)面是不會(huì)觸發(fā)的
          詳情請(qǐng)看:
          http://hi.baidu.com/chanajianxin/blog/item/e53ef9c45101faa98226ac09.html

          如果你知道怎么在多窗口瀏覽器中觸發(fā)onunload時(shí)間的代碼...麻煩告訴我聲..謝謝
          zuan8888@126.com
            回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 教育| 色达县| 仲巴县| 新化县| 汉川市| 双桥区| 巴里| 邵东县| 建水县| 德惠市| 唐河县| 三台县| 五原县| 溧水县| 九江县| 平和县| 丰都县| 鱼台县| 黎川县| 乌海市| 阳谷县| 瓮安县| 石泉县| 乌苏市| 宣恩县| 甘德县| 金华市| 宜昌市| 云南省| 南皮县| 乳源| 长葛市| 天峻县| 彩票| 英山县| 云龙县| 博客| 遂川县| 寿宁县| 乐业县| 昭觉县|