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

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

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

    隨筆-55  評(píng)論-208  文章-0  trackbacks-0
    在網(wǎng)上找了一個(gè)老外寫的dwr  reverse-ajax的例子,自己把coding順序調(diào)整了一下希望可以對(duì)學(xué)習(xí)dwr reverse-ajax的朋友有所幫助
    1、首先要下載dwr 2.0 地址 http://getahead.org/dwr/download
    2、在web.xml中加入dwr的servlet和相關(guān)配置
     <!--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的方式,在這個(gè)例子中可以明顯地從頁面上看出來是用的polling+comet
    附:關(guān)于reverse-ajax的實(shí)現(xiàn)有3種方式
    polling   就是隔一段時(shí)間向服務(wù)器發(fā)送一request來檢查服務(wù)端是否有數(shù)據(jù)更新
    comet   就是一個(gè)長http請(qǐng)求,在請(qǐng)求期間服務(wù)端可以向客戶端push數(shù)據(jù),但是這種做法要求server和brower長期建立一個(gè)通信通道,而且效率很低
    piggyback 就是服務(wù)端的更新數(shù)據(jù)都在排隊(duì)等待,等到下一次有請(qǐng)求過來,那么這些等待更新數(shù)據(jù)就伴隨這次請(qǐng)求一起發(fā)送到brower
    有關(guān)更詳細(xì)的reverse-ajax技術(shù)介紹可以參考http://getahead.org/dwr/reverse-ajax
    3、創(chuàng)建一個(gè)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是只一個(gè)java的js映射,其中include是可以在js使用的方法
    convert 是指對(duì)應(yīng)js到j(luò)ava,或者java到j(luò)s的對(duì)象轉(zhuǎn)換,其中include是可以轉(zhuǎn)換的屬性
    4、寫服務(wù)段的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)用,沒有任何獲得返回?cái)?shù)據(jù),和對(duì)回傳數(shù)據(jù)處理的代碼
    注意:<body onload="dwr.engine.setActiveReverseAjax(true);">
    這個(gè)是要在使用reverse-ajax的頁面必須的!
    現(xiàn)在可以啟動(dòng)應(yīng)用體檢一把reverse-ajax,希望你能和我有一樣的驚奇感覺
    當(dāng)然,肯定有人會(huì)說這種功能用普通的ajax也可以實(shí)現(xiàn)啊,為什么要用reverse-ajax
    這時(shí)候你就要考慮這種情況了,有用戶A和用戶B同時(shí)在發(fā)Message,A正在看message沒有任何request動(dòng)作,而B發(fā)了一條新message,這時(shí)要求這個(gè)信息要展現(xiàn)給A看,那么普通的ajax可以處理這種功能嗎?這就是reverse-ajax的用途,可以從服務(wù)段向brower下推信息
    posted on 2007-05-19 14:48 rocket 閱讀(6605) 評(píng)論(11)  編輯  收藏

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

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲日韩一区二区三区| 亚洲一区精品伊人久久伊人 | 亚洲成在人天堂一区二区| 亚洲精品视频在线看| 亚洲av片一区二区三区| 亚洲?V无码成人精品区日韩| 国产在线98福利播放视频免费| 日韩在线a视频免费播放| 免费看大黄高清网站视频在线| 日韩在线a视频免费播放| 免费大黄网站在线观| 亚洲国产精品一区二区第四页| 亚洲中文字幕伊人久久无码| 亚洲色婷婷一区二区三区| 国产亚洲av片在线观看播放| 久久精品国产亚洲AV网站| 精品亚洲成a人片在线观看少妇| 亚洲国产精品久久网午夜| 亚洲人精品亚洲人成在线| 亚洲av无码专区亚洲av不卡| 无遮挡a级毛片免费看| 在线观看人成视频免费无遮挡| 好久久免费视频高清| 国内精自视频品线六区免费| 免费a级毛片高清视频不卡| 色吊丝永久在线观看最新免费| 亚洲av手机在线观看| 亚洲精品无码久久久久去q| 久久水蜜桃亚洲av无码精品麻豆| 亚洲av极品无码专区在线观看| 亚洲成av人片天堂网无码】| 九九免费精品视频在这里| 男人j进入女人j内部免费网站| www视频在线观看免费| 日本免费网站观看| 好看的电影网站亚洲一区| 亚洲婷婷综合色高清在线| 国产成人精品亚洲| 国产在线精品免费aaa片| 久久精品免费一区二区喷潮| 男人的天堂亚洲一区二区三区|