日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

DWR推送技术

發布時間:2023/12/4 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 DWR推送技术 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

“服務器推送技術”(ServerPushing)是最近Web技術中最熱門的一個流行術語。它是繼“Ajax”之后又一個倍受追捧的Web技術。“服務器推送技術”最近的流行跟“Ajax”有著密切的關系。

隨著Ajax技術的興起,讓廣大開發人員又一次看到了使用瀏覽器來替代桌面應用的機會,并且這次機會非常大。Ajax將整個頁面的刷新變成頁面局部的刷新,并且數據的傳送是以異步方式進行,這使得網絡延遲帶來的視覺差異將會消失。

但是,在瀏覽器中的Ajax應用中存在一個致命的缺陷無法滿足傳統桌面系統的需求。那就是“服務器發起的消息傳遞”(Server-Initiated Message Delivery)。在很多的應用當中,服務器軟件需要向客戶端主動發送消息或信息。因為服務器掌握著系統的主要資源,能夠最先獲得系統的狀態變化和事件的發生。當這些變化發生的時候,服務器需要主動的向客戶端實時的發送消息。例如股票的變化。在傳統的桌面系統這種需求沒有任何問題,因為客戶端和服務器之間通常存在著持久的連接,這個連接可以雙向傳遞各種數據。而基于HTTP協議的Web應用卻不行。

開始就簡單介紹DWR技術的背景,下面來看下一個簡單的Demo

附上簡單的目錄結構以及幾個重要的代碼:

MessagePush.java

package com.visec;
import java.util.Collection;
import java.util.Date;
import java.util.concurrent.locks.ReentrantLock;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.proxy.dwr.Util;
import com.sun.org.apache.bcel.internal.generic.DADD;
import uk.ltd.getahead.dwr.WebContext;
import uk.ltd.getahead.dwr.WebContextFactory;
/**
 * MessagePush
 * @author Dana·Li
 */
@SuppressWarnings({ "unused", "deprecation" })
public class MessagePush{
    @SuppressWarnings("unchecked")
    public void send(String msg){   
    WebContext webContext = WebContextFactory.get();
    String ip = webContext.getHttpServletRequest().getRemoteAddr().toString();//獲取客戶端IP
    String page = "/DwrInvoker/index.jsp";               //DWR為項目名稱,頁面為index.html
    Collection<ScriptSession> sessions = webContext.getScriptSessionsByPage(page);        
    Util util = new Util(sessions);
    util.addFunctionCall("dwrtest", ip + ": " + msg);             //dwrtest為javascript函數     
    } 
}

當然這里有些會不理解,dwrtst的作用是干嘛的,dwrtest為Javascript函數,后面的Index.jsp中會提到

dwr.xml

<?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="MessagePush">
        <param name="class" value="com.visec.MessagePush"></param>
    </create>
  </allow>
</dwr>
MessagePush的作用是映射生成javascrpt的腳本,即后續的index.jsp中調用的!

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <display-name></display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>dwr-invoker</servlet-name>
        <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>activeReverseAjaxEnabled</param-name>
            <param-value>TRUE</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>dwr-invoker</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>
</web-app>

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>DwrInvoker</title>
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/interface/MessagePush.js"></script>
<script type="text/javascript">
    function dwrtest(data) {
        document.getElementById("area").innerHTML = document.getElementById("area").innerHTML+ "
" + data;
    }
    function send(msg) {
        if (event.keyCode == 13) {
            MessagePush.send(msg);
        }
    }
</script>
</head>
<body onload="dwr.engine.setActiveReverseAjax(true);">
    <textarea id="area">
</textarea>
    <br />
    <input type="text" id="in"
        onkeyup="send(this.value)" />
</body>
</html>

代碼看到這里就可以上先是效果圖了!這個圖是簡單的jpg圖

本案例測試成功后用及時用到項目中:[可能是電腦原因GIF圖制作的不怎么清晰,見諒....:)]

ping設備IP查看設備狀態,看是否在線...DWR利用很廣泛

DOS命令下 ping 192.168.4.10

然后轉到項目中查看是否一致!

DWR的應用很廣泛...類似的,我們抓取后臺數據實現實時推送!

當然看到這里,很多IT同胞就會提出Ajax也可以實現,但是相對比較Ajax呢...

Ajax輪詢

Ajax隔一段時間(通常使用JavaScript的setTimeout函數)就去服務器查詢是否有改變,從而進行增量式的更新。但是間隔多長時間去查詢成了問題,因為性能和即時性造成了嚴重的反比關系。間隔太短,連續不斷的請求會沖垮服務器,間隔太長,務器上的新數據就需要越多的時間才能到達客戶機。

優點:

a)不需要太多服務器端的配置。

b)降低帶寬的負荷(因為服務器返回的不是完整頁面)。

本文基于署名 2.5 中國大陸許可協議發布,歡迎轉載,演繹或用于商業目的,但是必須且在文章頁面明顯位置給出原文鏈接Dana、Li(包含鏈接),具體操作方式可參考此處。如您有任何疑問或者授權方面的協商,請留言或加Q群!

總結

以上是生活随笔為你收集整理的DWR推送技术的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。