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

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

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

    隨筆-55  評論-208  文章-0  trackbacks-0
    在網(wǎng)上找了一個老外寫的dwr  reverse-ajax的例子,自己把coding順序調(diào)整了一下希望可以對學習dwr reverse-ajax的朋友有所幫助
    1、首先要下載dwr 2.0 地址 http://getahead.org/dwr/download
    2、在web.xml中加入dwr的servlet和相關配置
     <!--dwr servlet-->
      
    <servlet>
        
    <servlet-name>dwr-invoker</servlet-name>
        
    <display-name>DWR Servlet</display-name>
        
    <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
        
    <init-param>
            
    <param-name>debug</param-name>
            
    <param-value>true</param-value>
        
    </init-param>
       
      <init-param>
          
    <param-name>pollAndCometEnabled</param-name>
          
    <param-value>true</param-value>
        
    </init-param>
        
    <load-on-startup>1</load-on-startup>      
      
    </servlet>
      
    <servlet-mapping>
          
    <servlet-name>dwr-invoker</servlet-name>
          
    <url-pattern>/dwr/*</url-pattern>
      
    </servlet-mapping>
    pollAndCometEnabled是指dwr 的reverse ajax是使用polling 和comet的方式,在這個例子中可以明顯地從頁面上看出來是用的polling+comet
    附:關于reverse-ajax的實現(xiàn)有3種方式
    polling   就是隔一段時間向服務器發(fā)送一request來檢查服務端是否有數(shù)據(jù)更新
    comet   就是一個長http請求,在請求期間服務端可以向客戶端push數(shù)據(jù),但是這種做法要求server和brower長期建立一個通信通道,而且效率很低
    piggyback 就是服務端的更新數(shù)據(jù)都在排隊等待,等到下一次有請求過來,那么這些等待更新數(shù)據(jù)就伴隨這次請求一起發(fā)送到brower
    有關更詳細的reverse-ajax技術介紹可以參考http://getahead.org/dwr/reverse-ajax
    3、創(chuàng)建一個dwr.xml,用于配置你要制定的java代碼映射類,以及允許使用的方法和converter
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE dwr PUBLIC
        "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
        "http://www.getahead.ltd.uk/dwr/dwr10.dtd"
    >
    <dwr>
      
    <allow>
        
    <create creator="new" javascript="DWRHelper">
          
    <param name="class" value="com.cloverworxs.uma.helper.DWRHelper" />
          
    <include method="addMessage" />
        
    </create>
            
    <convert converter="bean" match="com.cloverworxs.uma.helper.Message">
          
    <param name="include" value="id,text" />
        
    </convert>
      
    </allow>
    </dwr>
    create是只一個java的js映射,其中include是可以在js使用的方法
    convert 是指對應js到java,或者java到js的對象轉換,其中include是可以轉換的屬性
    4、寫服務段的java代碼
    DWRHelper
    package com.cloverworxs.uma.helper;

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    import java.util.LinkedHashMap;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Map;

    import org.directwebremoting.ScriptBuffer;
    import org.directwebremoting.WebContext;
    import org.directwebremoting.WebContextFactory;
    import org.directwebremoting.proxy.dwr.Util;

    public class DWRHelper {
         
        
    public void addMessage(String text) {
            LinkedList messages 
    = new LinkedList();

            
    if (text != null && text.trim().length() > 0{
                messages.addFirst(
    new Message(text));
                
    while (messages.size() > 10{
                    messages.removeLast();
                }

            }

            
    // Reverse Ajax code to be added here shortly
            WebContext wctx = WebContextFactory.get();
            String currentPage 
    = wctx.getCurrentPage();

            
    // Clear the input box in the browser that kicked off this page only
            Util utilThis = new Util(wctx.getScriptSession());
            utilThis.setValue(
    "text""");

            
    // For all the browsers on the current page:
            Collection sessions = wctx.getScriptSessionsByPage(currentPage);
            Util utilAll 
    = new Util(sessions);
           
     // Clear the list and add in the new set of messages
            utilAll.removeAllOptions("chatlog");
            utilAll.addOptions(
    "chatlog", messages, "text");

        }

       
    }

    Message
    package com.cloverworxs.uma.helper;

    import org.directwebremoting.Security;

    public class Message {
        
    public Message(String newtext) {
            text 
    = newtext;
            
    if (text.length() > 256{
                text 
    = text.substring(0256);
            }

            text 
    = Security.replaceXmlCharacters(text);
        }


        
    public long getId() {
            
    return id;
        }


        
    public String getText() {
            
    return text;
        }


        
    private long id = System.currentTimeMillis();

        
    private String text;
    }

    5、到此為止可以寫頁面代碼了,下面的代碼html或者jsp都可以
    <h1>Java Chat</h1>
    <body onload="dwr.engine.setActiveReverseAjax(true);">
    <script type='text/javascript' src='/sperc/dwr/interface/DWRHelper.js'></script>
    <script type='text/javascript' src='/sperc/dwr/engine.js'></script>
    <script type='text/javascript' src='/sperc/dwr/util.js'></script>
    <p>This is a very simple chat demo that uses reverse ajax to collect messages and server-side browser manipulation to update the pages with the results.</p>
    <p>Your Message: <input id="text" onkeypress="dwr.util.onReturn(event, sendMessage)" /> <input type="button" value="Send" onclick="sendMessage()" /></p>
    <script type="text/javascript">
        
    function sendMessage() {
          alert(dwr.util.getValue(
    "text"));
          DWRHelper.addMessage(dwr.util.getValue(
    "text"));
        }

    </script>
    <hr />
    <ul id="chatlog" style="list-style-type:none;">
    </ul>
    </body>
    頁面代碼簡單吧,只有方法調(diào)用,沒有任何獲得返回數(shù)據(jù),和對回傳數(shù)據(jù)處理的代碼
    注意:<body onload="dwr.engine.setActiveReverseAjax(true);">
    這個是要在使用reverse-ajax的頁面必須的!
    現(xiàn)在可以啟動應用體檢一把reverse-ajax,希望你能和我有一樣的驚奇感覺
    當然,肯定有人會說這種功能用普通的ajax也可以實現(xiàn)啊,為什么要用reverse-ajax
    這時候你就要考慮這種情況了,有用戶A和用戶B同時在發(fā)Message,A正在看message沒有任何request動作,而B發(fā)了一條新message,這時要求這個信息要展現(xiàn)給A看,那么普通的ajax可以處理這種功能嗎?這就是reverse-ajax的用途,可以從服務段向brower下推信息
    posted on 2007-05-19 14:48 rocket 閱讀(6603) 評論(11)  編輯  收藏

    評論:
    # re: dwr reverse-ajax 實例解析 2007-06-02 17:24 | sunflower
    公司里有些領導一味追求速度,不讓搞設計.
    不肯接受新東西,也不讓我們年輕人使用新東西.
    獨斷專行.
    呵呵,rocket當初走的時候不會因為這個吧.^-^  回復  更多評論
      
    # re: dwr reverse-ajax 實例解析 2007-06-02 17:26 | sunflower
    還是喜歡fred和phil那些不擺架子的前輩的.
    ^-^  回復  更多評論
      
    # re: dwr reverse-ajax 實例解析 2007-08-10 15:53 | thlzjfe
    我怎么看著效果不明顯啊?必須點擊是才能談出個提示框,事件 onkeypress 的作用是什么啊,效果有是如何.請回復,謝謝!  回復  更多評論
      
    # re: dwr reverse-ajax 實例解析 2007-08-11 14:46 | rocket
    你覺得效果不明顯是因為單機操作  可以試想一下這樣一種情況,兩個同時在線的用戶,A用戶有了操作之后,系統(tǒng)判斷會對另外B用戶造成影響,那么就可以使用reverse-ajax的方式在不刷新頁面的情況下把信息推給B用戶  回復  更多評論
      
    # re: dwr reverse-ajax 實例解析 2007-09-19 09:25 | yorry
    關鍵在于DWRHelper把msg推給了所有的客戶端。
    謝謝博主分享。  回復  更多評論
      
    # re: dwr reverse-ajax 實例解析 2008-03-07 09:43 | niejun
    謝謝分享,確實很驚訝  回復  更多評論
      
    # re: dwr reverse-ajax 實例解析[未登錄] 2008-08-27 14:02 | kim
    非常感謝這個教程。試過了,效果不錯。
    在用http://***/ ,在IE,Firefox訪問都沒有問題,
    但是https://***/ , IE就一點反應都沒有了。Firefox沒有問題。
    請問知道什么問題嗎?謝謝啊  回復  更多評論
      
    # re: dwr reverse-ajax 實例解析[未登錄] 2008-12-04 10:05 | cc
    為什么報錯說找不到dwr  回復  更多評論
      
    # re: dwr reverse-ajax 實例解析[未登錄] 2008-12-04 10:24 | cc
    <body onload="dwr.engine.setActiveReverseAjax(true);">可能就是這個dwr找不到  回復  更多評論
      
    # re: dwr reverse-ajax 實例解析 2009-04-26 14:58 | longrui
    您好:
    LinkedList messages = new LinkedList();
    的位置寫錯了,寫在方法里在每次調(diào)用方法時都會實例一個新的list,那后面儲存10條的步驟也就變得沒有意義了。  回復  更多評論
      
    # re: dwr reverse-ajax 實例解析 2009-10-29 16:31 | benson
    我的會一直出現(xiàn)
    嚴重的: Error loading WebappClassLoader
    delegate: false
    repositories:
    /WEB-INF/classes/
    ----------> Parent Classloader:
    org.apache.catalina.loader.StandardClassLoader@107ebe1
    uk.ltd.getahead.dwr.DWRServlet
    java.lang.ClassNotFoundException: uk.ltd.getahead.dwr.DWRServlet

    我有看dwr.jar 裡的確實有 uk.ltd.getahead.dwr.DWRServlet   回復  更多評論
      

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 日本一区午夜艳熟免费| 国产zzjjzzjj视频全免费| 久久精品国产亚洲av高清漫画| 国产福利在线观看永久免费| 亚洲av午夜成人片精品电影| 国产精品亚洲va在线观看| 暖暖在线日本免费中文| 亚洲成AV人片在WWW| 日韩成人在线免费视频| 亚洲AV噜噜一区二区三区| 国产精品免费小视频| 精品在线免费视频| 免费在线观看黄色毛片| 深夜福利在线视频免费| 久久精品国产亚洲AV不卡| 成人毛片100免费观看| 亚洲人色婷婷成人网站在线观看 | 日韩在线视精品在亚洲| 成人永久福利免费观看| 美女被吸屁股免费网站| 亚洲国产精品视频| 中文字幕的电影免费网站| 国产成A人亚洲精V品无码| 亚洲精品免费在线观看| 亚洲黄色网址大全| 57PAO成人国产永久免费视频| 亚洲va在线va天堂va手机| 在线免费观看中文字幕| 视频一区二区三区免费观看| 国产黄色一级毛片亚洲黄片大全| aaa毛片视频免费观看| 亚洲第一福利视频| 2021久久精品免费观看| 亚洲av中文无码乱人伦在线观看| 免费在线观看亚洲| 中文在线观看国语高清免费| 亚洲色图在线播放| 成年私人影院免费视频网站| 美女被免费网站视频在线| 亚洲精品自产拍在线观看| 7m凹凸精品分类大全免费|