<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)整了一下希望可以對學(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的方式,在這個例子中可以明顯地從頁面上看出來是用的polling+comet
    附:關(guān)于reverse-ajax的實(shí)現(xiàn)有3種方式
    polling   就是隔一段時間向服務(wù)器發(fā)送一request來檢查服務(wù)端是否有數(shù)據(jù)更新
    comet   就是一個長http請求,在請求期間服務(wù)端可以向客戶端push數(shù)據(jù),但是這種做法要求server和brower長期建立一個通信通道,而且效率很低
    piggyback 就是服務(wù)端的更新數(shù)據(jù)都在排隊等待,等到下一次有請求過來,那么這些等待更新數(shù)據(jù)就伴隨這次請求一起發(fā)送到brower
    有關(guān)更詳細(xì)的reverse-ajax技術(shù)介紹可以參考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 是指對應(yīng)js到j(luò)ava,或者java到j(luò)s的對象轉(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)用,沒有任何獲得返回數(shù)據(jù),和對回傳數(shù)據(jù)處理的代碼
    注意:<body onload="dwr.engine.setActiveReverseAjax(true);">
    這個是要在使用reverse-ajax的頁面必須的!
    現(xiàn)在可以啟動應(yīng)用體檢一把reverse-ajax,希望你能和我有一樣的驚奇感覺
    當(dāng)然,肯定有人會說這種功能用普通的ajax也可以實(shí)現(xiàn)啊,為什么要用reverse-ajax
    這時候你就要考慮這種情況了,有用戶A和用戶B同時在發(fā)Message,A正在看message沒有任何request動作,而B發(fā)了一條新message,這時要求這個信息要展現(xiàn)給A看,那么普通的ajax可以處理這種功能嗎?這就是reverse-ajax的用途,可以從服務(wù)段向brower下推信息
    posted on 2007-05-19 14:48 rocket 閱讀(6603) 評論(11)  編輯  收藏

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

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 91福利免费视频| 美女扒开尿口给男人爽免费视频 | 99免费在线观看视频| 久久久亚洲精品无码| 成在人线av无码免费高潮水| 精品亚洲成α人无码成α在线观看| 青娱乐在线视频免费观看| 亚洲乱码卡三乱码新区| 性色av免费观看| 国产偷国产偷亚洲清高APP| 亚洲A丁香五香天堂网| a级片免费观看视频| 亚洲美女在线观看播放| 最近中文字幕无免费视频| 黄色a级片免费看| 亚洲日韩一区二区一无码| 国产男女性潮高清免费网站| 污污污视频在线免费观看| 久久久亚洲欧洲日产国码农村| 亚洲黄片毛片在线观看| 九九精品免费视频| 看成年女人免费午夜视频| 亚洲视频2020| 日产国产精品亚洲系列| 国产白丝无码免费视频| 亚洲中文字幕人成乱码 | 国产精品观看在线亚洲人成网| 亚洲人成小说网站色| 亚洲精品无码久久久久去q| 18女人水真多免费高清毛片| 亚洲国产精品无码中文lv| 国产亚洲高清不卡在线观看| 亚洲日本va午夜中文字幕久久| 成人免费午夜无码视频| 免费观看91视频| 羞羞漫画小舞被黄漫免费| 看成年女人免费午夜视频| 在线播放国产不卡免费视频| 老司机精品免费视频| 久久国产乱子精品免费女| 无码人妻AV免费一区二区三区|