﻿<?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-网络中漫步</title><link>http://www.blogjava.net/Yadira/</link><description>目标实现了，便是光荣；目标不能实现，人生也会因这一路的风雨跋涉变得丰富而充实。这样也就不虚度此生！</description><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 03:21:10 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 03:21:10 GMT</pubDate><ttl>60</ttl><item><title>weblogic中dwr遇到session error 错误解决方法</title><link>http://www.blogjava.net/Yadira/articles/335159.html</link><dc:creator>网络中漫步</dc:creator><author>网络中漫步</author><pubDate>Thu, 14 Oct 2010 08:55:00 GMT</pubDate><guid>http://www.blogjava.net/Yadira/articles/335159.html</guid><wfw:comment>http://www.blogjava.net/Yadira/comments/335159.html</wfw:comment><comments>http://www.blogjava.net/Yadira/articles/335159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yadira/comments/commentRss/335159.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yadira/services/trackbacks/335159.html</trackback:ping><description><![CDATA[web.xml配置如下：<br />
&lt;servlet&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;display-name&gt;DWR Servlet&lt;/display-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-class&gt;org.dirrectwebremoting.servlet.DwrServlet&lt;/servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-name&gt;debug&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-value&gt;true&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-name&gt;crossDomainSessionSecurity&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-value&gt;false&lt;/param-value&gt;<br />
&nbsp;&nbsp; &lt;/init-param&gt;<br />
&lt;/servlet&gt;<br />
<br />
crossDomainSessionSecurity设成false使能够从其它域进行请求。注意，这样做在安全上会有点冒险，参考下面这篇文章，在没有理解这个后果前不要设置成false.<br />
<a href="http://hi.baidu.com/%C9%ED%B4%A6%BD%AD%BA%FE/blog/item/f8b8587f9e63af320dd7daff.html">http://hi.baidu.com/%C9%ED%B4%A6%BD%AD%BA%FE/blog/item/f8b8587f9e63af320dd7daff.html</a>
<img src ="http://www.blogjava.net/Yadira/aggbug/335159.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-10-14 16:55 <a href="http://www.blogjava.net/Yadira/articles/335159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JBoss Hibernate  配置与应用  </title><link>http://www.blogjava.net/Yadira/articles/329460.html</link><dc:creator>网络中漫步</dc:creator><author>网络中漫步</author><pubDate>Fri, 20 Aug 2010 05:49:00 GMT</pubDate><guid>http://www.blogjava.net/Yadira/articles/329460.html</guid><wfw:comment>http://www.blogjava.net/Yadira/comments/329460.html</wfw:comment><comments>http://www.blogjava.net/Yadira/articles/329460.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yadira/comments/commentRss/329460.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yadira/services/trackbacks/329460.html</trackback:ping><description><![CDATA[<strong>开发环境:<br />
Eclipse3.2+MyEclipse5.0+Spring2.0+Hibernate3.0+JBoss4.0.5GA+Mysql<br />
把mysql的jdbc驱动复制到jboss-4.2.0.CR1\server\default\lib下<br />
我们先配置一个mysql的数据源,从jboss-4.2.0.CR1\docs\examples\jca目录下复制一份mysql-ds.xml到jboss-4.2.0.CR1\server\default\deploy目录下,接着修改它的内容，修改如下： <br />
<ol class="dp-j">
    <li><span><span>&lt;?xml&nbsp;version=</span><span class="string">"1.0"</span><span>&nbsp;encoding=</span><span class="string">"UTF-8"</span><span>?&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&lt;datasources&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&lt;local-tx-datasource&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;jndi-name&gt;MySqlDS&lt;/jndi-name&gt;&nbsp;&nbsp;&nbsp;</span><span class="comment">//jndi名字 </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;use-java-context&gt;</span><span class="keyword">false</span><span>&lt;/use-java-context&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;connection-url&gt;jdbc:mysql:</span><span class="comment">//127.0.0.1:3306/test&lt;/connection-url&gt;&nbsp;&nbsp;//URL地址 </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;driver-</span><span class="keyword">class</span><span>&gt;com.mysql.jdbc.Driver&lt;/driver-</span><span class="keyword">class</span><span>&gt;&nbsp;&nbsp;</span><span class="comment">//驱动 </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;user-name&gt;root&lt;/user-name&gt;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//用户名 </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;password&gt;</span><span class="number">123456</span><span>&lt;/password&gt;&nbsp;&nbsp;</span><span class="comment">//密码 </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;exception-sorter-</span><span class="keyword">class</span><span>-name&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/exception-sorter-</span><span class="keyword">class</span><span>-name&gt; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;metadata&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;type-mapping&gt;mySQL&lt;/type-mapping&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/metadata&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&lt;/local-tx-datasource&gt; &nbsp;&nbsp;</span></li>
    <li><span>&lt;/datasources&gt;&nbsp;&nbsp;</span></li>
