国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
AJAX SVG 實現(xiàn)實時監(jiān)控圖表
userphoto

2007.08.30

關注
AJAX + SVG 實現(xiàn)實時監(jiān)控圖表
 Written by 皮振華   
2006-Jun-28

來源:IBM網(wǎng)站 (IBM.COM)

AJAX 已經(jīng)有很多文章介紹它的原理及其應用了。但是遺憾的是現(xiàn)在并沒有很多結(jié)合實際項目應用。本文結(jié)合實際項目中的應用來講述利用 AJAX 和SVG 技術如何創(chuàng)建各種激動人心的功能,并附帶可以運行的例子和源代碼。

  • 前言

 

  AJAX 已經(jīng)有很多文章介紹它的原理及其應用了。但是遺憾的是現(xiàn)在并沒有很多結(jié)合實際項目應用。本文結(jié)合實際項目中的應用來講述利用 AJAX 和SVG 技術如何創(chuàng)建各種激動人心的功能,并附帶可以運行的例子和源代碼。
  本文需要一定的 AJAX,SVG 知識和應用經(jīng)驗。當然它們都可以在 ibm.com/developerworks/cn 上找到。
  個人對于 AJAX 應用的建議是如果傳統(tǒng)的 MVC 能夠滿足的應用,沒有必要使用AJAX來代替,因為這里 AJAX 唯一能帶來的好處只是無刷新。AJAX 是用來幫助我們實現(xiàn)以往使用傳統(tǒng) web 技術難以實現(xiàn)的功能的。

 

  • 技術名詞

 

  1. AJAX ,AJAX(Asynchronous JavaScript and XML)是多種技術的綜合,它使用 XHTML和 CSS 標準化呈現(xiàn),使用 DOM 實現(xiàn)動態(tài)顯示和交互,使用 XML 和 XSTL 進行數(shù)據(jù)交換與處理,使用 XMLHttpRequest 對象進行異步數(shù)據(jù)讀取,使用 Javascript 綁定和處理所有數(shù)據(jù)。更重要的是它打破了使用頁面重載的慣例技術組合,可以說 AJAX 已成為 Web 開發(fā)的重要武器
  2. SVG(Scalable Vector Graphic) 是一個標準開放的矢量圖像格式。它使你設計的網(wǎng)頁可以更加精彩,更加細致。使用簡單的文本命令,SVG 甚至可以做出諸如色彩線性變化、自定義置入字體、透明、動態(tài)效果、慮鏡效果等各式常見的圖像效果。SVG 圖像是基于 XML(可擴展標識語言--未來的網(wǎng)絡語言)的應用,并由 W3C 組織的 SVG 開發(fā)組負責詳細的研究和開發(fā)。
  3. DWR,DWR是一個開源的類庫,可以幫助開發(fā)人員開發(fā)包含 AJAX 技術的網(wǎng)站。它可以允許在瀏覽器里的代碼使用運行在 WEB 服務器上的 JAVA 函數(shù),就像它就在瀏覽器里一樣。

  閱讀本文最好具有下列知識:
  1. AJAX 開發(fā)應用
  2.SVG 相關知識,特別是與JavaScript交互。(developerworks 上有非常詳盡 SVG 的技術文章)
  3. DWR基礎。 (developerWworks 上有非常詳盡的DWR框架的技術文章和例子,本文不詳細結(jié)束DWR基礎知識。)例如: http://www.ibm.com/developerworks/cn/java/j-ajax3/

 

  • 實際效果

 

  技術敘述的再好,不如一個實際的例子,我們先看看實際效果。讀者可以先下載本文附帶的例子,發(fā)布到任何一個支持JSP1.1的servle服務器上,例如Tomcat4.0或者 webshpere,weblogic上,然后訪問頁面:http://localhost:端口/ajaxSVG/DyMeter.jsp。(以 Tomcat為例,端口就是8080)


  點擊開始按鈕,你會發(fā)現(xiàn)圖表的指針會根據(jù)服務器的數(shù)據(jù)實時擺動。很類似與一個汽車儀器儀表盤,這是以往 cs 軟件或者是 flash 才能實現(xiàn)的效果,現(xiàn)在我們使用純 web 的形式實現(xiàn)了。

  從專業(yè)術語來說,它實際上是一個 Dash Board,其實在各種 BI(商業(yè)智能)應用中都可以看到它,它的靈感來自于汽車的儀表盤,它非常直觀的反映了當前數(shù)據(jù)的狀態(tài),例如處于危險,安全,過低等等。

  當然它并不新鮮,很多軟件都能提供這種圖表,我們今天要使用 AJAX 和 SVG 來突破傳統(tǒng)應用,以往的軟件生成的圖片都是靜態(tài)的,注意我這里的靜態(tài)是指它們生成的圖片上的指針不會像真正的汽車儀表盤一樣隨著汽車的各種數(shù)據(jù)的變化,例如速度、油量的變化而擺動,根據(jù)汽車的實時速度而擺動,而是用戶刷新一次頁面,軟件根據(jù)服務器端的數(shù)據(jù)重新生成圖片再顯示給最終用戶。

  傳統(tǒng)的這種方式對于一般的 BI 應用來說是完全足夠了,但是對于實時性要求比較高的系統(tǒng)來說,利用監(jiān)控系統(tǒng)來說,不可能要求用戶隨時刷新頁面,或者使用 JavaScript 來定時刷新頁面,這樣效果非常差,而且服務器端反復在內(nèi)存,或者硬盤中生成圖片,用戶數(shù)量多之后,系統(tǒng)負擔太重了。

  我們拋開技術想一下,我們實際上只想改變指針的位置就行了,根本沒有必要生成整個圖片或者是傳遞整個圖片的數(shù)據(jù)給客戶端。這種設置非常不合理,但是這在以往的技術上是難以完成的。

  現(xiàn)在如果使用AJAX技術,我們只需要傳輸過來當前的數(shù)據(jù),告訴儀表盤的指針應該指向哪里就行了。無需頁面刷新,無需重新生成圖片,并且網(wǎng)絡端,服務器端,用戶端的開銷都非常少,以往的方案沒有經(jīng)驗的程序員經(jīng)常會導致內(nèi)存溢出,現(xiàn)在采用這種方案這種錯誤的風險就大大減小了。

 

  • 原理


  其實原理并不復雜,我們利用 SVG 來繪制儀表盤,然后利用 AJAX 技術定時向服務器請求更新數(shù)據(jù)(也就是指針所指向的數(shù)據(jù)),如果數(shù)據(jù)更新了,則調(diào)用 JavaScript 腳本讓SVG 的儀表盤重新定位指針,這樣就實現(xiàn)了圖表的實時刷新。下圖描述了各種技術的在本教程中的用途。


 

  • 代碼細節(jié)

 

  這個例子程序由一個 SVG 文件,JSP 文件,和一個 JAVA 類組成:

