<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    zhyiwww
    用平實的筆,記錄編程路上的點點滴滴………
    posts - 536,comments - 394,trackbacks - 0
    (作者zhyiwww,轉載請您注明出處,zhyiwww@163.com)

    1 關于ScriptSession
    ScriptSession不會與HttpSession同時創建
    當我們訪問一個頁面的時候,如果是第一次訪問,就會創建一個新的HttpSession,之后再訪問的時候,就會保持當前的Session,即使是刷新,也能保持當前的HttpSession。
    但是,ScriptSession不同,第一次訪問,會創建一個ScriptSession,但是,如果你刷新,就會創建一個新的ScriptSession.


    2 如何得到ScriptSession
    在DWR中,我們可以通過WebContextFactory.get()來取得一個WebContext對象,進而通過WebContext的getScriptSession()取得ScriptSession對象。
    但是要注意,在我們自定義的Servlet中,我們也可以通過WebContextFactory.get()來取得一個WebContext,但是這種方法卻不能取得ScriptSession對象。因為,此WebContext對象其實不是通過DWR的上下文環境得到的,所以,就根本沒有創建ScriptSession對象。
    假設這種方式也能得到ScriptSession的話,那么我們實現“推”也就可以不局限在DWR的上下文環境中了,那么其靈活性就會大很多了。

    所以,這就是我們不能在Servlet中實現推的原因。

    3 關于刷新就創建一個新的ScriptSession問題
    ?在我們需要推送的頁面中,如果你刷新以下,那么就提交一個Http的request,此時,如果是第一次,那么就會創建一個httpSession對象,同時,請求由DwrServlet來處理后,就會創建一個ScriptSession.這個ScriptSession會和你的request請求的URI綁定放在一個由ScriptSessionManager維護的Map里面(這里面其實是一個URI對應的Set,在Set里面放置的是URI綁定的所有ScriptSession)。
    當你刷新的時候,同樣的一個HttpSession,卻會創建一個新的ScriptSession,然后綁定到對應的URI上。

    4 向所有的頁面訪問者推送
    當我們想向所有的頁面訪問者推送的時候,我們只需要,取得所有的頁面訪問者,就可以“推”了。
    如何取得所有的頁面訪問者?可以通過
    //??? ??? Collection pages = webContext.getScriptSessionsByPage("/SynMap/map/map.jsp");
    來取得/SynMap/map/map.jsp的所有訪問的ScriptSession
    如何推送,
    Util util = new Util(pages);
    util.addFunctionCall("syningMap",new Double(x),new Double(y),new Integer(zoom));
    通過此方法,就可以實現調用客戶端的javascript函數,實現對客戶端的操作。

    5 在上面的推送中產生的問題
    上面的方法已經可以實現向所有的訪問者推送。但是問題是,在客戶端,如果用戶刷新一次或多次,那么,Collection里面可能就保存了很多的無用的ScriptSession,所以不僅僅會影響性能問題,更重要的是,可能就不能實現你想要的功能。

    比如,你想取得當前再現的有效用戶,那么你就需要知道那些ScriptSession是有效的。

    6 如何管理有效的ScriptSession

    由于上面的問題,我們就需要自己管理ScriptSession.其實,有效地HttpSession,就是那個和當前的HttpSession匹配的ScriptSession.
    所以,我們就可以自己維護一個Map,在這個Map里面,我們定義key就是HttpSession的Id,其值就是ScriptSession對象。
    在每一次頁面載入的時候,都去注冊此ScriptSession,那么就會把新的ScriptSession綁定到httpSession上面了。
    // session and scriptSession map
    Map sm = g.getSessions();
    // hs is HttpSession
    // ss is ScriptSession object
    sm.put(hs.getId(), ss);

    7 如何實現有效推送
    通過上面的Map取得所有的有效ScriptSession集合
    Collection pages = g.getSessions().values();
    然后再推送,就可以了。

    8 上面問題的新的解決方案
    上面的技術問題和解決方案都是在DWR2.0的環境下遇到的。
    昨天看了一下,即將正式發布的DWR3.0的文檔,里面對AJAX Reverse技術增加了不少功能。
    其中新加了一個象HttpSessionListener的東西,叫ScriptSessionListener
    所以,我想,可以通過這個Listener實現上面的功能,也就是說,在監聽到一個ScriptSession創建的時候,我們就直接判斷,并把此ScriptSession綁定到httpSession上,就可以了。同樣用上面的那個map來管理就可以了。
    這個是我的思路,我還沒有實踐,如果你需要的話,可以自己去試一下。
    新版本的DWR開發實現推技術會更加方便,期待吧!!




    |----------------------------------------------------------------------------------------|
                               版權聲明  版權所有 @zhyiwww
                引用請注明來源 http://m.tkk7.com/zhyiwww   
    |----------------------------------------------------------------------------------------|
    posted on 2008-10-24 09:24 zhyiwww 閱讀(6784) 評論(6)  編輯  收藏 所屬分類: j2ee

    FeedBack:
    # re: DWR推技術在開發中需要注意的ScriptSession問題[未登錄]
    2008-11-21 11:03 | Gavin
    沒看懂:
    // session and scriptSession map
    Map sm = g.getSessions();
    // hs is HttpSession
    // ss is ScriptSession object
    sm.put(hs.getId(), ss);

    這里那個g.getSessions()的g是什么?  回復  更多評論
      
    # re: DWR推技術在開發中需要注意的ScriptSession問題
    2008-11-21 16:05 | zhyiwww
    這個部分是我寫的代碼,自己去維護一個Session的Map,用來實現Session和ScriptSession的對應。
    其實這個Map就是你要管理的Session集合。  回復  更多評論
      
    # re: DWR推技術在開發中需要注意的ScriptSession問題
    2008-12-10 16:35 | 陳一
    讀了~  回復  更多評論
      
    # re: DWR推技術在開發中需要注意的ScriptSession問題
    2009-02-24 16:39 | 鐘僥
    對于第三條為什么不能在servlet中獲取webcontext不是很懂,能解釋下嗎,謝謝了!  回復  更多評論
      
    # re: DWR推技術在開發中需要注意的ScriptSession問題
    2010-04-22 15:26 | baomi
    寫的很好,通俗易懂!  回復  更多評論
      
    # re: DWR推技術在開發中需要注意的ScriptSession問題[未登錄]
    2014-03-26 22:41 | dd
    @Gavin
    我也想知道  回復  更多評論
      
    主站蜘蛛池模板: 日本免费高清视频| 国产精品免费久久久久久久久| 日韩免费在线观看视频| 国产亚洲?V无码?V男人的天堂 | 国产一精品一aⅴ一免费| 亚洲中文字幕久久无码| 18禁网站免费无遮挡无码中文| 亚洲人成综合在线播放| 国产精品成人免费视频网站京东| 亚洲欧美日韩中文字幕一区二区三区| 一二三四在线观看免费高清中文在线观看| 亚洲男人天堂影院| 91在线视频免费播放| 亚洲精华国产精华精华液| 国产91在线免费| 国产精品免费久久久久影院| 亚洲福利在线视频| 免费v片在线观看视频网站| 亚洲成年网站在线观看| 亚洲成av人片不卡无码久久| 男女一边摸一边做爽的免费视频| 亚洲国产精品线在线观看| 青娱分类视频精品免费2| 久久亚洲色WWW成人欧美| 亚洲国产精品13p| 91高清免费国产自产拍2021| 亚洲第一男人天堂| 亚洲无码视频在线| 久久永久免费人妻精品| 中文字幕亚洲精品无码| 精品国产人成亚洲区| 免费专区丝袜脚调教视频| 亚洲AV无码一区二区一二区| 亚洲精品成人片在线播放| 成人免费毛片内射美女-百度| 爱情岛亚洲论坛在线观看| 久久亚洲精品成人777大小说| 日韩特黄特色大片免费视频| a级毛片毛片免费观看久潮喷| 亚洲国产成人在线视频| 亚洲精品无码永久在线观看|