</ol>
<br />
<br />
在Eclipse中建立一个Hibernate的Java项目，目录结构如图一。<br />
<div style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; text-align: center"><img height="344" alt="" src="http://www.blogjava.net/images/blogjava_net/lukewoo/jh-1.gif" width="289" align="center" /></div>
在根目录建立META-INF目录，在目录下编写jboss-service.xml文件<br />
代码如下:<br />
<font style="background-color: #cce8cf">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;server&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;mbean code="org.jboss.hibernate.jmx.Hibernate"&nbsp;&nbsp; name="jboss.har:service=Hibernate"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;attribute&nbsp;&nbsp; name="DatasourceName"&gt;MySqlDS&lt;/attribute&gt;&nbsp;&nbsp; //数据源名字<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;attribute&nbsp;&nbsp; name="Dialect"&gt;org.hibernate.dialect.MySQLDialect&lt;/attribute&gt;&nbsp;&nbsp; //对应hibernate的Dialect<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;attribute&nbsp;&nbsp; name="SessionFactoryName"&gt;java:/hibernate/SessionFactory&lt;/attribute&gt;&nbsp;&nbsp; //sessionFactory的jndi名字<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;attribute&nbsp;&nbsp; name="ShowSqlEnabled"&gt;true&lt;/attribute&gt;&nbsp;&nbsp; //在控制台输出sql语句<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;attribute name="ScanForMappingsEnabled"&gt;true&lt;/attribute&gt;&nbsp; //自动搜索mapping文件<br />
&nbsp;&nbsp;&nbsp; &lt;/mbean&gt;&nbsp;&nbsp; <br />
&lt;/server&gt;</font><br />
如果有多个数据库，你可以建多个数据源，然后在jboss-service.xml文件里写上多个mbean<br />
将以上项目以dataInterface.har为名称Deploy到Jboss，启动Jboss后，就可以通过JNDI名为java:/hibernate/SessionFactory的服务来取得SessionFactory。<br />
<br />
<br />
<br />
<span style="color: #ff0000">注意的是：你项目中hibernate3.jar包不能包含在项目的Classpath中，否则会出现hibernate not bound的异常。</span><br />
<br />
</strong>
  <img src ="http://www.blogjava.net/Yadira/aggbug/329460.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-08-20 13:49 <a href="http://www.blogjava.net/Yadira/articles/329460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FireFox中的td中的字符串自动换行</title><link>http://www.blogjava.net/Yadira/articles/323179.html</link><dc:creator>网络中漫步</dc:creator><author>网络中漫步</author><pubDate>Wed, 09 Jun 2010 09:21:00 GMT</pubDate><guid>http://www.blogjava.net/Yadira/articles/323179.html</guid><wfw:comment>http://www.blogjava.net/Yadira/comments/323179.html</wfw:comment><comments>http://www.blogjava.net/Yadira/articles/323179.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yadira/comments/commentRss/323179.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yadira/services/trackbacks/323179.html</trackback:ping><description><![CDATA[IE浏览器：<br />
