备份一个有意思的小东西:动态柱状图,采用ajax + vml。
vml是微软在IE5中就支持的矢量图技术。采用xml的格式来生成矢量图,这为我们在页面上生成高质量的图像提供了
很好的支持。另:虽然SVG很好,但IE不支持(不安装插件的话)。
程序很简单:
一个servlet:采集数据(仅仅随机产生一个数组)。
一个html页面:采用ajax从servlet得到数据,然后用vml生成图表。由于采用了ajax,页面是不刷新的实时得到数据。
1: servlet:PingServlet.java
packageco.vml.servlet;
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
/***//**
*@version1.0
*@author
*/
publicclassPingServletextendsHttpServlet
...{

/***//**HandlestheHTTP<code>GET</code>method.
*@paramrequestservletrequest
*@paramresponseservletresponse
*/
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException...{
Stringtask=request.getParameter("task");
StringBufferresBuf=newStringBuffer();

if(task.equals("poll"))...{
for(inti=0;i<6;i++)
...{
longcounter=Math.round(Math.random()*10)+1;
System.out.println(i+"--"+counter);
resBuf.append("<percent>"+counter+"</percent>");
}
}
PrintWriterout=response.getWriter();
response.setContentType("text/xml");
response.setHeader("Cache-Control","no-cache");
out.println("<response>");
out.println(resBuf.toString());
out.println("</response>");
out.close();
}

/***//**HandlestheHTTP<code>POST</code>method.
*@paramrequestservletrequest
*@paramresponseservletresponse
*/
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException...{
doGet(request,response);
}

/***//**Returnsashortdescriptionoftheservlet.
*/
publicStringgetServletInfo()...{
return"Shortdescription";
}
}
2: html页面(ajax + vml)
<HTMLxmlns:v>
<HEAD>
<METAhttp-equiv="Content-Type"content="text/html;Charset=gb2312">


<STYLE>...
td{...}{
font-size:12px
}

body{...}{
font-size:12px
}

v:*{...}{
behavior:url(#default#VML);
}
</STYLE>
</HEAD>

<script>...
varxmlHttp;
functioncreateXMLHttpRequest()
...{
if(window.ActiveXObject)
...{
xmlHttp=newActiveXObject("Microsoft.XMLHTTP");
}
elseif(window.XMLHttpRequest)
...{
xmlHttp=newXMLHttpRequest();
}
}
functiongo()
...{
setTimeout("pollServer()",2000);
}

functionpollServer()
...{
createXMLHttpRequest();
varurl="../PingServlet?task=poll";
xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange=pollCallback;
xmlHttp.send(null);
}


functionpollCallback()
...{
if(xmlHttp.readyState==4)
...{
if(xmlHttp.status==200)
...{
vararray1=newArray(6);
for(i=0;i<6;i++)
...{
array1[i]=parseInt(xmlHttp.responseXML.getElementsByTagName("percent")[i].firstChild.data);
}
array2=newArray(16,14,10,16,5,8);
draw(array1);
setTimeout("pollServer()",2000);
}
}
}


functiondraw(array1)
...{
allstr=array1[0]+array1[1]+array1[2]+array1[3]+array1[4]+array1[5];
varstr="";
for(i=0;i<=5;i++)
...{
mathstr=Math.round(100/(allstr/array1[i]))
str=str+"<v:rectfillcolor='lime'style='width:20;color:navy;height:"+
5000/(1000/mathstr)+"'><br> %"+
mathstr+"<br>"+
array1[i]+"<v:Extrusionbackdepth='15pt'on='true'/></v:rect>";
}
varmyDraw=document.getElementById("mydiv");
myDraw.innerHTML=str;
}

</script>
<bodybgcolor=eeeeeestyle='border:0solideeeeee'>
<inputid="go"name="run"type="button"value="run"onClick="go();">
<divwidth="900"id="mydiv">
</div>
</BODY>
</HTML>
本文介绍了一种使用AJAX和VML技术实现实时更新动态柱状图的方法。通过一个简单的Servlet获取随机数据,并利用HTML页面上的AJAX请求将这些数据显示为动态更新的柱状图。
6639

被折叠的 条评论
为什么被折叠?



