﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-网络中漫步-文章分类-java</title><link>http://www.blogjava.net/Yadira/category/44416.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 07 Jun 2010 21:44:48 GMT</lastBuildDate><pubDate>Mon, 07 Jun 2010 21:44:48 GMT</pubDate><ttl>60</ttl><item><title>让ajax更加友好，实时显示后台处理进度。</title><link>http://www.blogjava.net/Yadira/articles/322986.html</link><dc:creator>网络中漫步</dc:creator><author>网络中漫步</author><pubDate>Mon, 07 Jun 2010 09:51:00 GMT</pubDate><guid>http://www.blogjava.net/Yadira/articles/322986.html</guid><wfw:comment>http://www.blogjava.net/Yadira/comments/322986.html</wfw:comment><comments>http://www.blogjava.net/Yadira/articles/322986.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yadira/comments/commentRss/322986.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yadira/services/trackbacks/322986.html</trackback:ping><description><![CDATA[ajax应用越来越多，大部分ajax处理都是在前台显示1个"loading...",然后把数据提交给服务器进行处理，处理完毕后显示"处理完毕"。我们能否让ajax更加友好点，实时显示服务器处理的进度了？这在一些长时间的请求中尤其重要，比如上传文件、发送邮件、批量处理数据。答案当然是可以的，不然就不会写这个了，对吧，^_^。
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>存在的问题：</strong> &nbsp; &nbsp;</p>
<p>&nbsp;&nbsp; 要解决实现上面的功能，需要解决下面几个问题：</p>
<p>&nbsp;&nbsp; 1. 服务器如何在处理一部分数据后传递部分response到浏览器。</p>
<p>&nbsp;&nbsp; 2、浏览器如何能处理服务器传递过来部分数据，并保持http连接直到处理完全完毕。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp; 要解决第1个问题，使用flush让response分块进行呈现就可以了，具体请参考我另一遍随笔"<a href="http://www.blogjava.net/BearRui/archive/2010/05/19/flush_chunk_encoding.html" target="_blank">flush让页面分块,逐步呈现</a>";</p>
<p>&nbsp;&nbsp; 第2个问题，则需要用到XMLHttpRequest的readyState状态，w3c对&nbsp;<a href="http://www.w3.org/TR/XMLHttpRequest/" target="_blank">readyState</a>&nbsp;定义如下几个值：</p>
<div style="background-color: #ccc">
<p>&nbsp; UNSENT = 0;<span style="white-space: pre"> </span>// 没有发送请求</p>
<p>&nbsp; OPENED = 1; &nbsp; &nbsp;// 已经打开http连接</p>
<p>&nbsp; HEADERS_RECEIVED = 2; // 接收到response header</p>
<p>&nbsp; LOADING = 3; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 真正接收response body &nbsp;&nbsp;</p>
<p>&nbsp; DONE = 4; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 请求接收完毕</p>
</div>
<p>&nbsp;&nbsp; 相信状态4大家是天天在用，而我们这里需要用到就是状态3。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>实例：</strong>&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp; &nbsp; 废话少说，代码实例比什么文字解释都管用。我们这里假设服务器的1个处理需要6秒种，每秒种处理1条记录，总共处理6条记录，我们需要服务器每处理完1条数据，客户端则显示处理进度(包括文字和进度条)。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp; 服务器端代码(下面JSP代码)：</p>
<pre class="brush:java">    <span style="font-size: 13px; font-family: Consolas; white-space: normal">&lt;%</span></pre>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; border-left-color: #cccccc; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;下面设置Content-Type:application/x-javascript&nbsp;是为了适应Webkit的浏览器(chrome,safari)</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setHeader(</span><span style="color: #000000">"</span><span style="color: #000000">Content-Type</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">application/x-javascript</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;count&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">6</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;处理6条数据</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">count;i</span><span style="color: #000000">++</span><span style="color: #000000">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;处理完毕一条，输出结果到客户端</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(i</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.flush();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;这里假设每条数据处理时间为1秒</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.currentThread().sleep(</span><span style="color: #000000">1000</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">%&gt;</span></div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp; &nbsp;html代码:</p>
<p>&nbsp;</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; border-left-color: #cccccc; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.w3.org/1999/xhtml"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">style</span><span style="color: #0000ff">&gt;</span><span style="color: #800000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#divProgress</span><span style="color: #000000; background-color: #f5f5f5">{</span><span style="color: #ff0000; background-color: #f5f5f5">width</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #0000ff; background-color: #f5f5f5">300px</span><span style="color: #000000; background-color: #f5f5f5">;</span><span style="color: #ff0000; background-color: #f5f5f5">height</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #0000ff; background-color: #f5f5f5">24px</span><span style="color: #000000; background-color: #f5f5f5">;</span><span style="color: #ff0000; background-color: #f5f5f5">position</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #0000ff; background-color: #f5f5f5">relative</span><span style="color: #000000; background-color: #f5f5f5">;</span><span style="color: #000000; background-color: #f5f5f5">}</span><span style="color: #800000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#divProgress&nbsp;div</span><span style="color: #000000; background-color: #f5f5f5">{</span><span style="color: #ff0000; background-color: #f5f5f5">position</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #0000ff; background-color: #f5f5f5">absolute</span><span style="color: #000000; background-color: #f5f5f5">;</span><span style="color: #ff0000; background-color: #f5f5f5">left</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #0000ff; background-color: #f5f5f5">0</span><span style="color: #000000; background-color: #f5f5f5">;</span><span style="color: #ff0000; background-color: #f5f5f5">top</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #0000ff; background-color: #f5f5f5">0</span><span style="color: #000000; background-color: #f5f5f5">;</span><span style="color: #ff0000; background-color: #f5f5f5">height</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #0000ff; background-color: #f5f5f5">24px</span><span style="color: #000000; background-color: #f5f5f5">;</span><span style="color: #000000; background-color: #f5f5f5">}</span><span style="color: #800000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#progressBg</span><span style="color: #000000; background-color: #f5f5f5">{</span><span style="color: #ff0000; background-color: #f5f5f5">background-color</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #0000ff; background-color: #f5f5f5">#B9F8F9</span><span style="color: #000000; background-color: #f5f5f5">;</span><span style="color: #ff0000; background-color: #f5f5f5">z-index</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #0000ff; background-color: #f5f5f5">10</span><span style="color: #000000; background-color: #f5f5f5">;</span><span style="color: #000000; background-color: #f5f5f5">}</span><span style="color: #800000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#progressText</span><span style="color: #000000; background-color: #f5f5f5">{</span><span style="color: #ff0000; background-color: #f5f5f5">z-index</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #0000ff; background-color: #f5f5f5">15</span><span style="color: #000000; background-color: #f5f5f5">;</span><span style="color: #ff0000; background-color: #f5f5f5">text-align</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #0000ff; background-color: #f5f5f5">center</span><span style="color: #000000; background-color: #f5f5f5">;</span><span style="color: #ff0000; background-color: #f5f5f5">width</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #0000ff; background-color: #f5f5f5">100%</span><span style="color: #000000; background-color: #f5f5f5">;</span><span style="color: #000000; background-color: #f5f5f5">}</span><span style="color: #800000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">style</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">div&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="divProgress"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">div&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="progressBg"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">div&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="progressText"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">br&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">button&nbsp;</span><span style="color: #ff0000">onclick</span><span style="color: #0000ff">="send()"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">提交数据</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">button</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;t&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;document.getElementById(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">progressText</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;bg&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;document.getElementById(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">progressBg</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">function</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;send(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.innerHTML&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">loading<img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bg.style.width&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">0px</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;xhr&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">new</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;window.XMLHttpRequest();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">if</span><span style="color: #000000; background-color: #f5f5f5">(</span><span style="color: #000000; background-color: #f5f5f5">!</span><span style="color: #000000; background-color: #f5f5f5">window.XMLHttpRequest){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">try</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xhr&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">new</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;window.ActiveXObject(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">Microsoft.XMLHTTP</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">catch</span><span style="color: #000000; background-color: #f5f5f5">(e)&nbsp;{}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xhr.open(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">post</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">,</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">http://localhost:801/ChunkTest/chunk.jsp?count=6</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;oldSize</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">0</span><span style="color: #000000; background-color: #f5f5f5">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xhr.onreadystatechange&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">function</span><span style="color: #000000; background-color: #f5f5f5">(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">if</span><span style="color: #000000; background-color: #f5f5f5">(xhr.readyState&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">2</span><span style="color: #000000; background-color: #f5f5f5">){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;tmpText&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;xhr.responseText.substring(oldSize);&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oldSize&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;xhr.responseText.length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">if</span><span style="color: #000000; background-color: #f5f5f5">(tmpText.length&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">0</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; background-color: #f5f5f5">//</span><span style="color: #008000; background-color: #f5f5f5">&nbsp;设置文本</span><span style="color: #008000; background-color: #f5f5f5"><br />
</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.innerHTML&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;tmpText&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">/6</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; background-color: #f5f5f5">//</span><span style="color: #008000; background-color: #f5f5f5">&nbsp;设置进度条</span><span style="color: #008000; background-color: #f5f5f5"><br />
</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;width&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;parseInt(tmpText)</span><span style="color: #000000; background-color: #f5f5f5">/</span><span style="color: #000000; background-color: #f5f5f5">6</span><span style="color: #000000; background-color: #f5f5f5">*</span><span style="color: #000000; background-color: #f5f5f5">300</span><span style="color: #000000; background-color: #f5f5f5">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bg.style.width&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;width</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">px</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">if</span><span style="color: #000000; background-color: #f5f5f5">(xhr.readyState&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">==</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">4</span><span style="color: #000000; background-color: #f5f5f5">){&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; background-color: #f5f5f5">//</span><span style="color: #008000; background-color: #f5f5f5">&nbsp;请求执行完毕</span><span style="color: #008000; background-color: #f5f5f5"><br />
</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.innerHTML&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">执行完毕</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bg.style.width&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">300px</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xhr.send(</span><span style="color: #0000ff; background-color: #f5f5f5">null</span><span style="color: #000000; background-color: #f5f5f5">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp; &nbsp;运行效果图:&nbsp;</p>
<p>&nbsp;&nbsp; &nbsp;<img alt="" src="http://pic002.cnblogs.com/img/bearstar/201006/2010060117302946.jpg" /> <img alt="" src="http://pic002.cnblogs.com/img/bearstar/201006/2010060117280795.jpg" /></p>
<p>&nbsp;</p>
<p><strong>缺点：</strong></p>
<p>&nbsp;&nbsp; &nbsp; 看到这里或许你已经蠢蠢欲动，想自己动手试试了。但是注意上面的方法虽好，但也有个缺点，就是浏览器的支持问题。目前IE所有版本的浏览器都不支持 xhr.readyState == 3状态，IE浏览器不支持在response响应完毕前读取responseText属性。 &nbsp;具体可查看MSDN : &nbsp;<a href="http://msdn.microsoft.com/en-us/library/ms535874%28VS.85%29.aspx" target="_blank">XMLHttpRequest Object</a>&nbsp;</p>
<p>&nbsp;&nbsp; &nbsp; 基于Webkit的浏览器支持的不是很好，需要设置Content-Type：application/x-javascript才行(经测试发现Content-Type:text/html在有些情况下正常，有些情况下又不正常，而用application/x-javascript都正常)。</p>
<p>&nbsp;&nbsp; &nbsp; 看到了缺点后是否又打击了你的积极性了，其实针对IE，我们不需要做太多处理，IE不支持，就不会显示进度，就变成跟传统的ajax请求一样，一直显示1个loading直到请求完毕。我们只需要加1个简单的判断，判断如果是ie则不执行xhr.readyState &gt; 2中的代码，如果不加判断，IE下会报JS错误.</p>
<p>&nbsp;</p>
<p><strong>DEMO:</strong></p>
<p>&nbsp;&nbsp; demo服务器不太好，而且在国外，随时可能会点击不了,而且有时候运行效果不是很好，大家知晓下，最好是把代码copy到本地进行测试。</p>
<p>&nbsp;&nbsp; 请使用firefox或chrome查看demo,ie查看的效果跟一般的ajax没什么不一样。</p>
<p>&nbsp;&nbsp; <a href="http://213.186.44.204:8080/ChunkTest/index.html" target="_blank">http://213.186.44.204:8080/ChunkTest/index.html</a>&nbsp;</p>
<img src ="http://www.blogjava.net/Yadira/aggbug/322986.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yadira/" target="_blank">网络中漫步</a> 2010-06-07 17:51 <a href="http://www.blogjava.net/Yadira/articles/322986.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Java】Ant</title><link>http://www.blogjava.net/Yadira/articles/319102.html</link><dc:creator>网络中漫步</dc:creator><author>网络中漫步</author><pubDate>Thu, 22 Apr 2010 06:18:00 GMT</pubDate><guid>http://www.blogjava.net/Yadira/articles/319102.html</guid><wfw:comment>http://www.blogjava.net/Yadira/comments/319102.html</wfw:comment><comments>http://www.blogjava.net/Yadira/articles/319102.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yadira/comments/commentRss/319102.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yadira/services/trackbacks/319102.html</trackback:ping><description><![CDATA[关于ant的配置环境变量是首先必须的 <br />
首先到 http://ant.apache.org/bindownload.cgi这里去下载ant的压缩包,上面有linux和windows专用的,我这里下的是windows系统下用的.把下在的压缩包解压放在任意目录下然后配置环境变量:1.配置ANT_HOME: (D:\apache-ant-1.7.1)这是我的目录 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.pathD:\apache-ant-1.7.1\bin) <br />
然后进入dos界面输入ant命令显示如下信息 则证明安装成功 <br />
Buildfile: build.xml does not exist! <br />
Build failed <br />
我们用ant脚本语言把一个项目整合或移动到某个目录下.而这些命令都下在一个build.xml的文件中,一般把这个build.xml文件放在项目的src目录下(项目不是太大),或者某个模块的src目录下(项目由多个模块构成,比较大)我在这里只是做了个小小的例子所以把 build.xml放在项目的src目录下.使用eclipse+myeclipse 新建一个web项目就不说了,接着在src目录下建一个build.xml文件,内容如下 <br />
Java代码 <br />
<br />
&nbsp;&nbsp; 1. &lt;?xml version="1.0" encoding="UTF-8"?&gt;&nbsp; <br />
&nbsp;&nbsp; 2. &lt;project name="ant-project" default="run" basedir="../"&gt;&nbsp; <br />
&nbsp;&nbsp; 3.&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 这里的basedir是 工程的目录为根目录&nbsp; <br />
&nbsp;&nbsp; 4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一般basedir="."表示的是build.xml文件所在的相对目录为根目录即src&nbsp;&nbsp; <br />
&nbsp;&nbsp; 5.&nbsp;&nbsp;&nbsp;&nbsp; --&gt;&nbsp; <br />
&nbsp;&nbsp; 6.&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="src" value="src"/&gt;&nbsp; <br />
&nbsp;&nbsp; 7.&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="dest" value="/${basedir}/WebRoot/WEB-INF/classes"/&gt;&nbsp; <br />
&nbsp;&nbsp; 8.&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 定义发布目录 把工程copy到tomcat的工作目录下--&gt;&nbsp; <br />
&nbsp;&nbsp; 9.&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="webApp" value="E:\apache-tomcat-5.5.26\webapps\ant-project"/&gt;&nbsp; <br />
&nbsp; 10.&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message="init ..." /&gt;&nbsp; <br />
&nbsp; 11.&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- =================================&nbsp;&nbsp; <br />
&nbsp; 12.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; target: init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 13.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ================================= --&gt;&nbsp; <br />
&nbsp; 14.&nbsp;&nbsp;&nbsp;&nbsp; &lt;target name="init"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 15.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mkdir dir="${dest}"/&gt;&nbsp;&nbsp; <br />
&nbsp; 16.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;delete dir="${src}/classes"&gt;&lt;/delete&gt;&nbsp; <br />
&nbsp; 17.&nbsp;&nbsp;&nbsp;&nbsp; &lt;/target&gt;&nbsp;&nbsp; <br />
&nbsp; 18.&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- =================================&nbsp;&nbsp; <br />
&nbsp; 19.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; target: run&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 20.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ================================= --&gt;&nbsp; <br />
&nbsp; 21.&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 编译class文件--&gt;&nbsp; <br />
&nbsp; 22.&nbsp;&nbsp;&nbsp;&nbsp; &lt;target name="compile" depends="init"&gt;&nbsp; <br />
&nbsp; 23.&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- &lt;javac srcdir="${src}" destdir="/${basedir}/WebRoot/WEB-INF/classes"&gt;&lt;/javac&gt; --&gt;&nbsp; <br />
&nbsp; 24.&nbsp;&nbsp;&nbsp;&nbsp; &lt;/target&gt;&nbsp;&nbsp; <br />
&nbsp; 25.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 26.&nbsp;&nbsp;&nbsp;&nbsp; &lt;target name="run" depends="compile" description="description"&gt;&nbsp; <br />
&nbsp; 27.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--除了class文件外，其他文件拷贝到tomcat目录下--&gt;&nbsp; <br />
&nbsp; 28.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;copy todir="${webApp}" overwrite="true"&gt;&nbsp; <br />
&nbsp; 29.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${basedir}/WebRoot" excludes="**/*.class"/&gt;&nbsp; <br />
&nbsp; 30.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/copy&gt;&nbsp; <br />
&nbsp; 31.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--将class文件打包，放到/WEB-INF/lib目录下--&gt;&nbsp; <br />
&nbsp; 32.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;jar destfile="${webApp}/WEB-INF/lib/test.jar"&gt;&nbsp; <br />
&nbsp; 33.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="/${basedir}/WebRoot/WEB-INF/classes"&gt;&nbsp; <br />
&nbsp; 34.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="**/*.class" /&gt;&nbsp; <br />
&nbsp; 35.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;&nbsp; <br />
&nbsp; 36.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/jar&gt;&nbsp; <br />
&nbsp; 37.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; 38.&nbsp;&nbsp;&nbsp;&nbsp; &lt;/target&gt;&nbsp; <br />
&nbsp; 39.&nbsp;&nbsp; <br />
&nbsp; 40.&nbsp;&nbsp; <br />
&nbsp; 41. &lt;/project&gt;&nbsp; <br />
<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt; <br />
&lt;project name="ant-project" default="run" basedir="../"&gt; <br />
&lt;!-- 这里的basedir是 工程的目录为根目录 <br />
一般basedir="."表示的是build.xml文件所在的相对目录为根目录即src <br />
--&gt; <br />
&lt;property name="src" value="src"/&gt; <br />
&lt;property name="dest" value="/${basedir}/WebRoot/WEB-INF/classes"/&gt; <br />
&lt;!-- 定义发布目录 把工程copy到tomcat的工作目录下--&gt; <br />
&lt;property name="webApp" value="E:\apache-tomcat-5.5.26\webapps\ant-project"/&gt; <br />
&lt;echo message="init ..." /&gt; <br />
&lt;!-- ================================= <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; target: init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ================================= --&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;target name="init"&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mkdir dir="${dest}"/&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;delete dir="${src}/classes"&gt;&lt;/delete&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;/target&gt; <br />
&lt;!-- ================================= <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; target: run&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ================================= --&gt; <br />
&lt;!-- 编译class文件--&gt; <br />
&lt;target name="compile" depends="init"&gt; <br />
&lt;!-- &lt;javac srcdir="${src}" destdir="/${basedir}/WebRoot/WEB-INF/classes"&gt;&lt;/javac&gt; --&gt; <br />
&lt;/target&gt; <br />
<br />
&nbsp;&nbsp;&nbsp; &lt;target name="run" depends="compile" description="description"&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;!--除了class文件外，其他文件拷贝到tomcat目录下--&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;copy todir="${webApp}" overwrite="true"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${basedir}/WebRoot" excludes="**/*.class"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/copy&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;!--将class文件打包，放到/WEB-INF/lib目录下--&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;jar destfile="${webApp}/WEB-INF/lib/test.jar"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="/${basedir}/WebRoot/WEB-INF/classes"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="**/*.class" /&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/jar&gt; <br />
<br />
&nbsp;&nbsp;&nbsp; &lt;/target&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;target name="native2ascii" description="native to ascii"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;native2ascii encoding="gbk" dest="${basedir}" src="${basedir}/${build}" includes="*.properties"&nbsp;&nbsp;&nbsp;&nbsp;excludes="date.js"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;copy file="${etc.resources_js}/date.js" tofile="${webroot}/scripts/date.js" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/target&gt;<br />
<br />
&lt;/project&gt; <br />
<br />
下面简单的解释下这个文件 <br />
1.每个build文件都包含一个project标签.name属性指项目的名称,可以随你自己取.default指默认要执行的target.basedir顾名思义是工作的根目录. <br />
2.&lt;property&gt;可以理解为我们写程序时的变量.name是变量的名称 value是变量的值,在下面的脚本要用到这个变量时需要使用${name}方式调用 <br />
3&lt;/target&gt;标签是build.xml文件的核心标签.里面主要是写一些你要做的操作然后依次按照你写好的依赖关系逐步执行target. name属性是target的名称,depends属性是指,当前这个target执行时必须先把depends对应的target执行(如果depends对应的target没有执行)如果depends对应的target已执行了,则直接执行当前的target <br />
4.&lt;javac&gt;就是java中的编译命令.srcdir是指需要编译的java文件的目录.destdir是指编译后的class文件存放的目录 <br />
5&lt;copy&gt;这里的两个属性应该很好理解,todir是copy的目标目录 ,overwrite表示是否覆盖.&lt;fileset&gt;文件集合.dir属性表示被copy的源文件目录.excludes表示除开什么文件类型之外的文件 <br />
6&lt;jar&gt;打成jar包 可以象上面那样写也可以象这样写&lt;jar jarfile="${${webApp}/WEB-INF/lib/test.jar}" basedir="${dest}"/&gt;.jarfile表示生成的jar的文件,basedir表示class文件所在的目录. <br />
7在native2ascii元素中，src和dest这两个属性表示着路径。如果反编译后，src目录下，有多个不同的文件夹，这时使用ant来转换编码，请先想好要对哪些文件进行反编码；如果按上面的写法，将会把src目录下的所有文件夹中的所有文件进行反编码。假设，现在有com和org两个文件夹（其实是两个包），我只需要对com中的文件进行反编码，那么可以这样改写：src="${basedir}/com" dest="${basedir}/${build}/com"<br />
<br />
当然ant脚本并没有这么简单.要写出一个好的ant脚本,部署一个庞大的项目,需要写出复杂的ant脚本,那是需要我们自己去在项目中运用才能有那种能力的 
  <img src ="http://www.blogjava.net/Yadira/aggbug/319102.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yadira/" target="_blank">网络中漫步</a> 2010-04-22 14:18 <a href="http://www.blogjava.net/Yadira/articles/319102.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>serialVersionUID 用来表明类的不同版本间的兼容性</title><link>http://www.blogjava.net/Yadira/articles/316630.html</link><dc:creator>网络中漫步</dc:creator><author>网络中漫步</author><pubDate>Fri, 26 Mar 2010 03:46:00 GMT</pubDate><guid>http://www.blogjava.net/Yadira/articles/316630.html</guid><wfw:comment>http://www.blogjava.net/Yadira/comments/316630.html</wfw:comment><comments>http://www.blogjava.net/Yadira/articles/316630.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yadira/comments/commentRss/316630.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yadira/services/trackbacks/316630.html</trackback:ping><description><![CDATA[serialVersionUID 用来表明类的不同版本间的兼容性<br />
<br />
简单来说，Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时，JVM会把传来的字节流中的serialVersionUID与本地相应实体（类）的serialVersionUID进行比较，如果相同就认为是一致的，可以进行反序列化，否则就会出现序列化版本不一致的异常。<br />
<br />
当实现java.io.Serializable接口的实体（类）没有显式地定义一个名为serialVersionUID，类型为long的变量时，Java序列化机制会根据编译的class自动生成一个serialVersionUID作序列化版本比较用，这种情况下，只有同一次编译生成的class才会生成相同的serialVersionUID 。<br />
<br />
如果我们不希望通过编译来强制划分软件版本，即实现序列化接口的实体能够兼容先前版本，未作更改的类，就需要显式地定义一个名为serialVersionUID，类型为long的变量，不修改这个变量值的序列化实体都可以相互进行串行化和反串行化。 
<img src ="http://www.blogjava.net/Yadira/aggbug/316630.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yadira/" target="_blank">网络中漫步</a> 2010-03-26 11:46 <a href="http://www.blogjava.net/Yadira/articles/316630.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>