&nbsp;&lt;table style="word-break:break-all&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td width="9%"&nbsp;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />
&lt;/table&gt;<br />
<br />
IE浏览器与FireFox兼容：<br />
&lt;table style="table-layout:fixed;word-wrap: break-word;"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td width="9%"&nbsp;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />
&lt;/table&gt;<br />
<br />
<img src ="http://www.blogjava.net/Yadira/aggbug/323179.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-09 17:21 <a href="http://www.blogjava.net/Yadira/articles/323179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><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><item><title>利用Struts的Token解决表单重复提交</title><link>http://www.blogjava.net/Yadira/articles/313884.html</link><dc:creator>网络中漫步</dc:creator><author>网络中漫步</author><pubDate>Thu, 25 Feb 2010 06:27:00 GMT</pubDate><guid>http://www.blogjava.net/Yadira/articles/313884.html</guid><wfw:comment>http://www.blogjava.net/Yadira/comments/313884.html</wfw:comment><comments>http://www.blogjava.net/Yadira/articles/313884.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yadira/comments/commentRss/313884.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yadira/services/trackbacks/313884.html</trackback:ping><description><![CDATA[<div><font face="Geneva, Arial, Sans-serif"><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">用户在</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">web</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">页面上会可能会重复提交表单</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">,</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">比如提交完后利用</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">IE</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">的</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">Back</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">按钮回退再提交</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">.</span> <span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">即使后台程序费了九牛二虎之力气很好地捕捉了这种异常</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">,</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">也存在服务器不得不去响应这些</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">"</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">骚扰</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">"</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">而造成不必要的负担</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">.</span> <span style="font-size: 9.5pt; color: #333333; font-family: Verdana">Struts</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">的</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">Token</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">利用令牌机制开发出很好实现的方法供开发人员使用</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">.</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">假设有一个页面是用来给用户填写数据</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">,</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">并提交给</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">Database</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">的页面</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana"> insert.jsp,</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">按照普通的</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">sturts</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">结构</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">, </span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">我们会有</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">InsertAction. <br />
</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">程序转向关系如下</span> <br />
</font><font face="Geneva, Arial, Sans-serif"><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">Insert.jsp-&gt;InserAction</span> <br />
<br />
利</font><font face="Geneva, Arial, Sans-serif"><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">用令牌机制</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">,</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">程序转向关系如下</span>&nbsp;<br />
</font><font face="Geneva, Arial, Sans-serif">&nbsp;&nbsp; <span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">取得令牌</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">-&gt;Insert.jsp-&gt;</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">验证令牌</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">&amp;</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">清空令牌</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">-&gt;</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">普通</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">InsertAction</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">逻辑</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">&#8230;</span> <br />
</font><font face="Geneva, Arial, Sans-serif"><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">当取得令牌</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">,</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">转向</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">Insert.jsp</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">后</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">,Insert.jsp</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">中会有原始的令牌值</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">,</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">而这个值也被记在</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">session</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">中</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">.</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">然后提交</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">, </span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">提交前验证通过并清空了</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">session</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">中的令牌值</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">, </span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">所以一旦用户回退到之前的页面</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">, </span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">再次提交</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">,</span> </font><font face="Geneva, Arial, Sans-serif"><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">由于</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">insert.jsp</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">页面中的令牌值和</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">session</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">中的不匹配</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">,</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">所以可以很轻松地捕捉重复提交的行为</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">.</span> <span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">用单独的一个</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">PrepareInsertAction</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">来取得令牌</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">,</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">验证</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">&amp;</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">清空令牌放在</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">InsertAction</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">完成</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">.</span> <br />
</font><font face="Geneva, Arial, Sans-serif"><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">整个变化如下</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">:</span> <br />
</font><font face="Geneva, Arial, Sans-serif"><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">Struts-Configure.xml</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">调用</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">insert.jsp</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">修改前</span>&nbsp;<br />
</font><font face="Geneva, Arial, Sans-serif"><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">&nbsp;&nbsp; &lt;forward name=&#8221;insert&#8221; path=&#8221;InsertAction&#8221;/&gt;</span> <br />
</font><font face="Geneva, Arial, Sans-serif"><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">Struts-Configure.xml</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">调用</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">insert.jsp</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">修改后</span>&nbsp;<br />
</font><font face="Geneva, Arial, Sans-serif"><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">&nbsp;&nbsp; &lt;forward name=&#8221;insert&#8221; path=&#8221;PrepareInsertAction&#8221;/&gt;</span> <br />
</font><font face="Geneva, Arial, Sans-serif"><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">当然相应</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">jsp</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">上也要进行修改</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">.</span>&nbsp;<br />
</font><font face="Geneva, Arial, Sans-serif"><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">Struts-Configure.xml</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">要配置<font face="Geneva, Arial, Sans-serif">PrepareInsertAction<br />
</font></span></font><font face="Geneva, Arial, Sans-serif"><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">&lt;action path=&#8221;/PrepareInsertAction&#8221;</span>&nbsp;<br />
</font><font face="Geneva, Arial, Sans-serif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: 9.5pt; color: #333333; font-family: Verdana">type=&#8221;{packagename}.PrepareInsertAction&#8221;&gt;</span> <br />
</font><font face="Geneva, Arial, Sans-serif"><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">&lt;forward name=&#8221;passvalide&#8221; path=&#8221;/insert.jsp&#8221;/&gt;</span> <br />
</font><font face="Geneva, Arial, Sans-serif"><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">&lt;/action&gt;</span>&nbsp;<br />
</font><font face="Geneva, Arial, Sans-serif"><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">PrepareInsertAction.java execute()</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">方法核心是</span> <br />
</font><font face="Geneva, Arial, Sans-serif"><strong><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">saveToken(request);</span> <br />
</strong></font><font face="Geneva, Arial, Sans-serif"><strong><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">return mapping.findForward(&#8230;.);</span>&nbsp;<br />
</strong></font><font face="Geneva, Arial, Sans-serif"><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">&nbsp;</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">InsertAction.java execute()</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">方法首先需要进行令牌验证</span><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">,</span><span lang="ZH-CN" style="font-size: 9.5pt; color: #333333; font-family: 宋体">加入的程序行如下</span> <br />
</font><font face="Geneva, Arial, Sans-serif"><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">&#8230;&#8230;&#8230;&#8230;&#8230;.</span>&nbsp;<br />
</font><font face="Geneva, Arial, Sans-serif"><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">&nbsp;&nbsp; <strong>ActionMessages errorsM=new ActionMessages();</strong></span><strong>&nbsp;<br />
</strong></font><font face="Geneva, Arial, Sans-serif"><strong><span style="font-size: 9.5pt; color: #333333; font-family: Verdana">&nbsp;&nbsp; ActionErrors errors = new ActionErrors();</span>&nbsp;<br />
</strong></font><font face="Arial"><strong>&nbsp;&nbsp;&nbsp;<span style="font-size: 9.5pt; color: #333333; font-family: Verdana"><span>&nbsp;</span>if (!isTokenValid(request)){</span>&nbsp;<br />
</strong></font><font face="Geneva, Arial, Sans-serif"><strong><span style="font-size: 9.5pt; color: #333333; font-family: Verdana"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>errorsM.add(ActionMessages.GLOBAL_MESSAGE,</span>&nbsp;<br />
</strong></font><font face="Geneva, Arial, Sans-serif"><strong><span style="font-size: 9.5pt; color: #333333; font-family: Verdana"><span>&nbsp;&nbsp; </span>new ActionMessage("error.invalid.token"));</span>&nbsp;<br />
</strong></font><font face="Geneva, Arial, Sans-serif"><strong><span style="font-size: 9.5pt; color: #333333; font-family: Verdana"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>errors.add(errorsM);</span>&nbsp;<br />
</strong></font><font face="Geneva, Arial, Sans-serif"><strong><span style="font-size: 9.5pt; color: #333333; font-family: Verdana"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>saveErrors(request,errors);</span>&nbsp;<br />
</strong></font><font face="Geneva, Arial, Sans-serif"><span style="font-size: 9.5pt; color: #333333; font-family: Verdana"><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>saveToken(request);&nbsp; </strong>/*验证不通过,还是要生成新的令牌号*/</span>&nbsp;<br />
</font><font face="Geneva, Arial, Sans-serif"><strong><span style="font-size: 9.5pt; color: #333333; font-family: Verdana"><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>// System.out.println("prepare to return");</span>&nbsp;<br />
</strong></font><font face="Geneva, Arial, Sans-serif"><span style="font-size: 9.5pt; color: #333333; font-family: Verdana"><strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return mapping.findForward("pagecallinsert.jsp"); </strong>/*通常是回到调用insert.jsp的page*/</span>&nbsp;<br />
</font><font face="Geneva, Arial, Sans-serif"><strong><span style="font-size: 9.5pt; color: #333333; font-family: Verdana"><span>&nbsp;&nbsp;&nbsp; </span>}else{</span>&nbsp;<br />
</strong></font><font face="Geneva, Arial, Sans-serif"><span style="font-size: 9.5pt; color: #333333; font-family: Verdana"><span>&nbsp;<strong>&nbsp;&nbsp;&nbsp;&nbsp; </strong></span><strong>resetToken(request);</strong></span><strong>&nbsp;<br />
</strong></font><span style="font-size: 9.5pt; color: #333333; font-family: Verdana"><font face="Geneva, Arial, Sans-serif"><strong><span>&nbsp;&nbsp;&nbsp; </span>}&nbsp;<br />
</strong></font></span><font face="Geneva, Arial, Sans-serif"><span style="font-size: 9.5pt; color: #333333; font-family: Verdana"><span>&nbsp;</span>&#8230;&#8230;&#8230;..</span> <br />
</font><font face="Arial">完成这些配置和修改,就可以解决表单重复提交的问题了.<br />
</font><font face="Arial">延伸点思考,组织得好的应用系统里,一旦准备转到往数据库中插入记录的jsp页面,可以在<br />
</font><font face="Arial">&lt;global-forward&gt;中设定<br />
</font><font face="Arial">&nbsp;&lt;foward name="beforeinsert" path=/PrepareInsert"/&gt;<br />
</font><font face="Arial">......<br />
</font><font face="Arial">这样做的好处,很显然的. </font></div>
 <img src ="http://www.blogjava.net/Yadira/aggbug/313884.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-02-25 14:27 <a href="http://www.blogjava.net/Yadira/articles/313884.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用hibernate代替mysql中limit进行分页</title><link>http://www.blogjava.net/Yadira/articles/310526.html</link><dc:creator>网络中漫步</dc:creator><author>网络中漫步</author><pubDate>Fri, 22 Jan 2010 07:17:00 GMT</pubDate><guid>http://www.blogjava.net/Yadira/articles/310526.html</guid><wfw:comment>http://www.blogjava.net/Yadira/comments/310526.html</wfw:comment><comments>http://www.blogjava.net/Yadira/articles/310526.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yadira/comments/commentRss/310526.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yadira/services/trackbacks/310526.html</trackback:ping><description><![CDATA[mysql分页语句很简单：<br />
select * from table&nbsp; limit 开始索引,查寻数量;<br />
<br />
当用hibernate时：<br />
Query query = session.createQuery("from table limit 10,20");<br />
这样有错，hibernate不能直接在hql里写limit，hibernate不识别limit，<br />
解决如下：<br />
public List&lt;User&gt; getUserById(final int userId,final int maxCount,final int firstResult) throws Exception {<br />
&nbsp;&nbsp;final String hql = "from User where userId=? ";<br />
&nbsp;&nbsp;return this.getHibernateTemplate().executeFind(new HibernateCallback() {<br />
&nbsp;&nbsp;&nbsp;public Object doInHibernate(final Session session) throws HibernateException, SQLException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;final Query query = session.createQuery(hql);<br />
&nbsp;&nbsp;&nbsp;&nbsp;query.setParameter(0, userId);<br />
&nbsp;&nbsp;&nbsp;&nbsp;query.setMaxResults(maxCount);<br />
&nbsp;&nbsp;&nbsp;&nbsp;query.setFirstResult(firstResult);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return query.list();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;});<br />
&nbsp;}
   <img src ="http://www.blogjava.net/Yadira/aggbug/310526.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-01-22 15:17 <a href="http://www.blogjava.net/Yadira/articles/310526.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>