在试XML-RPC(这回画个图吧)

上次那个“小试”实在太不过瘾,这次我们从服务器上定时取出数据,然后用javascript在浏览器上画个图。teeth_smile.gif
这回我就不具体解释了,就贴一下程序啦!!

先来个图吧:
xml-rpc3.jpg

 用javascript画图,当然不能空手画了,找个库吧。wz_jsgraphics,详细资料看这里(http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm#download)很酷的一个javascript图形库,当然除了画图还有别的,不妨试试(我一年前发现的这东东,现实才第一次用hitwall.gif)用起来跟用c画图差不多。
 首先当然还是建个服务的类:

ExpandedBlockStart.gif ContractedBlock.gif public   class  DataService  dot.gif {
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public double getData()dot.gif{
InBlock.gif        Random r 
= new Random();
InBlock.gif        
return 20+(10*r.nextDouble()-5);
ExpandedSubBlockEnd.gif    }

InBlock.gif    
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public static void main(String[] args)dot.gif{
InBlock.gif        DataService ds 
= new DataService();
ExpandedSubBlockStart.gifContractedSubBlock.gif        
for(int i=0;i<20;i++)dot.gif{
InBlock.gif            System.
out.println(ds.getData());
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

Servlet上篇文章里有,我这里就不写了。
然后是一个html页面。
None.gif < html >
None.gif
< head >
None.gif
< title > XML-RPC </ title >
None.gif
< script  type ="text/javascript"  src ="./js/init.js" ></ script >
None.gif
< script  type ="text/javascript"  src ="./js/lib/urllib.js" ></ script >
None.gif
< script  type ="text/javascript"  src ="./js/lib/xml.js" ></ script >
None.gif
< script  type ="text/javascript"  src ="./js/lib/xmlrpc.js" ></ script >
None.gif
< script  type ="text/javascript"  src ="./js/hello.js" ></ script >
None.gif
< script  type ="text/javascript"  src ="./js/wz_jsgraphics.js" ></ script >
None.gif
</ head >
None.gif
< body  onload ="init()" >
None.gif
< input  type ="button"  id ="do3"  value ="start"  onclick ="startTimer()" />
None.gif
< input  type ="button"  id ="do3"  value ="stop"  onclick ="stopTimer()" />
None.gif
< input  type ="text"  id ="result"   />
None.gif
< div  id ="canvas"  style ="border:1px solid #6666FF; position:relative;height:300px;width:500; background-color:#CCCCCC" ></ div >
None.gif
< textarea  id ="debug"  rows ="10"  name ="S1"  cols ="69" ></ textarea >
None.gif
</ body >
None.gif
</ html >
重点是这个div,我们用wz_jsgraphics画图就是往这上面画,他的作用相当于很多画图系统的canvas.其实主要是提供参考坐标。
然后就是重点了hello.js(懒得该名字了)
None.gif var  timerid;
None.gif
var  dataservice;
None.gif
var  g;
None.gif
var  xPoints  =   new  Array();
None.gif
var  y1Points  =   new  Array();
None.gif
var  y2Points  =   new  Array();
None.gif
var  length = 0 ;
None.gifstartTimer 
=   function (){
None.gif    init();
None.gif    
if (timerid == null ){
None.gif        timerid 
=  window.setInterval( " doTask() " , 800 ); 
None.gif    }
None.gif}
None.gif
None.gifstopTimer 
=   function (){
None.gif    window.clearInterval(timerid);
None.gif    timerid
= null ;
None.gif}
None.gif
None.gif
function  init(){
None.gif    
var  xmlrpc = null ;
None.gif    
try {
None.gif        xmlrpc 
=  importModule( " xmlrpc " );
None.gif    }
catch (e){
None.gif        reportException(e);
None.gif        
throw   " importing of xmlrpc module failed. " ;
None.gif    }
None.gif    
None.gif    
var  addr  =   " http://localhost:8080/Rpc/RpcServer " ;
None.gif    
var  methods  =  [ " DataService.getData " ];
None.gif    
None.gif    
try {
None.gif        dataservice 
=   new  xmlrpc.ServiceProxy(addr, methods);
None.gif    }
catch (e){
None.gif        
var  em;
None.gif        
if (e.toTraceString){
None.gif            em 
=  e.toTraceString();
None.gif        }
else {
None.gif            em 
=  e.message;
None.gif        }
None.gif        alert(
" Error trace: \n\n "   +  em);
None.gif    }
None.gif    g 
=   new  jsGraphics( " canvas " );
None.gif            
None.gif}
None.gif
None.gif
None.gif
function  doTask(){
None.gif    
var  rslt  =  dataservice.DataService.getData();
None.gif    document.getElementById(
" result " ).value = rslt;
None.gif    
var  y1  =   145 * rslt / 20 ;
None.gif    
var  rslt  =  dataservice.DataService.getData();
None.gif    
var  y2  =   145 * rslt / 20 ;
None.gif    
if (length < 44 ){
None.gif        y1Points[length]
= y1;
None.gif        y2Points[length]
= y2;
None.gif        
for ( var  i = 0 ;i < y1Points.length;i ++ ){
None.gif            xPoints[i] 
=   30 + 10 * i;
None.gif        }
None.gif        length
++ ;
None.gif    } 
else  {
None.gif        
for ( var  i = 0 ;i < y1Points.length - 1 ;i ++ ){
None.gif            y1Points[i] 
=  y1Points[i + 1 ];
None.gif            y2Points[i] 
=  y2Points[i + 1 ];
None.gif        }
None.gif        y1Points[length]
= y1;
None.gif        y2Points[length]
= y2;
None.gif    }
None.gif    g.clear();
None.gif    drawbg();
None.gif    drawline();
None.gif    debug();
None.gif}
None.gif
None.gif
function  drawline(){
None.gif    g.setStroke(
2 );
None.gif    
for ( var  i = 1 ;i <= y1Points.length;i ++ ){
None.gif        g.setColor(
" yellow " );
None.gif        g.drawLine(xPoints[i
- 1 ],y1Points[i - 1 ],xPoints[i],y1Points[i])
None.gif        g.setColor(
" red " );
None.gif        g.drawLine(xPoints[i
- 1 ],y2Points[i - 1 ],xPoints[i],y2Points[i])
None.gif    }
None.gif    
// g.drawPolyline(xPoints,yPoints);
None.gif
    g.paint();
None.gif}
None.gif
None.gif
function  drawbg(){
None.gif    g.setStroke(
2 );
None.gif    g.setColor(
" maroon " );
None.gif    g.drawLine(
30 , 270 , 470 , 270 ); // x轴
None.gif
    g.drawLine( 30 , 270 , 30 , 10 ); // y轴
None.gif
    g.drawLine( 30 , 10 , 26 , 14 ); // x轴箭头
None.gif
    g.drawLine( 30 , 10 , 34 , 14 );
None.gif    g.drawLine(
470 , 270 , 466 , 266 ); // y轴箭头
None.gif
    g.drawLine( 470 , 270 , 466 , 274 );
None.gif    
None.gif    g.setColor(
" #000000 " ); // 画刻度
None.gif
     var  x  =   30 ;
None.gif    
for ( var  y  =   270 ;y  >=   20 ;y  =  y  -   50  ){
None.gif        g.drawLine(x
- 1 ,y,x + 1 ,y);
None.gif    }
None.gif    g.setStroke(
1 );
None.gif    g.drawLine(
30 , 145 , 470 , 145 ); // 中心线
None.gif
    
None.gif    g.drawString(
" 0 " , 23 , 271 );
None.gif    g.drawString(
" Time " , 430 , 271 );
None.gif    g.paint();
None.gif}
None.gif
None.gif
function  debug(){
None.gif    
var  debug  =   "" ;
None.gif    
for ( var  i = 0 ;i < xPoints.length;i ++ ){
None.gif        debug 
+=   " x: " + i + "   " + xPoints[i] + "  y1: " + i + "   " + y1Points[i] + "  y2: " + i + "   " + y2Points[i] + " \n " ;
None.gif    }
None.gif    document.getElementById(
" debug " ).value = debug;
None.gif
None.gif}
None.gif
其实没什么复杂的,不过就是javascript调试起来太费事了。错又不知道错在哪里。还是喜欢java,调试起来容易多了!
其中一些算法我做的也不太好,有很多需要改进的地方。主要就是如何把从其服务器得到的元数据转换成画图用的数据(两个数组,存放二维坐标集)。
我画了两条线,一条线太单薄了,呵呵。两条线用的x轴坐标相同(其实是时间),所以就用一个数组了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值