﻿<?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/Andyluo/category/1761.html</link><description>&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;font color="blue"&gt;锻炼身体、提升技能、修身养性&lt;/font&gt;&lt;br&gt;
讨论Eclipse, Java, Linux, Google产品&lt;br&gt;
&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;
&lt;!-- google script --&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><language>zh-cn</language><lastBuildDate>Fri, 16 May 2008 04:22:48 GMT</lastBuildDate><pubDate>Fri, 16 May 2008 04:22:48 GMT</pubDate><ttl>60</ttl><item><title>Rational Application Developer (RAD) 出现“JVM terminated. Exit code=1”错误的解决方案</title><link>http://www.blogjava.net/Andyluo/archive/2008/05/16/RAD-JVM-Exit-Error.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Fri, 16 May 2008 03:06:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2008/05/16/RAD-JVM-Exit-Error.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/200825.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2008/05/16/RAD-JVM-Exit-Error.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/200825.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/200825.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt;">
<p>在网上找了很久才找到developerWorks上的一个解决方案：</p>
<p><strong>在命令提示符里切换到目录&#8220;C:\Program Files\IBM\SDP70\jdk\jre\bin&#8221;，运行&#8220;java.exe -Xshareclasses:destroyAll&#8221;</strong></p>
<p><strong>这样就能正常启动RAD了！</strong>&nbsp;</p>
<p>原因描述如下：</p>
<p>（摘录自<a title="http://www-1.ibm.com/support/docview.wss?uid=swg21281393" href="http://www-1.ibm.com/support/docview.wss?uid=swg21281393">http://www-1.ibm.com/support/docview.wss?uid=swg21281393</a>，并通过Google Translate转译，译文已作修改）</p>
<p>&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;</p>
<p>问题（摘要） <br />
此说明解释如何解决错误&#8220;JVM的终止。退出代码= 1&#8221;。<br />
<br />
起因<br />
RAD自带的IBM JVM使用了一个高速缓存参数来提高性能。而因为JVM的崩溃，比如蓝屏，或断电，都可能造成Java高速缓存被损坏。 而JVM会拒绝连接到一个损坏的高速缓存。</p>
<p>解决问题<br />
要解决这个问题，使用&#8220;-Xshareclasses:destroyAll&#8221;的Java选项将销毁所有的共享级缓存。这是一种实用工具选项，所以不会启动JVM 。如果您想要这么做，只要从命令提示符使用参数&#8220;-Xshareclasses:destroyAll&#8221;来运行RAD使用的java。</p>
<p>&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;&#215;</p>
</span>
<img src ="http://www.blogjava.net/Andyluo/aggbug/200825.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2008-05-16 11:06 <a href="http://www.blogjava.net/Andyluo/archive/2008/05/16/RAD-JVM-Exit-Error.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编程谜题 - 2</title><link>http://www.blogjava.net/Andyluo/archive/2008/05/07/pythonPuzzle2.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Wed, 07 May 2008 08:11:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2008/05/07/pythonPuzzle2.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/198994.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2008/05/07/pythonPuzzle2.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/198994.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/198994.html</trackback:ping><description><![CDATA[谜题描述：<a title="http://www.pythonchallenge.com/pc/def/ocr.html" href="http://www.pythonchallenge.com/pc/def/ocr.html">http://www.pythonchallenge.com/pc/def/ocr.html</a><br />
从一大堆乱码中找出可以理解的信息（字母）<br />
<br />
Java解决方案：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Test&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;Exception&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL&nbsp;url&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;URL(</span><span style="color: #000000;">"</span><span style="color: #000000;">http://www.pythonchallenge.com</span><span style="color: #000000;">"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + "</span><span style="color: #000000;">/pc/def/ocr.html</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;reader&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;BufferedReader(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">InputStreamReader(url.openStream()));</span><br />
<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer&nbsp;sb&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;StringBuffer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;reader.read();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(i&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</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;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">((i&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)</span><span style="color: #000000;">'</span><span style="color: #000000;">A</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)</span><span style="color: #000000;">'</span><span style="color: #000000;">Z</span><span style="color: #000000;">'</span><span style="color: #000000;">) </span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;(i&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)</span><span style="color: #000000;">'</span><span style="color: #000000;">a</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)</span><span style="color: #000000;">'</span><span style="color: #000000;">z</span><span style="color: #000000;">'</span><span style="color: #000000;">))</span><br />
<span style="color: #000000;">
&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;sb.append((</span><span style="color: #0000ff;">char</span><span style="color: #000000;">)i);<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;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;reader.read();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;source&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sb.toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp;</span> <span style="color: #008000;">//</span><span style="color: #008000;">页面源码中最后一个单词是below</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">source.substring(source.indexOf(</span><span style="color: #000000;">"</span><span style="color: #000000;">below</span><span style="color: #000000;">"</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">5</span><span style="color: #000000;">)</span><br />
<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
附Python和Shell：<br />
<br />
Python:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;text&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"""</span><span style="color: #800000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;copy&nbsp;and&nbsp;paste&gt;<br />
</span><span style="color: #800000;">"""</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;string<br />
</span><span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;text:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #0000ff;">in</span><span style="color: #000000;">&nbsp;string.ascii_letters:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">print</span><span style="color: #000000;">&nbsp;i,</span></div>
<br />
Shell:<br />
$ curl <a href="http://www.pythonchallenge.com/pc/def/ocr.html" class="external" rel="nofollow">http://www.pythonchallenge.com/pc/def/ocr.html</a> | grep -o [a-z]<br />
<img src ="http://www.blogjava.net/Andyluo/aggbug/198994.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2008-05-07 16:11 <a href="http://www.blogjava.net/Andyluo/archive/2008/05/07/pythonPuzzle2.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编程谜题1</title><link>http://www.blogjava.net/Andyluo/archive/2008/05/06/pythonTrick1.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Tue, 06 May 2008 10:02:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2008/05/06/pythonTrick1.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/198768.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2008/05/06/pythonTrick1.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/198768.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/198768.html</trackback:ping><description><![CDATA[谜题描述：<a href="http://www.pythonchallenge.com/pc/def/map.html">http://www.pythonchallenge.com/pc/def/map.html</a><br />
<br />
Java解决方案： <br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Test&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;a&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">g&nbsp;fmnc&nbsp;wms&nbsp;bgblr&nbsp;rpylqjyrc&nbsp;gr&nbsp;zw&nbsp;fylb.&nbsp;rfyrq "<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + "</span><span style="color: #000000;">ufyr&nbsp;amknsrcpq </span><span style="color: #000000;">ypc&nbsp;dmp. </span><span style="color: #000000;">bmgle&nbsp;gr&nbsp;gl&nbsp;zw&nbsp;fylb "<br />
</span><span style="color: #000000;">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">+ "</span><span style="color: #000000;">gq&nbsp;glcddgagclr&nbsp;ylb&nbsp;rfyr'q&nbsp;ufw&nbsp;rfgq </span><span style="color: #000000;">rcvr&nbsp;gq </span><span style="color: #000000;">"<br />
</span><span style="color: #000000;">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">+ "</span><span style="color: #000000;">qm&nbsp;jmle.&nbsp;sqgle&nbsp;qrpgle.kyicrpylq()</span><span style="color: #000000;"> gq&nbsp;pcamkkclbcb. </span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;">+ "</span><span style="color: #000000;">lmu&nbsp;ynnjw&nbsp;ml&nbsp;rfc&nbsp;spj.</span><span style="color: #000000;">";</span><br />
<span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">[]&nbsp;ac&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;a.toCharArray();<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;zi&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)</span><span style="color: #000000;">'</span><span style="color: #000000;">z</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;ai&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)</span><span style="color: #000000;">'</span><span style="color: #000000;">a</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&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;index</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;index</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">ac.length;&nbsp;index</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;aci&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)ac[index];<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(aci&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;ai&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;aci&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;zi)<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;aci2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)ac[index]&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print((</span><span style="color: #0000ff;">char</span><span style="color: #000000;">)((aci2</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">zi)</span><span style="color: #000000;">?</span><span style="color: #000000;">(aci2</span><span style="color: #000000;">%</span><span style="color: #000000;">(zi</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">)</span><span style="color: #000000;">+</span><span style="color: #000000;">ai):aci2));<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print((</span><span style="color: #0000ff;">char</span><span style="color: #000000;">)aci);<br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">}</span></div>
<br />
附上Python和Shell解决方案：<br />
<br />
Python:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">1</span>&nbsp;<span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;string<br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;text&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"""</span><span style="color: #800000;">g&nbsp;fmnc&nbsp;wms&nbsp;bgblr&nbsp;rpylqjyrc&nbsp;gr&nbsp;zw&nbsp;fylb.&nbsp;rfyrq&nbsp;ufyr<br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #800000;">&nbsp;amknsrcpq&nbsp;ypc&nbsp;dmp.&nbsp;bmgle&nbsp;gr&nbsp;gl&nbsp;zw&nbsp;fylb&nbsp;gq&nbsp;glcddgagclr&nbsp;ylb&nbsp;rfyr'q<br />
</span><span style="color: #008080;">4</span>&nbsp;<span style="color: #800000;">&nbsp;&nbsp;ufw&nbsp;rfgq&nbsp;rcvr&nbsp;gq&nbsp;qm&nbsp;jmle.&nbsp;sqgle&nbsp;qrpgle.kyicrpylq()&nbsp;gq&nbsp;pcamkkclbcb.<br />
</span><span style="color: #008080;">5</span>&nbsp;<span style="color: #800000;">&nbsp;lmu&nbsp;ynnjw&nbsp;ml&nbsp;rfc&nbsp;spj.</span><span style="color: #800000;">"""</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">6</span>&nbsp;<span style="color: #000000;">&gt;&gt;&gt;</span><span style="color: #000000;">&nbsp;table&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;string.maketrans(<br />
</span><span style="color: #008080;">7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;string.ascii_lowercase,<br />
</span><span style="color: #008080;">8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;string.ascii_lowercase[</span><span style="color: #000000;">2</span><span style="color: #000000;">:]</span><span style="color: #000000;">+</span><span style="color: #000000;">string.ascii_lowercase[:</span><span style="color: #000000;">2</span><span style="color: #000000;">])</span></div>
<br />
Shell:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">$&nbsp;tr&nbsp;[a</span><span style="color: #000000;">-</span><span style="color: #000000;">z]&nbsp;[c</span><span style="color: #000000;">-</span><span style="color: #000000;">za</span><span style="color: #000000;">-</span><span style="color: #000000;">b]</span></div>
<br />
<img src ="http://www.blogjava.net/Andyluo/aggbug/198768.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2008-05-06 18:02 <a href="http://www.blogjava.net/Andyluo/archive/2008/05/06/pythonTrick1.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让OSGi支持JSF Web开发</title><link>http://www.blogjava.net/Andyluo/archive/2007/10/08/jsf-support-in-osgi.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Mon, 08 Oct 2007 07:05:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2007/10/08/jsf-support-in-osgi.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/151068.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2007/10/08/jsf-support-in-osgi.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/151068.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/151068.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在equinox的Server-Side application中添加JSF支持&nbsp;&nbsp;<a href='http://www.blogjava.net/Andyluo/archive/2007/10/08/jsf-support-in-osgi.html'>阅读全文</a><img src ="http://www.blogjava.net/Andyluo/aggbug/151068.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2007-10-08 15:05 <a href="http://www.blogjava.net/Andyluo/archive/2007/10/08/jsf-support-in-osgi.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[OSGi]为什么我们需要Bnd？</title><link>http://www.blogjava.net/Andyluo/archive/2007/08/26/why-you-need-Bnd.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Sun, 26 Aug 2007 14:20:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2007/08/26/why-you-need-Bnd.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/139641.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2007/08/26/why-you-need-Bnd.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/139641.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/139641.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 刚收到一个Google提醒，是关于一篇谈论OSGi的博客文章。文章作者Jilles van Gurp开篇便称赞OSGi，但随之抨击OSGi的一些工具。他不能忍受的关键，在于需要把包的导入一行一行的加到manifest，他还认为manifest的格式很糟糕。我不同意他的看法，因为Bnd完全可以满足他提到的需求。<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/Andyluo/archive/2007/08/26/why-you-need-Bnd.html'>阅读全文</a><img src ="http://www.blogjava.net/Andyluo/aggbug/139641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2007-08-26 22:20 <a href="http://www.blogjava.net/Andyluo/archive/2007/08/26/why-you-need-Bnd.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2007 Java Developer's Journal Readers' Choice Awards (zz)</title><link>http://www.blogjava.net/Andyluo/archive/2007/08/17/JavaDeveloperAwards2007.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Fri, 17 Aug 2007 01:47:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2007/08/17/JavaDeveloperAwards2007.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/137465.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2007/08/17/JavaDeveloperAwards2007.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/137465.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/137465.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: A list of the 2007 Java Developer’s Journal Readers’ Choice Awards winners and finalists. The awards recognize the best products and tools for Java technologies.&nbsp;&nbsp;<a href='http://www.blogjava.net/Andyluo/archive/2007/08/17/JavaDeveloperAwards2007.html'>阅读全文</a><img src ="http://www.blogjava.net/Andyluo/aggbug/137465.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2007-08-17 09:47 <a href="http://www.blogjava.net/Andyluo/archive/2007/08/17/JavaDeveloperAwards2007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSGi框架规范第4版 之 简要介绍</title><link>http://www.blogjava.net/Andyluo/archive/2007/06/29/OSGi_Introduction.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Fri, 29 Jun 2007 06:18:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2007/06/29/OSGi_Introduction.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/127065.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2007/06/29/OSGi_Introduction.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/127065.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/127065.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Eclipse从3.0版本开始采用基于OSGi的插件体系结构。这篇文章简要介绍OSGi框架的功能架构。OSGi框架是OSGi服务平台规范的核心部分。该框架提供了一个大众化，安全，可管理的平台，可以支持可扩展可下载应用插件的部署，我们称这些应用插件为Bundle。&nbsp;&nbsp;<a href='http://www.blogjava.net/Andyluo/archive/2007/06/29/OSGi_Introduction.html'>阅读全文</a><img src ="http://www.blogjava.net/Andyluo/aggbug/127065.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2007-06-29 14:18 <a href="http://www.blogjava.net/Andyluo/archive/2007/06/29/OSGi_Introduction.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>制止打嗝的土方法</title><link>http://www.blogjava.net/Andyluo/archive/2007/05/28/HowToStopDaGe.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Mon, 28 May 2007 15:10:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2007/05/28/HowToStopDaGe.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/120571.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2007/05/28/HowToStopDaGe.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/120571.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/120571.html</trackback:ping><description><![CDATA[<p><strong>要准备的东东</strong>：一杯清水<br><br><strong>方法</strong>：含一大口水，小口分多次吞下，直至不打嗝。 （一般两大口水量就可以搞定）<br><br><strong>PS: 代码实现</strong>：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(打嗝)<br>{<br>&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;index</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;index</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;&nbsp;index</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;含一大口水；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">（口中还有水）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;吞一小口；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;no&nbsp;sleep；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;no&nbsp;sleep；<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;sleep&nbsp;5秒；<br>}</span></div>
<img src ="http://www.blogjava.net/Andyluo/aggbug/120571.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2007-05-28 23:10 <a href="http://www.blogjava.net/Andyluo/archive/2007/05/28/HowToStopDaGe.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP标签使用和表单参数中文问题的一些snippets</title><link>http://www.blogjava.net/Andyluo/archive/2007/01/09/tag_encoding_snippets.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Tue, 09 Jan 2007 13:28:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2007/01/09/tag_encoding_snippets.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/92744.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2007/01/09/tag_encoding_snippets.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/92744.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/92744.html</trackback:ping><description><![CDATA[
		<p>         在《J2EE》课程实验里写了些jsp和servlet代码，将遇到的一些问题和解决方法贴上，自己mark一下 &amp;&amp; 供大家参考<br /><br />1、jsp:usebean标签中， 若引用的bean不存在，会自动调用默认构造器生成一个javabean实例，所以不要在servlet里再用session.getAttribute来判断bean是否为空（因为肯定不为空），应该判断里面的字段是否为null或为初始化状态。</p>
		<p>2、jsp:usebean 的class属性应该是类的全名（包括包名）。在前面&lt;%@ import&gt;中import的包，在tag里不起作用，只对jsp里面的java代码有用，所以tag里要使用类的全名</p>
		<p>3、post时如果表单里有中文，会出现中文乱码，在servlet里调用request.getParameter之前执行request.setCharacterEncoding("gb2312");就可以正确识别和显示中文了；<br /><br />如果是url中用中文参数，如someaction.jsp?q=中文问题，则要加一个filter来setEncoding，因为post和get传送参数的处理方式不一样。url中包含中文参数的设置参考：<a target="_blank" href="http://www.itet.cn/0512456328001529/JSP/0691214511318687.html">http://www.itet.cn/0512456328001529/JSP/0691214511318687.html</a></p>
<img src ="http://www.blogjava.net/Andyluo/aggbug/92744.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2007-01-09 21:28 <a href="http://www.blogjava.net/Andyluo/archive/2007/01/09/tag_encoding_snippets.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CSS属性列表及对应的JS DOM属性映射 [ZZ]</title><link>http://www.blogjava.net/Andyluo/archive/2006/12/09/cssAttributes.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Sat, 09 Dec 2006 13:40:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/12/09/cssAttributes.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/86587.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/12/09/cssAttributes.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/86587.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/86587.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: CSS属性列表 及 对应的JavaScript DOM属性映射，手册&nbsp;&nbsp;<a href='http://www.blogjava.net/Andyluo/archive/2006/12/09/cssAttributes.html'>阅读全文</a><img src ="http://www.blogjava.net/Andyluo/aggbug/86587.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-12-09 21:40 <a href="http://www.blogjava.net/Andyluo/archive/2006/12/09/cssAttributes.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为什么用PreparedStatement而不是直接用"+"连接SQL语句</title><link>http://www.blogjava.net/Andyluo/archive/2006/11/01/78549.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Wed, 01 Nov 2006 12:18:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/11/01/78549.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/78549.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/11/01/78549.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/78549.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/78549.html</trackback:ping><description><![CDATA[
		<p>最开始 我在程序里使用SQL访问数据库时，都是直接用“+”将字段值嵌到SQL中。  </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">String sql </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">select s.name from student s where s.id='</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> sId </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'</span>
				<span style="COLOR: #000000">"；</span>
		</div>
		<br />
		<p>
				<br />后来我开始使用<strong>PreparedStatement</strong>，在SQL里使用“？”标记参数，然后用setXXX方法给参数赋值。当时只知道这样用是因为有<strong>setDate，setTimeStamp</strong>这些用“+”连接不能直接嵌入的值。<br /><br />感觉PreparedStatement在<strong>性能</strong>方面应该也能快点，可能DBMS会重用，但不明底层原理。<br /><br />这次《数据库实现》课程终于让我弄懂了：<strong>每个SQL语句都要通过 语法分析 -&gt; 生成逻辑查询计划 -&gt; 逻辑优化 -&gt; 物理优化</strong> 等步骤生成具体的执行计划，用PreparedStatement就可以生成一个执行计划，以后只是参数改变（相当于执行计划的<strong>执行环境改变</strong>），前面的四个步骤也会<strong>省略</strong>，从而提高了效率。<br /><br />如果一个SQL语句要被反复多次执行，或多用户同时操作，则应选用PreparedStatement！</p>
<img src ="http://www.blogjava.net/Andyluo/aggbug/78549.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-11-01 20:18 <a href="http://www.blogjava.net/Andyluo/archive/2006/11/01/78549.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序员自创的一首歌 - "Java EE 5"</title><link>http://www.blogjava.net/Andyluo/archive/2006/06/30/JavaSong.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Fri, 30 Jun 2006 00:40:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/06/30/JavaSong.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/55847.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/06/30/JavaSong.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/55847.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/55847.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Sun公司一名员工自己创作的歌，关于Java EE 5，很有意思的一首歌，程序员业余生活也可以这么丰富！&nbsp;&nbsp;<a href='http://www.blogjava.net/Andyluo/archive/2006/06/30/JavaSong.html'>阅读全文</a><img src ="http://www.blogjava.net/Andyluo/aggbug/55847.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-06-30 08:40 <a href="http://www.blogjava.net/Andyluo/archive/2006/06/30/JavaSong.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实现类似select new EntityClass(p.attr1,substring(p.attr2),...) EJB QL的功能</title><link>http://www.blogjava.net/Andyluo/archive/2006/05/30/49115.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Tue, 30 May 2006 14:03:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/05/30/49115.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/49115.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/05/30/49115.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/49115.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/49115.html</trackback:ping><description><![CDATA[在EJB3.0代码里直接用select new EntityClass(p.attr1,substring(p.attr2),...) .....报错，说不能识别“(”，估计就是substring后面的“(”，难道是EJB QL没这种语法？<br /><br />在网上找这样的代码或实现方法未果，查<a class="" title="" href="http://jcp.org/en/jsr/detail?id=220" target="_blank">EJB 3.0规范</a>，里面有一个EJB QL的范式描述，原来在QL里只能在where条件里使用字符串函数，在select new里估计是不行了，后来想到<strong>select new 要调用EntityClass的构造函数来构建EntityClass实例</strong>，所以考虑在EntityClass的构造方法里调用substring等方法，实践之，执行成功，mark！<br /><br />（文章短了点，但如果能解决别人的问题，也是不错的。post完继续写程序，hoho）<img src ="http://www.blogjava.net/Andyluo/aggbug/49115.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-05-30 22:03 <a href="http://www.blogjava.net/Andyluo/archive/2006/05/30/49115.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>111个知名Java项目集锦（包括url和描述）</title><link>http://www.blogjava.net/Andyluo/archive/2006/04/15/javaprojects.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Sat, 15 Apr 2006 10:49:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/04/15/javaprojects.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/41256.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/04/15/javaprojects.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/41256.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/41256.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 110个知名Java项目，包括项目描述和链接。&nbsp;&nbsp;<a href='http://www.blogjava.net/Andyluo/archive/2006/04/15/javaprojects.html'>阅读全文</a><img src ="http://www.blogjava.net/Andyluo/aggbug/41256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-04-15 18:49 <a href="http://www.blogjava.net/Andyluo/archive/2006/04/15/javaprojects.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何将小数转换成百分数</title><link>http://www.blogjava.net/Andyluo/archive/2006/03/27/convertToPercent.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Mon, 27 Mar 2006 11:48:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/03/27/convertToPercent.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/37672.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/03/27/convertToPercent.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/37672.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/37672.html</trackback:ping><description><![CDATA[有朋友在群里问了这个问题，印象中Java没有这方面的函数（百分数转换为小数倒是有一个），而且直接乘以100会得出类似2.5999999999的结果，在网上也没有搜到类似的解决方案，所以把我们的讨论结果发上来，肯定不是最优解，也希望来访者留下你们的解决办法，只要能优化其中的某一段就可以！<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String convert(String orignal)<br /><img id="Codehighlighter1_39_617_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_617_Open_Text.style.display='none'; Codehighlighter1_39_617_Closed_Image.style.display='inline'; Codehighlighter1_39_617_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_39_617_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_39_617_Closed_Text.style.display='none'; Codehighlighter1_39_617_Open_Image.style.display='inline'; Codehighlighter1_39_617_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_39_617_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_39_617_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">去掉小数后面的零值，如：0.02500</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    String noDotInteger </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Integer.parseInt    (str.replace(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">''</span><span style="COLOR: #000000">)) </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">2500</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> lengthOfZero </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> noDotInteger.length() </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> noDotInteger.indexOf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">2</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    str </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> str.substring(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, str.length() </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> lengthOfZero);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">0.025 <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">转换成百分数字符串</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> index </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> orignal.indexOf(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(index </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> orignal.length() </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">)<br /><img id="Codehighlighter1_385_515_Open_Image" onclick="this.style.display='none'; Codehighlighter1_385_515_Open_Text.style.display='none'; Codehighlighter1_385_515_Closed_Image.style.display='inline'; Codehighlighter1_385_515_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_385_515_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_385_515_Closed_Text.style.display='none'; Codehighlighter1_385_515_Open_Image.style.display='inline'; Codehighlighter1_385_515_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_385_515_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_385_515_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> orignal.substring(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,index) </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> orignal.substring(index </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,index </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> orignal.substring(index </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_530_615_Open_Image" onclick="this.style.display='none'; Codehighlighter1_530_615_Open_Text.style.display='none'; Codehighlighter1_530_615_Closed_Image.style.display='inline'; Codehighlighter1_530_615_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_530_615_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_530_615_Closed_Text.style.display='none'; Codehighlighter1_530_615_Open_Image.style.display='inline'; Codehighlighter1_530_615_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_530_615_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_530_615_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> orignal.substring(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,index) </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> orignal.substring(index </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />续：J2ME综合技术讨论群 的刘军提出了他的解决方案：<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.math.BigDecimal;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Hello<br /><img id="Codehighlighter1_48_221_Open_Image" onclick="this.style.display='none'; Codehighlighter1_48_221_Open_Text.style.display='none'; Codehighlighter1_48_221_Closed_Image.style.display='inline'; Codehighlighter1_48_221_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_48_221_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_48_221_Closed_Text.style.display='none'; Codehighlighter1_48_221_Open_Image.style.display='inline'; Codehighlighter1_48_221_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_48_221_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_48_221_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String args[])<br /><img id="Codehighlighter1_91_219_Open_Image" onclick="this.style.display='none'; Codehighlighter1_91_219_Open_Text.style.display='none'; Codehighlighter1_91_219_Closed_Image.style.display='inline'; Codehighlighter1_91_219_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_91_219_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_91_219_Closed_Text.style.display='none'; Codehighlighter1_91_219_Open_Image.style.display='inline'; Codehighlighter1_91_219_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_91_219_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_91_219_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        String s </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0.025</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        BigDecimal bd </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> BigDecimal(s);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(bd.multiply(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> BigDecimal(</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">))); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">输出2.500</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"> </span></div><br />山城浪子则说用java.text.DecimalFormat最好最方便！<img src ="http://www.blogjava.net/Andyluo/aggbug/37672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-03-27 19:48 <a href="http://www.blogjava.net/Andyluo/archive/2006/03/27/convertToPercent.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2ME网络程序中判断一次数据发送的结束</title><link>http://www.blogjava.net/Andyluo/archive/2006/03/19/36103.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Sun, 19 Mar 2006 13:30:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/03/19/36103.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/36103.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/03/19/36103.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/36103.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/36103.html</trackback:ping><description><![CDATA[如果服务器发来的字节流没有作任何标记，只是在发完一次数据后flush()，则在客户端可以用inputStream.available()来判断流的长度，但一定要在调用read()至少一次之后，不然就只能得到零值。<br /><br />如下代码所示：<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #008000">//</span><span style="COLOR: #008000">将接收到的数据存到字节数组array</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> firstChar </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> inputStream.read();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> length </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> inputStream.available();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[] array </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[length</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />array[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">)firstChar;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />inputStream.read(array,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,length);</span></div><img src ="http://www.blogjava.net/Andyluo/aggbug/36103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-03-19 21:30 <a href="http://www.blogjava.net/Andyluo/archive/2006/03/19/36103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE开发者选择何种AJAX框架[转载]</title><link>http://www.blogjava.net/Andyluo/archive/2006/03/04/33565.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Sat, 04 Mar 2006 00:58:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/03/04/33565.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/33565.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/03/04/33565.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/33565.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/33565.html</trackback:ping><description><![CDATA[<P>&nbsp;在下面这篇文章中 <A href="http://www.firstpartners.net/blog/technology/2006/03/01/web-20-and-enterprise-java-move-over-struts/">http://www.firstpartners.net/blog/technology/2006/03/01/web-20-and-enterprise-java-move-over-struts/</A> ，作者介绍了几种常用的AJAX框架。</P>
<P>最后作者以Struts为例，介绍了几种选择Ajax的场景：</P>
<P>1 现有的Struts应用程序要使用Ajax，请使用AjaxAnywhere</P>
<P>2 建立新的应用程序准备使用Ajax，参考Appfuse，它集成了DWR的Ajax</P>
<P>3 中期目标： 使用一种支持Ajax的JSF的实现，MyFaces或者Struts Shale<BR><BR>原文地址：<A href="http://blog.csdn.net/danny_xcz/archive/2006/03/03/614302.aspx">http://blog.csdn.net/danny_xcz/archive/2006/03/03/614302.aspx</A></P><img src ="http://www.blogjava.net/Andyluo/aggbug/33565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-03-04 08:58 <a href="http://www.blogjava.net/Andyluo/archive/2006/03/04/33565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Swing应用中异步执行线程</title><link>http://www.blogjava.net/Andyluo/archive/2006/03/02/33236.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Thu, 02 Mar 2006 08:09:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/03/02/33236.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/33236.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/03/02/33236.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/33236.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/33236.html</trackback:ping><description><![CDATA[避免因线程运行造成Swing界面停止响应。<BR><BR>类javax.swing.SwingUtilities提供了一些Swing工具方法：<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008000">/*</SPAN><SPAN style="COLOR: #008000">&nbsp;异步执行doRun线程&nbsp;</SPAN><SPAN style="COLOR: #008000">*/</SPAN><SPAN style="COLOR: #000000"><BR><BR></SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;invokeLater(Runnable&nbsp;doRun)&nbsp;<BR></SPAN></DIV><BR><BR>还有一个同步执行的：<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;invokeAndWait(Runnable&nbsp;doRun)&nbsp;</SPAN></DIV><img src ="http://www.blogjava.net/Andyluo/aggbug/33236.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-03-02 16:09 <a href="http://www.blogjava.net/Andyluo/archive/2006/03/02/33236.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>做报表时某种中文问题的解决方法</title><link>http://www.blogjava.net/Andyluo/archive/2006/02/19/31540.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Sun, 19 Feb 2006 12:43:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/02/19/31540.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/31540.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/02/19/31540.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/31540.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/31540.html</trackback:ping><description><![CDATA[<P>刚解决的问题：<BR><BR>用Word的网页形式做报表时遇到中文乱码，而且已经使用ISO8859_1对中文参数进行了转换，试试将网页里的charset=us-ascii改为charset=gb2312<BR><BR>怎么我这里默认的charset是us-ascii呢，我这是中文版阿？！</P><img src ="http://www.blogjava.net/Andyluo/aggbug/31540.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-02-19 20:43 <a href="http://www.blogjava.net/Andyluo/archive/2006/02/19/31540.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用winrar或winzip制作可运行jar文件</title><link>http://www.blogjava.net/Andyluo/archive/2006/02/16/31057.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Thu, 16 Feb 2006 06:49:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/02/16/31057.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/31057.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/02/16/31057.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/31057.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/31057.html</trackback:ping><description><![CDATA[目的是在没有安装JDK的情况下制作可执行jar。<BR><BR>步骤：<BR>&nbsp;<BR>1、在应用程序文件根目录下新建一个META-INF目录，在该目录下新建MANIFEST.MF文件， <BR>文件内容为：<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008080">1</SPAN>&nbsp;<SPAN style="COLOR: #000000">Main-Class:&nbsp;包名.主类名&nbsp;<BR></SPAN><SPAN style="COLOR: #008080">2</SPAN>&nbsp;<SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">3</SPAN>&nbsp;<SPAN style="COLOR: #000000"></SPAN></DIV><BR>2、将应用程序根目录下所有文件用winrar或winzip打包，格式为zip； <BR><BR>3、将zip文件扩展名改为jar ；<BR><BR>4、双击jar文件即可运行。 <BR><BR>希望能对大家有点帮助。<img src ="http://www.blogjava.net/Andyluo/aggbug/31057.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-02-16 14:49 <a href="http://www.blogjava.net/Andyluo/archive/2006/02/16/31057.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[备份from blueline]值的关注的Java开源项目(zz)</title><link>http://www.blogjava.net/Andyluo/archive/2006/02/16/31019.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Thu, 16 Feb 2006 06:14:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/02/16/31019.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/31019.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/02/16/31019.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/31019.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/31019.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 值的关注的Java开源项目&nbsp;名称 资料 概况 OFBiz http://ofbizchina.com:8080/ http://www.ofbiz.org/ https://ofbiz.dev.java.net/ OFBiz是一个非常著名的开源项...&nbsp;&nbsp;<a href='http://www.blogjava.net/Andyluo/archive/2006/02/16/31019.html'>阅读全文</a><img src ="http://www.blogjava.net/Andyluo/aggbug/31019.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-02-16 14:14 <a href="http://www.blogjava.net/Andyluo/archive/2006/02/16/31019.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[备份from blueline]利用Ant来做Nightly Test（zz）</title><link>http://www.blogjava.net/Andyluo/archive/2006/02/16/31017.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Thu, 16 Feb 2006 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/02/16/31017.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/31017.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/02/16/31017.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/31017.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/31017.html</trackback:ping><description><![CDATA[使用Ant中的两个Tasks来完成自动运行Nightly Test <br />
<br />
&lt;junit printsummary="yes" haltonfailure="yes"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;test name="org.redsoft.forum.AllTests&#8221; haltonfailure="no" outfile="result" &gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;formatter type="xml" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/test&gt; <br />
&lt;/junit&gt;<br />
<br />
产生一个XML是结果报告<br />
再利用JunitReport来产生一个可供浏览的结果文件。<br />
<br />
&lt;junitreport todir="./reports"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;fileset dir="./reports"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;include name="TEST-*.xml"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br />
&nbsp;&lt;report format="frames" todir="./report/html"/&gt;<br />
&lt;/junitreport&gt;<br />
<br />
<img src ="http://www.blogjava.net/Andyluo/aggbug/31017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-02-16 14:13 <a href="http://www.blogjava.net/Andyluo/archive/2006/02/16/31017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[备份from blueline]阅读开源项目源代码：weblech</title><link>http://www.blogjava.net/Andyluo/archive/2006/02/16/31016.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Thu, 16 Feb 2006 06:12:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/02/16/31016.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/31016.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/02/16/31016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/31016.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/31016.html</trackback:ping><description><![CDATA[一个下载整站资源的软件，目前版本是0.0.3，大概十来个类 <br />
<br />
<a href="/Files/Andyluo/weblech.jpg">组件图</a><br />
<br />
<a href="/Files/Andyluo/weblech_logic.jpg">类图</a><br />
<br />
了解结构了就开始看吧，go  
<img src ="http://www.blogjava.net/Andyluo/aggbug/31016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-02-16 14:12 <a href="http://www.blogjava.net/Andyluo/archive/2006/02/16/31016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[备份from blueline]发现weblech的一个Bug（多线程）</title><link>http://www.blogjava.net/Andyluo/archive/2006/02/16/31013.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Thu, 16 Feb 2006 06:10:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/02/16/31013.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/31013.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/02/16/31013.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/31013.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/31013.html</trackback:ping><description><![CDATA[当下载第一个URL时（一般是网站主页），如果等待时间过长，那么其他线程要么会认为网站已下载完而结束，要么会在下面标*代码处抛出<STRONG>NullPointerException, </STRONG>很少能够存活下来。<BR><BR>
<DIV style="BORDER-RIGHT: #999999 1px dotted; PADDING-RIGHT: 5px; BORDER-TOP: #999999 1px dotted; PADDING-LEFT: 5px; FONT-SIZE: 11px; PADDING-BOTTOM: 5px; BORDER-LEFT: #999999 1px dotted; WIDTH: 537px; PADDING-TOP: 5px; BORDER-BOTTOM: #999999 1px dotted; FONT-FAMILY: sans-serif; BACKGROUND-COLOR: #f9f9f9" ;>
<P>else if(queueSize() == 0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*&nbsp;queueSize()已经被同步 */<BR>{<BR>&nbsp;&nbsp;&nbsp; break;<BR>}<BR>URLToDownload nextURL;<BR>synchronized(queue)<BR>{<BR>&nbsp;&nbsp;&nbsp; nextURL = queue.getNextInQueue();<BR>&nbsp;&nbsp;&nbsp; downloadsInProgress++;<BR>}<BR>synchronized(urlsDownloading)<BR>{<BR>&nbsp;&nbsp;&nbsp; urlsDownloading.add(nextURL);<BR>}<BR>int newDepth = nextURL.getDepth() + 1; **********************</P></DIV><BR>估计可能是线程交叉了，还没来得及同步就跑到后面去执行getDepth()了。<BR>在<STRONG>nextURL = queue.getNextInQueue();</STRONG>后面加上判断就OK了:<BR><BR>
<DIV style="BORDER-RIGHT: #999999 1px dotted; PADDING-RIGHT: 5px; BORDER-TOP: #999999 1px dotted; PADDING-LEFT: 5px; FONT-SIZE: 11px; PADDING-BOTTOM: 5px; BORDER-LEFT: #999999 1px dotted; WIDTH: 537px; PADDING-TOP: 5px; BORDER-BOTTOM: #999999 1px dotted; FONT-FAMILY: sans-serif; BACKGROUND-COLOR: #f9f9f9" ;>
<P>synchronized(queue)<BR>{<BR>&nbsp;&nbsp;&nbsp; nextURL = queue.getNextInQueue();<BR><STRONG>&nbsp;&nbsp;&nbsp; if(nextURL == null)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;<BR>&nbsp;&nbsp;&nbsp; }</STRONG><BR>&nbsp;&nbsp;&nbsp; downloadsInProgress++;<BR>}</P></DIV><BR><img src ="http://www.blogjava.net/Andyluo/aggbug/31013.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-02-16 14:10 <a href="http://www.blogjava.net/Andyluo/archive/2006/02/16/31013.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[备份from blueline]weblech阅读心得20050501（URL分类、链接处理、读取资源、多级目录、变量Doc、Log4j）</title><link>http://www.blogjava.net/Andyluo/archive/2006/02/16/31014.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Thu, 16 Feb 2006 06:10:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/02/16/31014.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/31014.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/02/16/31014.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/31014.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/31014.html</trackback:ping><description><![CDATA[<p>URL分别用三个List保存，<br />
一个是boring，这个list中的url最后来下载<br />
其他两个是interesting和average<br />
当搜索到url时检查是否包含设定为boring的词，并放入boring中</p>
<p>用户可设定&#8220;深度搜索&#8221;：每搜到一个url就放在list的最前面<br />
也可广度</p>
<p>有些网页链接要特殊处理：</p>
<div style="border: 1px dotted #999999; padding: 5px; font-size: 11px; width: 537px; font-family: sans-serif; background-color: #f9f9f9;"  ;="">
<p>url = textReplace("?", URLEncoder.encode("?"), url);<br />
url = textReplace("&amp;", URLEncoder.encode("&amp;"), url);<br />
private String textReplace(String find, String replace, String input)<br />
{<br />
&nbsp;&nbsp;&nbsp; int startPos = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp; while(true)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int textPos = input.indexOf(find, startPos);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(textPos &lt; 0)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; input = input.substring(0, textPos) + replace + input.substring(textPos + find.length());<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; startPos = textPos + replace.length();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return input;<br />
}</p>
</div>
<p>读取资源代码：</p>
<div style="border: 1px dotted #999999; padding: 5px; font-size: 11px; width: 537px; font-family: sans-serif; background-color: #f9f9f9;"  ;="">
<p>BufferedInputStream remoteBIS = new BufferedInputStream(conn.getInputStream());<br />
ByteArrayOutputStream baos = new ByteArrayOutputStream(10240);<br />
byte[] buf = new byte[1024];<br />
int bytesRead = 0;<br />
while(bytesRead &gt;= 0)<br />
{<br />
&nbsp;&nbsp;&nbsp; baos.write(buf, 0, bytesRead);<br />
&nbsp;&nbsp;&nbsp; bytesRead = remoteBIS.read(buf);<br />
}</p>
<p>byte[] content = baos.toByteArray();</p>
</div>
<br />
建立多级目录：
<div style="border: 1px dotted #999999; padding: 5px; font-size: 11px; width: 537px; font-family: sans-serif; background-color: #f9f9f9;"  ;="">
<p>File f = new File(fileName);<br />
f.getParentFile().mkdirs();<br />
FileOutputStream out = new FileOutputStream(fileName);<br />
out.write(content);<br />
out.flush();<br />
out.close();</p>
</div>
<br />
给一个变量写doc：（在eclipse中，鼠标置上会显示）
<div style="border: 1px dotted #999999; padding: 5px; font-size: 11px; width: 537px; font-family: sans-serif; background-color: #f9f9f9;"  ;="">
<p>/**<br />
* Set of URLs downloaded or scheduled, so we don't download a<br />
* URL more than once.<br />
* Thread safety: To access the set, first synchronize on it.<br />
*/<br />
private Set urlsDownloadedOrScheduled;</p>
</div>
<br />
这种log挺好：（apache log4j）
<div style="border: 1px dotted #999999; padding: 5px; font-size: 11px; width: 537px; font-family: sans-serif; background-color: #f9f9f9;"  ;="">
<p>private final static Category _logClass = Category.getInstance(TextSpider.class);</p>
</div>
<div style="border: 1px dotted #999999; padding: 5px; font-size: 11px; width: 537px; font-family: sans-serif; background-color: #f9f9f9;"  ;="">
<p>/*<br />
显示信息: 2005-05-01 11:40:44,250 [main] INFO? TextSpider.java:105 - Starting Spider...<br />
*/<br />
_logClass.info("Starting Spider...");</p>
</div>
<img src ="http://www.blogjava.net/Andyluo/aggbug/31014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-02-16 14:10 <a href="http://www.blogjava.net/Andyluo/archive/2006/02/16/31014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[备份]初始化或注册资源</title><link>http://www.blogjava.net/Andyluo/archive/2006/02/16/31010.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Thu, 16 Feb 2006 06:07:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/02/16/31010.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/31010.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/02/16/31010.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/31010.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/31010.html</trackback:ping><description><![CDATA[Class.forName is excellent<BR>例：<BR>
<DIV style="BORDER-RIGHT: #999999 1px dotted; PADDING-RIGHT: 5px; BORDER-TOP: #999999 1px dotted; PADDING-LEFT: 5px; FONT-SIZE: 11px; PADDING-BOTTOM: 5px; BORDER-LEFT: #999999 1px dotted; WIDTH: 537px; PADDING-TOP: 5px; BORDER-BOTTOM: #999999 1px dotted; FONT-FAMILY: sans-serif; BACKGROUND-COLOR: #f9f9f9" ;>
<P>Class.forName("weblech.util.Log4j");</P></DIV>在Log4j里定义一个静态类构造器，里面放apache log4j的初始代码。<BR><BR>其他如注册数据源、界面本地化。。。<BR><BR>Eclipse看代码是最爽的：<BR>查看类的引用、代码导航<img src ="http://www.blogjava.net/Andyluo/aggbug/31010.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-02-16 14:07 <a href="http://www.blogjava.net/Andyluo/archive/2006/02/16/31010.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计RIA Web应用的9条指导原则 （转载）</title><link>http://www.blogjava.net/Andyluo/archive/2006/01/09/27279.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Mon, 09 Jan 2006 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/01/09/27279.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/27279.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/01/09/27279.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/27279.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/27279.html</trackback:ping><description><![CDATA[<DIV class=storytitle>Bill Scott's AJAX Blog: Nine Tips for Designing Rich Internet Applications</DIV>
<DIV class=storyminortitle>If you were going to provide some quick basic guidelines for designing rich applications what would they be?</DIV>
<P>
<DIV class=writtenby>By: <A href="http://au.sys-con.com/author/billscott.htm">Bill Scott</A></DIV>
<DIV class=storydatetime>Jan. 7, 2006 02:30 PM<BR><BR>Source: <A href="http://looksgoodworkswell.blogspot.com/2006/01/nine-tips-for-designing-rich-internet.html"><FONT size=3>Nine Tips for Designing Rich Internet Applications</FONT></A> <BR><BR>*****************************************************************<BR>Recently I was asked to provide input into a presentation. The question was asked, if you were going to provide some quick basic guidelines for designing rich applications what would they be.<BR><BR>Here were the nine thoughts as they originally came to my head.<BR><BR>1) <SPAN style="FONT-WEIGHT: bold">Make it directly interactive</SPAN><BR>Instead of page to page interactions think direct interaction. Use in context editing as much as possible. Use drag and drop only where it makes sense. Barring a selection model, put tools as close to the objects being edited as possible. Cooper states it as "Where there is output, let there be input."<BR><BR>2) <SPAN style="FONT-WEIGHT: bold">Make it inviting</SPAN><BR>Use hover to invite users to the next level of interaction. If the interface responds well to light events (like hover) it can be used to entice the user to interact.<BR><BR>3) <SPAN style="FONT-WEIGHT: bold">Use lightweight, in-context popups instead of page transitions where possible</SPAN><BR>Although they will eventually get over-used, lightweight popups can be your friend. Think of them as annexed areas for your page.<BR><BR>4) <SPAN style="FONT-WEIGHT: bold">Use real-estate creatively</SPAN><BR>As mentioned popups help. But slide outs have long been allies in desktop tools, they can be an aid in the world of the web.<BR><BR>5) <SPAN style="FONT-WEIGHT: bold">Cross page boundaries reluctantly</SPAN><BR>Think of a page switch as a context boundary that the user may or may not want to cross. Think of it as a place that many of your users will lose interest and no longer follow you.<BR><BR>6) <SPAN style="FONT-WEIGHT: bold">Create a light footprint</SPAN><BR>Make it extremely easy to interact. Rating movies or news with just a click on a star with no-refresh is awesome. Checking hostnames without leaving the page is an excellent way to keep a user engaged. Shopping by clicks that only add to a container on the page (instead of going to a new page) are like impulse aisles in the grocery store.<BR><BR>7) <SPAN style="FONT-WEIGHT: bold">Think of your interactions as storyboards</SPAN><BR>As the designer you are the director. Think about the event states as acts in a play and your interface elements as actors. Get them all moving towards telling your story. Putting the frames down on a storyboard is a great way to rehearse your script. Think of the interesting moments as opportunities for engagement.<BR><BR>8) <SPAN style="FONT-WEIGHT: bold">Communicate transitions</SPAN><BR>Keeping the user informed during lightweight operations (that don't leave the page) with spinning wheels, busy or progress indicators keep the user engaged with a living page.<BR><BR>9) <SPAN style="FONT-WEIGHT: bold">Think in objects</SPAN><BR>Instead of thinking about content and pages, think about Rich Internet Objects. The travel log in Yahoo!'s Trip Planner is a good example. Once created it can be searched for or shared. This will help you create more interactive applications and make the user's work recognizable and sharable.<BR><BR>These are not exhaustive. Even as I go to publish this I can think of other tips to include... but I will resist adding to the list. Perhaps you have some tips/principles that have helped you solve design challenges?</DIV><img src ="http://www.blogjava.net/Andyluo/aggbug/27279.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-01-09 17:16 <a href="http://www.blogjava.net/Andyluo/archive/2006/01/09/27279.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Trick: How to access private APIs from a different package (ZZ)</title><link>http://www.blogjava.net/Andyluo/archive/2006/01/05/26787.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Thu, 05 Jan 2006 13:01:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/01/05/26787.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/26787.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/01/05/26787.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/26787.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/26787.html</trackback:ping><description><![CDATA[<H5>Source: <A href="http://openide.netbeans.org/tutorial/api-design.html#design.less.friend">http://openide.netbeans.org/tutorial/api-design.html#design.less.friend</A></H5>
<H5><A name=design.less.friend>Allow access only from a friend code</A></H5>Another useful technique to not expose too much in API is to give access to certain functionality (e. g. ability to instantiate a class or to call a certain method) just to a <Q>friend</Q> code. 
<P>Java by default restricts the friends of a class to those classes that are in the same package. If there is a functionality that you want share just among classes in the same package, use <EM>package-private</EM> modifier in definition of a constructor, a field or a method and then it will remain accessible only to <Q>friends</Q>. 
<P>Sometimes however it is more useful to extend the set of friends to a wider range of classes - for example one wants to define a pure API package and put the implementation into separate one. In such cases following trick can be found useful. Imagine there is a class item: <PRE><SPAN class=keyword>public</SPAN> <SPAN class=keyword>final</SPAN> <SPAN class=keyword>class</SPAN> <SPAN class=type>api</SPAN>.Item {
    <SPAN class=comment>/** Friend only constructor */</SPAN>
    <SPAN class=type>Item</SPAN>(<SPAN class=type>int</SPAN> <SPAN class=variable-name>value</SPAN>) {
        <SPAN class=keyword>this</SPAN>.value = value;
    }

    <SPAN class=comment>/** API method(s) */</SPAN>
    <SPAN class=keyword>public</SPAN> <SPAN class=type>int</SPAN> <SPAN class=function-name>getValue</SPAN>() {
        <SPAN class=keyword>return</SPAN> value;
    }
        
    <SPAN class=comment>/** Friend only method */</SPAN>
    <SPAN class=keyword>final</SPAN> <SPAN class=type>void</SPAN> <SPAN class=function-name>addListener</SPAN>(<SPAN class=type>Listener</SPAN> <SPAN class=variable-name>l</SPAN>) {
        <SPAN class=comment>// some impl
</SPAN>    }
}
</PRE>that is part of the API, but cannot be instanitated nor listened on outside of the friend classes (but these classes are not only in api package). Then one can define an <CODE>Accessor</CODE> in the non-API package: <PRE><SPAN class=keyword>public</SPAN> <SPAN class=keyword>abstract</SPAN> <SPAN class=keyword>class</SPAN> <SPAN class=type>impl</SPAN>.Accessor {
    <SPAN class=keyword>public</SPAN> <SPAN class=keyword>static</SPAN> <SPAN class=type>Accessor</SPAN> <SPAN class=variable-name>DEFAULT</SPAN>;

    <SPAN class=keyword>static</SPAN> {
        <SPAN class=comment>// invokes static initializer of Item.class</SPAN>
        <SPAN class=comment>// that will assign value to the DEFAULT field above</SPAN>
        <SPAN class=type>Class</SPAN> <SPAN class=variable-name>c</SPAN> = api.Item.<SPAN class=keyword>class</SPAN>;
        <SPAN class=keyword>try</SPAN> {
            <SPAN class=type>Class</SPAN>.forName(<SPAN class=variable-name>c</SPAN>.getName(), true, <SPAN class=variable-name>c</SPAN>.getClassLoader());
        } <SPAN class=keyword>catch</SPAN> (<SPAN class=type>ClassNotFoundException</SPAN> <SPAN class=variable-name>ex</SPAN>) {
            <SPAN class=keyword>assert</SPAN> false : ex;
        }
        <SPAN class=keyword>assert</SPAN> <SPAN class=variable-name>DEFAULT</SPAN> != <SPAN class=keyword>null</SPAN> : "The DEFAULT field must be initialized";
    }

    <SPAN class=comment>/** Accessor to constructor */</SPAN>
    <SPAN class=keyword>public</SPAN> <SPAN class=keyword>abstract</SPAN> <SPAN class=type>Item</SPAN> <SPAN class=function-name>newItem</SPAN>(<SPAN class=type>int</SPAN> <SPAN class=variable-name>value</SPAN>);
    <SPAN class=comment>/** Accessor to listener */</SPAN>
    <SPAN class=keyword>public</SPAN> <SPAN class=keyword>abstract</SPAN> <SPAN class=type>void</SPAN> <SPAN class=function-name>addListener</SPAN>(<SPAN class=type>Item</SPAN> <SPAN class=variable-name>item</SPAN>, <SPAN class=type>Listener</SPAN> <SPAN class=variable-name>l</SPAN>);
}
</PRE>with abstract methods to access all <Q>friend</Q> functionality of the <CODE>Item</CODE> class and with a static field to get the accessor's instance. The main trick is to implement the <CODE>Accessor</CODE> by a (non-public) class in the <CODE>api</CODE> package: <PRE><SPAN class=keyword>final</SPAN> <SPAN class=keyword>class</SPAN> <SPAN class=type>api</SPAN>.AccessorImpl <SPAN class=keyword>extends</SPAN> <SPAN class=type>impl.Accessor</SPAN> {
    <SPAN class=keyword>public</SPAN> <SPAN class=type>Item</SPAN> <SPAN class=function-name>newItem</SPAN>(<SPAN class=type>int</SPAN> <SPAN class=variable-name>value</SPAN>) {
        <SPAN class=keyword>return</SPAN> <SPAN class=keyword>new</SPAN> <SPAN class=type>Item</SPAN>(value);
    }
    <SPAN class=keyword>public</SPAN> <SPAN class=type>void</SPAN> <SPAN class=function-name>addListener</SPAN>(<SPAN class=type>Item</SPAN> <SPAN class=variable-name>item</SPAN>, <SPAN class=type>Listener</SPAN> <SPAN class=variable-name>l</SPAN>) {
        <SPAN class=keyword>return</SPAN> item.addListener(l);
    }
}
</PRE>and register it as the default instance first time somebody touches <CODE>api.Item</CODE> by adding a static initializer to the <CODE>Item</CODE> class: <PRE><SPAN class=keyword>public</SPAN> <SPAN class=keyword>final</SPAN> <SPAN class=keyword>class</SPAN> <SPAN class=type>Item</SPAN> {
    <SPAN class=keyword>static</SPAN> {
        impl.Accessor.DEFAULT = <SPAN class=keyword>new</SPAN> <SPAN class=type>api.AccessorImpl</SPAN>();
    }

    <SPAN class=comment>// the rest of the Item class as shown above
</SPAN>}
</PRE>Then the <EM>friend</EM> code can use the accessor to invoke the hidden functionality from any package: <PRE><SPAN class=type>api.Item</SPAN> <SPAN class=variable-name>item</SPAN> = impl.Accessor.DEFAULT.newItem(10);
impl.Accessor.DEFAULT.addListener(item, <SPAN class=keyword>this</SPAN>);</PRE><img src ="http://www.blogjava.net/Andyluo/aggbug/26787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-01-05 21:01 <a href="http://www.blogjava.net/Andyluo/archive/2006/01/05/26787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WEB中基于XMLHTTP的简单实例分析(转载)</title><link>http://www.blogjava.net/Andyluo/archive/2006/01/03/26462.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Tue, 03 Jan 2006 10:59:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/01/03/26462.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/26462.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/01/03/26462.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/26462.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/26462.html</trackback:ping><description><![CDATA[<TABLE class=zhi14 style="WIDTH: 620px; HEIGHT: 38px" height=38 cellSpacing=0 cellPadding=0 width=620 align=center border=0>
<TBODY>
<TR>
<TD width=648 height=20>转自：<A href="http://blog.csdn.net/3cts/archive/2005/12/30/566079.aspx">http://blog.csdn.net/3cts/archive/2005/12/30/566079.aspx</A><BR><BR>　　<B>引言</B><BR>　　<BR>　　大家都知道可以通过post或者get获得form表单的数据，那么我们如何实现不刷新的提交直接获得页面上的数据呢？这就要借助xmlhttp协议了。xmlhttp是xmldom技术的一部分。<BR>　　<BR>　　下面的代码就是一个很简单的例子，我们利用xmlhttp技术实现简单的用户登陆。<BR>　　<BR>　　<B>开始</B><BR>　　<BR>　　1.简单的登录页面<BR>　　<BR>　　login.jsp<BR>　　function toServer(){<BR>　　var xml = "&lt;root&gt;"+<BR>　　"&lt;name&gt;"+document.all('name').value+"&lt;/name&gt;"+<BR>　　"&lt;pwd&gt;"+document.all('pwd').value+"&lt;/pwd&gt;"+<BR>　　"&lt;/root&gt;";<BR>　　<BR>　　var XMLSender = new ActiveXObject("Microsoft.XMLHTTP" );<BR>　　XMLSender.Open("POST",'do_login.jsp',false);<BR>　　XMLSender.send((xml));<BR>　　alert(XMLSender.responseText);　//可处理后台返回的结果<BR>　　}<BR>　　<BR>　　姓名：&lt;input type="text" id="name" /&gt;&lt;br&gt;<BR>　　密码：&lt;input type="text" id="pwd" /&gt;&lt;br&gt;<BR>　　&lt;input type="button" value="登录" onclick="toServer()"&gt;<BR>　　<BR>　　2.后台的登录处理页面<BR>　　do_login.jsp<BR>　　<BR>　　&lt;%<BR>　　//读取XMLHTTP流<BR>　　java.io.BufferedReader br =　request.getReader();<BR>　　String str = "";<BR>　　while (str != null) {<BR>　　str = br.readLine();<BR>　　process (str); //可通过任何语言实现解析XML，进行业务处理<BR>　　}<BR>　　<BR>　　//返回信息<BR>　　javax.servlet.ServletOutputStream sos = response.getOutputStream();<BR>　　sos.print("login success" );<BR>　　sos.close();<BR>　　%&gt;<BR>　　与传统的“提交－回发－重绘”式的web系统基本运行结构不同，我们可以通过通过XMLHTTP实现无刷新的客户端直接与服务器交互，极大的提高用户的感受度。<BR>　　<BR>　　<B>查考资料</B><BR>　　<BR>　　XMLHTTP方法：<BR>　　<BR>　　Open bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword<BR>　　bstrMethod：数据传送方式，即GET或POST。<BR>　　bstrUrl：服务网页的URL。<BR>　　varAsync：是否同步执行。缺省为True，即同步执行，但只能在DOM中实施同步执行。<BR>　　应用中一般将其置为False，即异步执行。<BR>　　bstrUser：用户名，可省略。<BR>　　bstrPassword：用户口令，可省略。<BR>　　<BR>　　Send varBody<BR>　　varBody：指令集。可以是XML格式数据，也可以是字符串，流，或者一个无符号整数数组。也可以省略，让指令通过Open方法的URL参数代入。<BR>　　<BR>　　setRequestHeader bstrHeader, bstrValue<BR>　　bstrHeader：HTTP 头(header)<BR>　　bstrValue：HTTP 头(header)的值<BR>　　如果Open方法定义为POST，可以定义表单方式上传：<BR>　　xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"<BR>　　<BR>　　XMLHTTP属性：<BR>　　<BR>　　onreadystatechange：在同步执行方式下获得返回结果的事件句柄。只能在DOM中调用。<BR>　　responseBody：结果返回为无符号整数数组。<BR>　　responseStream：结果返回为IStream流。<BR>　　responseText ：结果返回为字符串。<BR>　　responseXML：结果返回为XML格式数据。</TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/Andyluo/aggbug/26462.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-01-03 18:59 <a href="http://www.blogjava.net/Andyluo/archive/2006/01/03/26462.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>The AJAX Year In Review (转载)</title><link>http://www.blogjava.net/Andyluo/archive/2006/01/03/26426.html</link><dc:creator>罗明</dc:creator><author>罗明</author><pubDate>Tue, 03 Jan 2006 03:42:00 GMT</pubDate><guid>http://www.blogjava.net/Andyluo/archive/2006/01/03/26426.html</guid><wfw:comment>http://www.blogjava.net/Andyluo/comments/26426.html</wfw:comment><comments>http://www.blogjava.net/Andyluo/archive/2006/01/03/26426.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Andyluo/comments/commentRss/26426.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Andyluo/services/trackbacks/26426.html</trackback:ping><description><![CDATA[<FONT face=Georgia size=2>
<DIV class=writtenby>By: <A href="http://au.sys-con.com/author/5664hinchcliffe.htm"><FONT color=#002c99>Dion Hinchcliffe</FONT></A></DIV>
<DIV class=storydatetime>Dec. 31, 2005 01:30 AM<BR><A href="http://au.sys-con.com/read/166995.htm">http://au.sys-con.com/read/166995.htm</A><BR><BR>Ajax has been the <EM>other </EM>big software story of 2005, along with </FONT><A href="http://web2.wsj2.com/review_of_the_years_best_web_20_explanations.htm"><FONT face=Georgia size=2>Web 2.0</FONT></A><FONT face=Georgia size=2>.&nbsp; An optional ingredient to Web 2.0 software, Ajax has changed the perception of Web-based software as being horribly <EM>clunky</EM>, <EM>page-oriented</EM>, and <EM>boring</EM> when compared to native computer applications.&nbsp; Ajax describes a set of techniques that makes Web software <EM>quite the opposite</EM>.&nbsp; A quick visit to </FONT><A href="http://maps.google.com/"><FONT face=Georgia size=2>Google Maps</FONT></A><FONT face=Georgia size=2> and its live scrollable map tiles or </FONT><A href="http://netvibes.com/"><FONT face=Georgia size=2>NetVibes</FONT></A><FONT face=Georgia size=2> and its drag-and-drop reorganization of your personal data both show how potent and compelling Ajax techniques really are.<BR><BR>I originally covered the current state of Ajax back in August in a </FONT><A href="http://hinchcliffe.org/archive/2005/08/18/1675.aspx"><FONT face=Georgia size=2>widely linked article</FONT></A><FONT face=Georgia><FONT size=2>.&nbsp; It still provides a good summary of the history, benefits, and pitfalls of Ajax but it's amazing what has happened since then.&nbsp; It's also interesting to see what issue haven't been resolved.&nbsp; Though Ajax isn't a technology, it's strictly constrained by the technologies that it uses to describe how to weave <EM>visually arresting</EM>, <EM>highly intereactive</EM>, <EM>web service-based</EM> applications that can be <EM>loaded into any browser with a single URL</EM>, all without installing any software.&nbsp; But some challenges continue to remain but are decreasing in concern.<BR><BR>The term and world-wide attention behind Ajax is not even a year old, but you can find a wide range of poweful tools either with newly added support for Ajax or created just to support the Ajax way of life.&nbsp; In addition, many of the constaints and problems with Ajax have been <EM>resolved </EM>or <EM>greatly reduced</EM>.&nbsp; But keeping track of all these developments is very difficult, so I've compiled a summary here of the major advances in Ajax so far this year.&nbsp; <BR><BR>I hope you enjoy.&nbsp; And as always, please add your own at the bottom for all to benefit...<BR><BR></FONT><FONT color=#0000ff><STRONG><FONT size=5>Improved Ajax Techniques</FONT></STRONG></FONT><BR><BR></FONT></DIV>
<UL><BR>
<LI><A href="http://www.contentwithstyle.co.uk/Articles/38/fixing-the-back-button-and-enabling-bookmarking-for-ajax-apps">Content with Style: Fixing the Back Button and Enabling Bookmarking for AJAX Apps</A> - Mike Stenhouse explains how to fix two of the more distracting problems with Ajax. These can be particularly problematic for users new to Ajax applications.&nbsp; Since Ajax apps typically load into a single web page, it makes pressing the Back button meaningless or actually harmful.&nbsp; And this breaks the browser usage model annoyingly.&nbsp; Also, individual views of data in an Ajax application cannot have a URL or permalinks unless precautions are taken.&nbsp; Mike does a great job covering how to reduce these problems.<BR>
<LI><A href="http://codinginparadise.org/weblog/2005/08/ajax-tutorial-saving-session-across.html">Saving Session Across Page Loads Without Cookies, On The Client Side</A> - Ajax virtuoso Brad Neuberg strikes again with a detailed explanation of how to deal with saving session information across page loads without relying on cookies.&nbsp; This is important in larger applications which typically want to store more information than a cookie can hold.&nbsp; Brad also has some terrific tools to deal with this as well (see AMASS below)<BR>
<LI><A href="http://www-128.ibm.com/developerworks/web/library/ws-wsajax/?ca=dgr-lnxw071SOAP-Ajax">Call SOAP Web services with AJAX</A> - By design, Ajax is a voracious consumer of web services like XML/HTTP, REST, and SOAP.&nbsp; A great article at IBM's DeveloperWorks describes how to easily call SOAP web services from Ajax.&nbsp; This is important because SOAP is a complex protocol that requires some familiarity to use.&nbsp; While Ajax development tools like Atlas, General Interface, and <A href="http://bindows.net/">Bindows</A> will solve this by providing a SOAP stack, for many, hand development of back-end SOAP request is the only option right now to achieve interoperability with WS-I Basic Profile web services.<BR>
<LI><A href="http://zingzoom.com/ajax/ajax_with_image.php">Ajax using only an image</A> - Browsers and networks continue to get more secure and many configurations will not allow an Ajax application to use web services, and almost none of them will allow you to access a server other than the one the Ajax app loaded from.&nbsp; Enter an elegant technique to solve this by using image URLs.&nbsp; Not for the faint of heart, and certainly a possible security hole but a compelling solution nonetheless.<BR></LI></UL><BR><FONT face=Georgia size=2><FONT color=#0000ff><STRONG><FONT size=5>Ajax Tools and Libraries</FONT></STRONG></FONT></FONT><BR><BR>
<UL><BR>
<LI><A href="http://www.tibco.com/software/business_optimization/generalinterface.jsp">TIBCO's General Interface</A> - I've not used this Ajax development environment extensively yet but it apparently eats its own dog food and runs entirely inside a browser (which apparently must be Internet Explorer).&nbsp; Supposedly containing an entire SOAP stack, a full-blown IDE, and numerous libraries, General Interface is one of the leading solutions in this space and can be downloaded and used today.&nbsp; TIBCO cautions you not to use it for production apps yet, but my initial use was encouraging.<BR>
<LI><A href="http://asp.net/default.aspx?tabindex=9&amp;tabid=47">Microsoft Atlas</A> - A serious contender in the Ajax IDE space (details <A href="http://hinchcliffe.org/archive/2005/09/18/2192.aspx">here</A>), Microsoft is planning for Atlas to be a heavy-duty, enterprise scale Ajax solution.&nbsp; Integrated into Visual Studio 2005, Atlas is just a code name but expect that it will be a leading Ajax player from the get go and will live up to its name.<BR>
<LI><A href="http://dojotoolkit.org/">Dojo</A> - Still in early release, the open source Ajax library, Dojo, is getting lots of attention from folks in the know.&nbsp; Dojo is billed as a "<EM>powerful, portable, lightweight, and tested tools for constructing dynamic interfaces. Dojo lets you prototype interactive widgets quickly, animate transitions, and build Ajax requests with the most powerful and easiest to use abstractions available.</EM>"&nbsp; I haven't used it yet, but you can bet I will be soon.<BR>
<LI><A href="http://script.aculo.us/">Script.aculo.us</A> - One of the very best Ajax visual effects libraries that I've used is the eponymous script.aculo.us.&nbsp; Advertised as "Web 2.0 JavaScript", script.aculo.us has numerous effects and convenience tools, all built on nice, tight object-oriented abstractions.&nbsp; I've used it and I can recommend it for its simplicity and reliability.<BR>
<LI><A href="http://bindows.net/">Bindows</A> - Mind-blowing Ajax library for recreating the full richness of native applications, and includes a SOAP stack.<BR>
<LI><A href="http://codinginparadise.org/projects/storage/README.html">AMASS</A> - Ajax gets good client-side storage.&nbsp; A brilliant piece of work by Brad Neuberg, check out a description of how AMASS works <A href="http://ajaxdevelopersjournal.com/read/166553.htm">here</A>.<BR>
<LI><A href="http://trimpath.com/project/wiki/TrimQuery">TrimQuery </A>- A robust JavaScript database for Ajax.&nbsp; When <A href="http://ajaxdevelopersjournal.com/read/148113.htm">combined</A> with AMASS above, neat things can really happen.<BR><BR>
<DIV align=center><A href="http://rubyonrails.org/"><IMG alt="Ruby on Rails" src="http://hinchcliffe.org/img/rails.png"></A></DIV><BR><BR>
<LI><A href="http://www.rubyonrails.org/">Ruby on Rails</A> - Should probably be listed first, not down here.&nbsp; The best lightweight, server-side Ajax framework out there today.&nbsp; Note that Ajax pioneers and Web 2.0 leaders <A href="http://37signals.com/">37Signals </A>sponsor this site and RoR is used by a great many successful Web 2.0 sites.<BR><BR>
<LI><A href="http://today.java.net/pub/a/today/2005/12/13/log4ajax.html">Log4Ajax</A> - Many serious developers wouldn't switch to a new programming model without a Log4J equivalent and here it is.&nbsp; Both traditional console as well as advanced logging support for Ajax is here today.&nbsp; SourceForge site <A href="http://log4ajax.sourceforge.net/project-info.html">here</A>.<BR>
<LI><A href="http://www.backbase.com/">Backbase</A> - This IDE is getting good reviews but it apparently uses an abstraction layer like <A href="http://www.morfik.com/">Morfik</A>.&nbsp; I haven't used it yet but I keep hearing about it.<BR>
<LI><A href="http://www.modernmethod.com/sajax/">Sajax </A>- A good competent server-side framework featuring support for most common back-end languages like Perl, Python, Ruby and much more.<BR></LI></UL><BR><STRONG>Note</STRONG>: The most complete Ajax framework listing I've seen available is <A href="http://ajaxpatterns.org/wiki/index.php?title=AJAXFrameworks">here</A>.<BR><BR><FONT face=Georgia size=2><FONT color=#0000ff><STRONG><FONT size=5>Ajax News and Resources</FONT></STRONG></FONT></FONT><BR><BR><A href="http://ajaxdevelopersjournal.com/"><IMG alt="Ajax Developer's Journal" src="http://hinchcliffe.org/img/adj.jpg"></A><BR>
<UL><BR>
<LI>The <A href="http://ajaxdevelopersjournal.com/">Ajax Developer's Journal</A> - Good sources of news for Ajax are still pretty scarce but that's starting to change in a <EM>big</EM> way.&nbsp; SYS-CON has recently launched their Ajax Developer's Journal and has been working closely with Jesse James Garrett, who coined the term.&nbsp; Expect lots of interesting and topical new articles and coverage on a regular basis.<BR>
<LI><A href="http://ajaxian.com/">Ajaxian </A>- Dion Almaer and Ben Galbraith have been working on Ajaxian for a while now and it remains one of the very best sources for the latest Ajax news, tools, events, and general inspiration.<BR></LI></UL><BR><FONT face=Georgia size=2><FONT color=#0000ff><FONT size=5><STRONG>Critiques and Analysis of Ajax</STRONG></FONT></FONT></FONT><BR><BR>
<UL><BR>
<LI><A href="http://sourcelabs.com/ajb/archives/2005/05/ajax_mistakes.html">Ajax Mistakes</A> - This is Alex Bosworth's terrific analysis of the early problems with Ajax.&nbsp; He a big believer in the technology and his Ajax-powered <A href="http://sandbox.sourcelabs.com/livemarks/">LiveMarks</A> site is one of my absolute favorites.&nbsp; A good place to start to understand some of the challenges with Ajax.<BR>
<LI><A href="http://www.xml.com/pub/a/2005/11/09/fixing-ajax-xmlhttprequest-considered-harmful.html">Fixing Ajax: XmlHttpRequest Considered Harmful</A> - Some good coverage of why Ajax doesn't really enable the use of the services of other web sites without a lot of work.&nbsp; This is a big barrier to leveraging Web 2.0's <A href="http://webservices.sys-con.com/read/164532.htm">global services landscape</A>.&nbsp; This can be solved a number of ways however and the options are explored here.&nbsp; The image URL solution a few paragraphs above is missing but otherwise this is an excellent summary.<BR><BR>
<DIV align=center><IMG alt="Ajax Network Constraints" src="http://hinchcliffe.org/img/ajaxnetworkconstraints.jpg"></DIV><BR><BR>
<LI><A href="http://www.sourcelabs.com/blogs/ajb/2005/12/10_places_you_must_use_ajax.html">10 Places You Must Use Ajax</A> - Alex is back and carefully enumerates the good places to use Ajax.&nbsp; He also covers when to avoid it.&nbsp; Excellent material for those learning how to design with Ajax.<BR>
<LI><A href="http://www.developer.com/design/article.php/3567706">Top 10 Reasons Ajax Is Here To Stay</A> - Andre Charland nails it.&nbsp; Though some folks dislike Ajax for a variety of reasons, here are some terrific positive motivations for using it today.<BR></LI></UL><BR>
<DIV align=center><FONT face=Georgia size=4>And don't forget to see what can be done with Ajax!&nbsp; <A href="http://web2.wsj2.com/the_best_web_20_software_of_2005.htm">Check out</A> these great new Ajax-enabled applications here.</FONT></DIV>
<P><EM>posted Friday, 30 December 2005</EM></P>
<DIV class=storyfooter>Published Dec. 31, 2005 — Reads 1,107 <BR>Copyright © 2006 SYS-CON Media. All Rights Reserved.</DIV><img src ="http://www.blogjava.net/Andyluo/aggbug/26426.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Andyluo/" target="_blank">罗明</a> 2006-01-03 11:42 <a href="http://www.blogjava.net/Andyluo/archive/2006/01/03/26426.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>