* MeterRemote.java
* MeterChart.svg
* DyMeter.jsp

  首先看看 MeterRemote.java,它生成了指針所指向的數(shù)據(jù),作為例子我只是生成一個隨機數(shù)據(jù),在實際項目中它就應該是返回實際的數(shù)據(jù),例如,汽車儀表盤就是當前汽車的時速。它們在實際項目中可以來自在實際項目中數(shù)據(jù)可以是來自數(shù)據(jù)庫,JMS,Web 服務,EJB 等。

import java.util.Random;
public class MeterRemote {

private double curr_value,full_value=200;

public double getDegree(){
Random r=new Random();
curr_value=r.nextInt(200);

return curr_value/full_value*270;
}

}

  接著我們利用 DWR 引擎把該 Java 類發(fā)布,讓遠程 AJAX 應用能夠調(diào)用該 Java 類的方法 getDegree()。

  打開 dwr.xml 文件,在本文提供的例子從您可以看到它,添加如下代碼:

<allow>
<create creator="new" javascript="MeterRemote">
<param name="class" value="com.nbw.svg.DyChart.ajax.MeterRemote"/>
</create>
</allow>

  這樣 DWR 就把一個 Java 類發(fā)布出來了,可以在頁面通過 js 就可以直接調(diào)用它了,非常的簡單。它和大多數(shù)框架一樣使用了一個 xml 文件來完成自己的配置,使用 creat 標簽可以發(fā)布一個 java 類,creator=new 表明創(chuàng)建方式是通過new來創(chuàng)建實例,java 類這里的配置都是一樣的,因為它支持spring和struts才會有不同的creator。Javascript="MeterRemote"說明了它在頁面中使用MeterRemote對象(js對象)來調(diào)用。Param標簽就定義了具體的類的名稱。使用DWR還可以指定調(diào)用的權限和指定具體的 java類的方法,而不是把所有的對象的方法都發(fā)布出來。跟多的配置信息請查閱ibm上其它文章。

  重新啟動服務器,使用瀏覽器打開如下地址:
http://localhost:8080/ajaxSVG/dwr

  如下圖所示:


  會看到MeterRemote鏈接,說明發(fā)表成功了,單擊該鏈接 http://localhost:8080/ajaxSVG/dwr/test/MeterRemote 會看到測試頁面,它上面包含了如何使用,和可以調(diào)用的方法。

  如下圖所示:


  你可以點擊 Excute 來測試一下效果,這樣網(wǎng)頁就能夠直接調(diào)用 java 端的程序了。接著我們看看 JSP 文件。

  首先導入 js,這樣才能:

