<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è)長(zhǎng)http請(qǐng)求,在請(qǐng)求期間服務(wù)端可以向客戶端push數(shù)據(jù),但是這種做法要求server和brower長(zhǎng)期建立一個(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>
    頁面代碼簡(jiǎn)單吧,只有方法調(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日韩AV永久无码绿巨人| 激情97综合亚洲色婷婷五| 亚洲AV伊人久久青青草原| 免费人妻av无码专区| 亚洲AV伊人久久青青草原| 亚洲第一视频在线观看免费| 亚洲成av人片不卡无码久久| 亚洲国产精品综合久久一线| 国产av无码专区亚洲av果冻传媒 | 少妇性饥渴无码A区免费| 国产无限免费观看黄网站| 国产乱子伦精品免费视频| 91成人免费福利网站在线| 91免费在线视频| 免费播放一区二区三区| 99视频全部免费精品全部四虎| 四虎永久在线观看免费网站网址| 美女视频黄的全免费视频| 成人免费视频网址| 国产性生交xxxxx免费| 亚洲成a人片在线观看老师| 亚洲午夜久久久久久久久久| 国产V亚洲V天堂A无码| 亚洲国产精品一区| 亚洲人成网站在线观看播放动漫 | 亚洲综合激情另类专区| 亚洲精品成人片在线观看精品字幕 | WWW国产成人免费观看视频| 成人免费777777被爆出| 久99久精品免费视频热77| 免费下载成人电影| 国产成人免费a在线资源| 亚洲中文字幕成人在线| 99ri精品国产亚洲| 亚洲欧美日韩一区二区三区在线| 日日躁狠狠躁狠狠爱免费视频 | 日韩精品无码免费视频| 精品视频在线免费观看| 99re热免费精品视频观看|