1.<script type='text/javascript' src='/ ajaxSVG
/dwr/engine.js'></script>
2.<script type='text/javascript' src='/ ajaxSVG
/dwr/util.js'></script>
3.<script type='text/javascript'src='/ ajaxSVG
/dwr/interface/MeterRemote.js'></script>

  1,2行是DWR引擎所需要的兩個js文件。第3行是導入DWR引擎調(diào)用POJO java所需要的js文件。

function getValue()
{
MeterRemote.getDegree(loadinfo);

}

  上面的方法從服務器端取得儀表盤的指針的數(shù)據(jù)。

  重點是以下代碼:

function loadinfo(data)
{
DWRUtil.setValue("reply1", data);
curr_degree=data;
var svgDocument = window.sample.getSVGDocument();
chart=svgDocument.getElementById("line2");
chart.setAttribute( "from", last_degree+",250,250");
chart.setAttribute( "to", curr_degree+",250,250");
chart.beginElement();
last_degree=curr_degree;
}

  上面的代碼根據(jù)遠程調(diào)用得到的儀表盤的指針數(shù)據(jù)來動態(tài)的改變SVG圖中指針的位置。

  其中:

var svgDocument = window.sample.getSVGDocument();

  得到SVG對象。

chart=svgDocument.getElementById("line2");

  得到指針對象。

chart.setAttribute( "from", last_degree+",250,250");
chart.setAttribute( "to", curr_degree+",250,250");
chart.beginElement();

  遠程調(diào)用得到的儀表盤的指針數(shù)據(jù)來動態(tài)的改變SVG圖中指針的位置。

  最后我們看看SVG文件,下面是值得關注的代碼部分

<circle cx="250" cy="250" r="150.0" fill="#ffffff"/>
<path d="M143.93398282201787 356.0660171779821 A150.0 150.0 , 0, 0,
1,101.84674891072936 226.53483024396536 L250 250, Z" class="fill1"/>
<path d="M101.84674891072936 226.53483024396536 A150.0 150.0 , 0, 0,
1,181.90142503906804 116.34902137174478 L250 250, Z" class="fill2"/>
<path d="M181.90142503906804 116.34902137174478 A150.0 150.0 , 0, 0,
1,318.098574960932 116.34902137174484 L250 250, Z" class="fill3"/>
<path d="M318.098574960932 116.34902137174484 A150.0 150.0 , 0, 0,
1,398.1532510892706 226.53483024396536 L250 250, Z" class="fill4"/>
<path d="M398.1532510892706 226.53483024396536 A150.0 150.0 , 0, 0,
1,356.06601717798213 356.06601717798213 L250 250, Z" class="fill5"/>
<circle cx="250" cy="250" r="3" style="fill: #00C"/>
<line x1="129.7918471982869" y1="370.208152801713" x2="250" y2="250"
style="stroke: #F00;stroke-width: 2px" id="finger">
<animateTransform attributeName="transform" attributeType="XML"
type="rotate" from="0,250,250" begin="run()" to="20,250,250" dur="2"
fill="freeze" style="stroke: #F00;stroke-width: 2px" id="line2"/>
</line>

  實際上上面的 SVG 代碼定義了一個靜態(tài)的指針指向 0 度的儀表盤。它由 <path> 標簽定義的。它往往是通過軟件來生產(chǎn)的,因為能生成 SVG 圖表的軟件非常多,例如 jfreechart 等,和文章篇幅限制就不詳細結(jié)束 SVG 圖表了。

  • 結(jié)束語


  使用本例子的原理我們已經(jīng)在數(shù)個實際項目中應用了,從用戶使用的實際效果來說,性能和效果都非常滿意。替代了以往用戶使用 CS 軟件才能實現(xiàn)的實時監(jiān)控圖表的功能,現(xiàn)在 AJAX 替代傳統(tǒng)的各種 MVC(例如Struts,JSF)框架并不能顯示出它的威力,特別是在開發(fā) AJAX 工具奇缺,開發(fā)測試效率低下。但是它與其他技術的融合例如 SVG,往往能發(fā)揮意想不到的效果。AJAX 和各種新興的 Web 2.0 技術的出現(xiàn)大大的豐富了 Web 程序員的技術力量,把以往只有 CS 軟件才能實現(xiàn)的功能,不僅實現(xiàn)了,而且更加完美和高效。

  擁抱 AJAX 擁抱 Web 2.0 你能做得更好!


本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
服務器推送技術 - ServerPush
Ajax 框架
buffalo & dwr 比較
DWR實戰(zhàn)
1-儀表盤.xlsx
15.1 什么是Ajax - 《SVG開發(fā)實踐》 - 免費試讀 - book.csdn.net
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服