﻿<?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/xiaoyi/category/34076.html</link><description>阳光总在风雨后,让我们在雨中毅然前行,收获每一份喜悦的欢笑o(∩_∩)o...</description><language>zh-cn</language><lastBuildDate>Fri, 20 Sep 2013 03:06:25 GMT</lastBuildDate><pubDate>Fri, 20 Sep 2013 03:06:25 GMT</pubDate><ttl>60</ttl><item><title>重写 FastJson 属性过滤器 </title><link>http://www.blogjava.net/xiaoyi/articles/404150.html</link><dc:creator>可爱的小毅</dc:creator><author>可爱的小毅</author><pubDate>Mon, 16 Sep 2013 14:36:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoyi/articles/404150.html</guid><wfw:comment>http://www.blogjava.net/xiaoyi/comments/404150.html</wfw:comment><comments>http://www.blogjava.net/xiaoyi/articles/404150.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoyi/comments/commentRss/404150.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoyi/services/trackbacks/404150.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Fastjson介绍 文章导读 [隐藏]1 Fastjson介绍 2 简介2.0.1 高性能2.0.2 支持标准2.0.3 功能强大2.0.4 无依赖2.0.5 支持范围广2.0.6 开源2.0.7 测试充分2.0.8 下载 简介Fastjson是一个Java语言编写的高性能功能完善的JSON库。由阿里巴巴高性能fastjson采用独创的算法，将parse的速度提升到极致，超过所有json库，包括...&nbsp;&nbsp;<a href='http://www.blogjava.net/xiaoyi/articles/404150.html'>阅读全文</a><img src ="http://www.blogjava.net/xiaoyi/aggbug/404150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoyi/" target="_blank">可爱的小毅</a> 2013-09-16 22:36 <a href="http://www.blogjava.net/xiaoyi/articles/404150.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小毅收藏之------Java式实现JS的Escape以及Unescape</title><link>http://www.blogjava.net/xiaoyi/articles/298203.html</link><dc:creator>可爱的小毅</dc:creator><author>可爱的小毅</author><pubDate>Wed, 14 Oct 2009 06:04:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoyi/articles/298203.html</guid><wfw:comment>http://www.blogjava.net/xiaoyi/comments/298203.html</wfw:comment><comments>http://www.blogjava.net/xiaoyi/articles/298203.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoyi/comments/commentRss/298203.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoyi/services/trackbacks/298203.html</trackback:ping><description><![CDATA[<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 id="Codehighlighter1_28_1631_Open_Image" onclick="this.style.display='none'; Codehighlighter1_28_1631_Open_Text.style.display='none'; Codehighlighter1_28_1631_Closed_Image.style.display='inline'; Codehighlighter1_28_1631_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_28_1631_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_28_1631_Closed_Text.style.display='none'; Codehighlighter1_28_1631_Open_Image.style.display='inline'; Codehighlighter1_28_1631_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;EscapeUnescape&nbsp;</span><span id="Codehighlighter1_28_1631_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"  alt="" /></span><span id="Codehighlighter1_28_1631_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_72_577_Open_Image" onclick="this.style.display='none'; Codehighlighter1_72_577_Open_Text.style.display='none'; Codehighlighter1_72_577_Closed_Image.style.display='inline'; Codehighlighter1_72_577_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_72_577_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_72_577_Closed_Text.style.display='none'; Codehighlighter1_72_577_Open_Image.style.display='inline'; Codehighlighter1_72_577_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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;String&nbsp;escape(String&nbsp;src)&nbsp;</span><span id="Codehighlighter1_72_577_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"  alt="" /></span><span id="Codehighlighter1_72_577_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;j;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;tmp&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 />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.ensureCapacity(src.length()&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">6</span><span style="color: #000000">);<br />
<img id="Codehighlighter1_211_549_Open_Image" onclick="this.style.display='none'; Codehighlighter1_211_549_Open_Text.style.display='none'; Codehighlighter1_211_549_Closed_Image.style.display='inline'; Codehighlighter1_211_549_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_211_549_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_211_549_Closed_Text.style.display='none'; Codehighlighter1_211_549_Open_Image.style.display='inline'; Codehighlighter1_211_549_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;src.length();&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_211_549_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"  alt="" /></span><span id="Codehighlighter1_211_549_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;src.charAt(i);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(Character.isDigit(j)&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;Character.isLowerCase(j)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;Character.isUpperCase(j))<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.append(j);<br />
<img id="Codehighlighter1_365_470_Open_Image" onclick="this.style.display='none'; Codehighlighter1_365_470_Open_Text.style.display='none'; Codehighlighter1_365_470_Closed_Image.style.display='inline'; Codehighlighter1_365_470_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_365_470_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_365_470_Closed_Text.style.display='none'; Codehighlighter1_365_470_Open_Image.style.display='inline'; Codehighlighter1_365_470_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(j&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">256</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_365_470_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"  alt="" /></span><span id="Codehighlighter1_365_470_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.append(</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"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(j&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">16</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.append(</span><span style="color: #000000">"</span><span style="color: #000000">0</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.append(Integer.toString(j,&nbsp;</span><span style="color: #000000">16</span><span style="color: #000000">));<br />
<img id="Codehighlighter1_477_545_Open_Image" onclick="this.style.display='none'; Codehighlighter1_477_545_Open_Text.style.display='none'; Codehighlighter1_477_545_Closed_Image.style.display='inline'; Codehighlighter1_477_545_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_477_545_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_477_545_Closed_Text.style.display='none'; Codehighlighter1_477_545_Open_Image.style.display='inline'; Codehighlighter1_477_545_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_477_545_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"  alt="" /></span><span id="Codehighlighter1_477_545_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.append(</span><span style="color: #000000">"</span><span style="color: #000000">%u</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.append(Integer.toString(j,&nbsp;</span><span style="color: #000000">16</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;tmp.toString();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_623_1367_Open_Image" onclick="this.style.display='none'; Codehighlighter1_623_1367_Open_Text.style.display='none'; Codehighlighter1_623_1367_Closed_Image.style.display='inline'; Codehighlighter1_623_1367_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_623_1367_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_623_1367_Closed_Text.style.display='none'; Codehighlighter1_623_1367_Open_Image.style.display='inline'; Codehighlighter1_623_1367_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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;String&nbsp;unescape(String&nbsp;src)&nbsp;</span><span id="Codehighlighter1_623_1367_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"  alt="" /></span><span id="Codehighlighter1_623_1367_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;tmp&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 />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.ensureCapacity(src.length());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;lastPos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;pos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;ch;<br />
<img id="Codehighlighter1_774_1339_Open_Image" onclick="this.style.display='none'; Codehighlighter1_774_1339_Open_Text.style.display='none'; Codehighlighter1_774_1339_Closed_Image.style.display='inline'; Codehighlighter1_774_1339_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_774_1339_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_774_1339_Closed_Text.style.display='none'; Codehighlighter1_774_1339_Open_Image.style.display='inline'; Codehighlighter1_774_1339_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(lastPos&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;src.length())&nbsp;</span><span id="Codehighlighter1_774_1339_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"  alt="" /></span><span id="Codehighlighter1_774_1339_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;src.indexOf(</span><span style="color: #000000">"</span><span style="color: #000000">%</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;lastPos);<br />
<img id="Codehighlighter1_835_1147_Open_Image" onclick="this.style.display='none'; Codehighlighter1_835_1147_Open_Text.style.display='none'; Codehighlighter1_835_1147_Closed_Image.style.display='inline'; Codehighlighter1_835_1147_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_835_1147_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_835_1147_Closed_Text.style.display='none'; Codehighlighter1_835_1147_Open_Image.style.display='inline'; Codehighlighter1_835_1147_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(pos&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;lastPos)&nbsp;</span><span id="Codehighlighter1_835_1147_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"  alt="" /></span><span id="Codehighlighter1_835_1147_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_873_1004_Open_Image" onclick="this.style.display='none'; Codehighlighter1_873_1004_Open_Text.style.display='none'; Codehighlighter1_873_1004_Closed_Image.style.display='inline'; Codehighlighter1_873_1004_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_873_1004_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_873_1004_Closed_Text.style.display='none'; Codehighlighter1_873_1004_Open_Image.style.display='inline'; Codehighlighter1_873_1004_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(src.charAt(pos&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">u</span><span style="color: #000000">'</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_873_1004_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"  alt="" /></span><span id="Codehighlighter1_873_1004_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ch&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">char</span><span style="color: #000000">)&nbsp;Integer.parseInt(src<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.substring(pos&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">,&nbsp;pos&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">6</span><span style="color: #000000">),&nbsp;</span><span style="color: #000000">16</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.append(ch);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastPos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pos&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">6</span><span style="color: #000000">;<br />
<img id="Codehighlighter1_1011_1142_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1011_1142_Open_Text.style.display='none'; Codehighlighter1_1011_1142_Closed_Image.style.display='inline'; Codehighlighter1_1011_1142_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1011_1142_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1011_1142_Closed_Text.style.display='none'; Codehighlighter1_1011_1142_Open_Image.style.display='inline'; Codehighlighter1_1011_1142_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_1011_1142_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"  alt="" /></span><span id="Codehighlighter1_1011_1142_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ch&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">char</span><span style="color: #000000">)&nbsp;Integer.parseInt(src<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.substring(pos&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;pos&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">3</span><span style="color: #000000">),&nbsp;</span><span style="color: #000000">16</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.append(ch);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastPos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pos&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">3</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1154_1335_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1154_1335_Open_Text.style.display='none'; Codehighlighter1_1154_1335_Closed_Image.style.display='inline'; Codehighlighter1_1154_1335_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1154_1335_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1154_1335_Closed_Text.style.display='none'; Codehighlighter1_1154_1335_Open_Image.style.display='inline'; Codehighlighter1_1154_1335_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_1154_1335_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"  alt="" /></span><span id="Codehighlighter1_1154_1335_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_1175_1251_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1175_1251_Open_Text.style.display='none'; Codehighlighter1_1175_1251_Closed_Image.style.display='inline'; Codehighlighter1_1175_1251_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1175_1251_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1175_1251_Closed_Text.style.display='none'; Codehighlighter1_1175_1251_Open_Image.style.display='inline'; Codehighlighter1_1175_1251_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(pos&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">)&nbsp;</span><span id="Codehighlighter1_1175_1251_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"  alt="" /></span><span id="Codehighlighter1_1175_1251_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.append(src.substring(lastPos));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastPos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;src.length();<br />
<img id="Codehighlighter1_1258_1330_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1258_1330_Open_Text.style.display='none'; Codehighlighter1_1258_1330_Closed_Image.style.display='inline'; Codehighlighter1_1258_1330_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1258_1330_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1258_1330_Closed_Text.style.display='none'; Codehighlighter1_1258_1330_Open_Image.style.display='inline'; Codehighlighter1_1258_1330_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_1258_1330_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"  alt="" /></span><span id="Codehighlighter1_1258_1330_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.append(src.substring(lastPos,&nbsp;pos));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastPos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pos;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;tmp.toString();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_1410_1629_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1410_1629_Open_Text.style.display='none'; Codehighlighter1_1410_1629_Closed_Image.style.display='inline'; Codehighlighter1_1410_1629_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1410_1629_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1410_1629_Closed_Text.style.display='none'; Codehighlighter1_1410_1629_Open_Image.style.display='inline'; Codehighlighter1_1410_1629_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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 id="Codehighlighter1_1410_1629_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"  alt="" /></span><span id="Codehighlighter1_1410_1629_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;tmp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</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"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">testing&nbsp;escape&nbsp;:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;tmp);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;escape(tmp);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(tmp);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">testing&nbsp;unescape&nbsp;:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;tmp);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(unescape(</span><span style="color: #000000">"</span><span style="color: #000000">%u6211%u4eec</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
以上为一个工具类，为解决中文乱码<br />
html前台:escape(escape('你好'))<br />
后台:String txt=EscapeUnescape.unescape(aStringText);&nbsp; <br />
<br />
escape本身参数编码为ISO8859-1,escape中文传替给servlet会直接为null接收不到，经过以上特殊处理即可解决!其他方法也可，如：手动转码...
<img src ="http://www.blogjava.net/xiaoyi/aggbug/298203.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoyi/" target="_blank">可爱的小毅</a> 2009-10-14 14:04 <a href="http://www.blogjava.net/xiaoyi/articles/298203.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小毅收藏之------日期类的加减及java中所以日期类的操作算法大全 </title><link>http://www.blogjava.net/xiaoyi/articles/295044.html</link><dc:creator>可爱的小毅</dc:creator><author>可爱的小毅</author><pubDate>Mon, 14 Sep 2009 09:56:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoyi/articles/295044.html</guid><wfw:comment>http://www.blogjava.net/xiaoyi/comments/295044.html</wfw:comment><comments>http://www.blogjava.net/xiaoyi/articles/295044.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoyi/comments/commentRss/295044.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoyi/services/trackbacks/295044.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.计算某一月份的最大天数&nbsp;1Calendar&nbsp;time=Calendar.getInstance();2time.clear();3time.set(Calendar.YEAR,year);&nbsp;//year&nbsp;为&nbsp;int&nbsp;4time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为...&nbsp;&nbsp;<a href='http://www.blogjava.net/xiaoyi/articles/295044.html'>阅读全文</a><img src ="http://www.blogjava.net/xiaoyi/aggbug/295044.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoyi/" target="_blank">可爱的小毅</a> 2009-09-14 17:56 <a href="http://www.blogjava.net/xiaoyi/articles/295044.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小毅收藏之------在C#中调用Java代码 </title><link>http://www.blogjava.net/xiaoyi/articles/281921.html</link><dc:creator>可爱的小毅</dc:creator><author>可爱的小毅</author><pubDate>Fri, 12 Jun 2009 14:31:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoyi/articles/281921.html</guid><wfw:comment>http://www.blogjava.net/xiaoyi/comments/281921.html</wfw:comment><comments>http://www.blogjava.net/xiaoyi/articles/281921.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoyi/comments/commentRss/281921.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoyi/services/trackbacks/281921.html</trackback:ping><description><![CDATA[<div class="postTitle"><a class="postTitle2" id="viewpost1_TitleUrl" href="http://www.blogjava.net/goooowei/archive/2009/06/12/281912.html">在C#中调用Java代码</a> </div>
<ol>
    <li>到<a href="http://www.ikvm.net/download.html" target="_blank">IKVM官方网站</a>下载IKVM需要的组件
    <li style="list-style-type: none">
    <ol>
        <li>ikvm-0.40.0.1.zip
        <li>ikvmbin-0.40.0.1.zip
        <li>openjdk6-b12-stripped.zip </li>
    </ol>
    <li>解压ikvm-0.40.0.1.zip,并将%IKVM_HOME%\bin添加到path中。此处的%IKVM_HOME%是指解压后ikvm的主目录。
    <li>到<a href="http://packages.debian.org/squeeze/all/ikvm/download" target="_blank">Debian IKVM</a>下载<u>IKVM.OpenJDK.ClassLibrary.dll</u>。
    <li style="list-style-type: none">
    <ol>
        <li>或者到<a href="http://www.rayfile.com/files/db9f0bd7-5437-11de-83c6-0019d11a795f/" target="_blank">rayfile</a>去下载data.tar.gz。这个文件可以直接用winrar解压。
        <li>你需要下载一个简单的工具<a href="http://download.csdn.net/source/508193" target="_blank">undeb</a>去解压.deb文件。
        <li style="list-style-type: none">
        <ol>
            <li>也可以到<a href="http://www.rayfile.com/files/df049b40-5439-11de-a1fe-0019d11a795f/" target="_blank">rayfile</a>下载 </li>
        </ol>
        </li>
    </ol>
    <li>解压ikvm_0.38.0.2+dfsg-2_all.deb文件。
    <li>新建一个Java文件
    <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 alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" lcevt="1" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.helloikvm.simple;<br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" lcevt="1" /><br />
    <img id="Codehighlighter1_63_248_Open_Image" onclick="this.style.display='none'; Codehighlighter1_63_248_Open_Text.style.display='none'; Codehighlighter1_63_248_Closed_Image.style.display='inline'; Codehighlighter1_63_248_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" lcevt="1" /><img id="Codehighlighter1_63_248_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_63_248_Closed_Text.style.display='none'; Codehighlighter1_63_248_Open_Image.style.display='inline'; Codehighlighter1_63_248_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top" lcevt="1" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SimpleReturnString&nbsp;</span><span id="Codehighlighter1_63_248_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 alt="" src="http://www.blogjava.net/Images/dot.gif" lcevt="1" /></span><span id="Codehighlighter1_63_248_Open_Text"><span style="color: #000000">{&nbsp;<br />
    <img id="Codehighlighter1_99_136_Open_Image" onclick="this.style.display='none'; Codehighlighter1_99_136_Open_Text.style.display='none'; Codehighlighter1_99_136_Closed_Image.style.display='inline'; Codehighlighter1_99_136_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" lcevt="1" /><img id="Codehighlighter1_99_136_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_99_136_Closed_Text.style.display='none'; Codehighlighter1_99_136_Open_Image.style.display='inline'; Codehighlighter1_99_136_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" lcevt="1" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;returnString()&nbsp;</span><span id="Codehighlighter1_99_136_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 alt="" src="http://www.blogjava.net/Images/dot.gif" lcevt="1" /></span><span id="Codehighlighter1_99_136_Open_Text"><span style="color: #000000">{<br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" lcevt="1" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Hello,&nbsp;IKVM!</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" lcevt="1" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" lcevt="1" /><br />
    <img id="Codehighlighter1_190_246_Open_Image" onclick="this.style.display='none'; Codehighlighter1_190_246_Open_Text.style.display='none'; Codehighlighter1_190_246_Closed_Image.style.display='inline'; Codehighlighter1_190_246_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" lcevt="1" /><img id="Codehighlighter1_190_246_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_190_246_Closed_Text.style.display='none'; Codehighlighter1_190_246_Open_Image.style.display='inline'; Codehighlighter1_190_246_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" lcevt="1" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;throwException()&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;</span><span id="Codehighlighter1_190_246_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 alt="" src="http://www.blogjava.net/Images/dot.gif" lcevt="1" /></span><span id="Codehighlighter1_190_246_Open_Text"><span style="color: #000000">{<br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" lcevt="1" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Exception(</span><span style="color: #000000">"</span><span style="color: #000000">Hello,&nbsp;Exception!</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" lcevt="1" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" lcevt="1" />}</span></span><span style="color: #000000">&nbsp;</span></div>
    <li>编译SimpleReturnString文件，然后将其打包成一个jar文件，例如IKVM.jar.
    <li>使用ikvmc -out:IKVM.dll IKVM.jar。你现在应该在IKVM的目录下面看到一个IKVM.dll文件。
    <li>新建一个C#.NET项目，首先添加一下必须的DLLs
    <li style="list-style-type: none">
    <ol>
        <li>%IKVM_HOME%\bin\IKVM.OpenJDK.Core.dll
        <li>%IKVM_HOME%\bin\IKVM.Runtime.dll
        <li>%IKVM_HOME%\bin\IKVM.Runtime.JNI.dll
        <li>IKVM.OpenJDK.ClassLibrary.dll[这的DLL在ikvm_0.38.0.2+dfsg-2_all.deb\usr\lib\cli文件夹中。或者也可在data.tar.gz中的usr\lib\cli中找到。参看第三步和第四步] </li>
    </ol>
    <li>添加第10步生成的IKVM.dll到C#.NET项目中，然后using %package_name%就可以实现对Java的调用。
    <li>编写C#代码
    <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 alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" lcevt="1" /><span style="color: #008000">//</span><span style="color: #008000">&nbsp;import&nbsp;java&nbsp;package&nbsp;</span><span style="color: #008000"><br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" lcevt="1" /></span><span style="color: #000000"><br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" lcevt="1" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;com.helloikvm.simple;&nbsp;<br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" lcevt="1" /><br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" lcevt="1" /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;IKVMTest<br />
    <img id="Codehighlighter1_74_530_Open_Image" onclick="this.style.display='none'; Codehighlighter1_74_530_Open_Text.style.display='none'; Codehighlighter1_74_530_Closed_Image.style.display='inline'; Codehighlighter1_74_530_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" lcevt="1" /><img id="Codehighlighter1_74_530_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_74_530_Closed_Text.style.display='none'; Codehighlighter1_74_530_Open_Image.style.display='inline'; Codehighlighter1_74_530_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top" lcevt="1" /></span><span id="Codehighlighter1_74_530_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 alt="" src="http://www.blogjava.net/Images/dot.gif" lcevt="1" /></span><span id="Codehighlighter1_74_530_Open_Text"><span style="color: #000000">{<br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" lcevt="1" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;partial&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Form1&nbsp;:&nbsp;Form<br />
    <img id="Codehighlighter1_118_528_Open_Image" onclick="this.style.display='none'; Codehighlighter1_118_528_Open_Text.style.display='none'; Codehighlighter1_118_528_Closed_Image.style.display='inline'; Codehighlighter1_118_528_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" lcevt="1" /><img id="Codehighlighter1_118_528_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_118_528_Closed_Text.style.display='none'; Codehighlighter1_118_528_Open_Image.style.display='inline'; Codehighlighter1_118_528_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" lcevt="1" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_118_528_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 alt="" src="http://www.blogjava.net/Images/dot.gif" lcevt="1" /></span><span id="Codehighlighter1_118_528_Open_Text"><span style="color: #000000">{<br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" lcevt="1" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Form1()<br />
    <img id="Codehighlighter1_151_196_Open_Image" onclick="this.style.display='none'; Codehighlighter1_151_196_Open_Text.style.display='none'; Codehighlighter1_151_196_Closed_Image.style.display='inline'; Codehighlighter1_151_196_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" lcevt="1" /><img id="Codehighlighter1_151_196_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_151_196_Closed_Text.style.display='none'; Codehighlighter1_151_196_Open_Image.style.display='inline'; Codehighlighter1_151_196_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" lcevt="1" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_151_196_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 alt="" src="http://www.blogjava.net/Images/dot.gif" lcevt="1" /></span><span id="Codehighlighter1_151_196_Open_Text"><span style="color: #000000">{<br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" lcevt="1" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent();<br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" lcevt="1" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" lcevt="1" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;btnTest_Click(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />
    <img id="Codehighlighter1_270_522_Open_Image" onclick="this.style.display='none'; Codehighlighter1_270_522_Open_Text.style.display='none'; Codehighlighter1_270_522_Closed_Image.style.display='inline'; Codehighlighter1_270_522_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" lcevt="1" /><img id="Codehighlighter1_270_522_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_270_522_Closed_Text.style.display='none'; Codehighlighter1_270_522_Open_Image.style.display='inline'; Codehighlighter1_270_522_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" lcevt="1" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_270_522_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 alt="" src="http://www.blogjava.net/Images/dot.gif" lcevt="1" /></span><span id="Codehighlighter1_270_522_Open_Text"><span style="color: #000000">{<br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" lcevt="1" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Initialize&nbsp;the&nbsp;Java&nbsp;method</span><span style="color: #008000"><br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" lcevt="1" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleReturnString&nbsp;simpler&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SimpleReturnString();&nbsp;<br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" lcevt="1" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Call&nbsp;Java&nbsp;method&nbsp;</span><span style="color: #008000"><br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" lcevt="1" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;returnString&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;simpler.returnString();<br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" lcevt="1" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtTest.Text&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;returnString;<br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" lcevt="1" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" lcevt="1" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
    <img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" lcevt="1" />}</span></span><span style="color: #000000">&nbsp;</span></div>
    </li>
</ol>
<img src ="http://www.blogjava.net/xiaoyi/aggbug/281921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoyi/" target="_blank">可爱的小毅</a> 2009-06-12 22:31 <a href="http://www.blogjava.net/xiaoyi/articles/281921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小毅收藏之------java中MD5加密</title><link>http://www.blogjava.net/xiaoyi/articles/278976.html</link><dc:creator>可爱的小毅</dc:creator><author>可爱的小毅</author><pubDate>Fri, 29 May 2009 17:55:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoyi/articles/278976.html</guid><wfw:comment>http://www.blogjava.net/xiaoyi/comments/278976.html</wfw:comment><comments>http://www.blogjava.net/xiaoyi/articles/278976.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoyi/comments/commentRss/278976.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoyi/services/trackbacks/278976.html</trackback:ping><description><![CDATA[<p align="justify">&nbsp;</p>
<table class="FCK__ShowTableBorders" style="table-layout: fixed">
    <tbody>
        <tr>
            <td>
            <div class="cnt">
            <div class="cnt">
            <p><strong><font color="#800000">/**<br />
            * @(#)MD5.java<br />
            *<br />
            *<br />
            * @SuLyin <br />
            * @version 1.00 2008/10/6<br />
            */<br />
            package com.sulyin.ustbphone;</font></strong></p>
            <p><strong><font color="#800000">public class MD5<br />
            {<br />
            &nbsp;&nbsp; static final int S11 = 7;<br />
            &nbsp;&nbsp; static final int S12 = 12;<br />
            &nbsp;&nbsp; static final int S13 = 17;<br />
            &nbsp;&nbsp; static final int S14 = 22;<br />
            &nbsp;&nbsp; static final int S21 = 5;<br />
            &nbsp;&nbsp; static final int S22 = 9;<br />
            &nbsp;&nbsp; static final int S23 = 14;<br />
            &nbsp;&nbsp; static final int S24 = 20;<br />
            &nbsp;&nbsp; static final int S31 = 4;<br />
            &nbsp;&nbsp; static final int S32 = 11;<br />
            &nbsp;&nbsp; static final int S33 = 16;<br />
            &nbsp;&nbsp; static final int S34 = 23;<br />
            &nbsp;&nbsp; static final int S41 = 6;<br />
            &nbsp;&nbsp; static final int S42 = 10;<br />
            &nbsp;&nbsp; static final int S43 = 15;<br />
            &nbsp;&nbsp; static final int S44 = 21;<br />
            &nbsp;&nbsp; static final byte[] PADDING = { -128, 0, 0, 0, 0, 0, 0, 0, 0,<br />
            &nbsp;&nbsp; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<br />
            &nbsp;&nbsp; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<br />
            &nbsp;&nbsp; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };<br />
            &nbsp;&nbsp; <br />
            <font color="#333300">&nbsp;&nbsp; /* 计算过程中的三个核心数据 */</font><br />
            &nbsp;&nbsp; private long[] state = new long[ 4 ];<br />
            &nbsp;&nbsp; private long[] count = new long[ 2 ];<br />
            &nbsp;&nbsp; private byte[] buffer = new byte[ 64 ];<br />
            &nbsp;&nbsp; <br />
            <font color="#333300">&nbsp;&nbsp; /* 最新一次计算结果的16进制ASCII表示（公共成员-digestHexStr）*/</font><br />
            &nbsp;&nbsp; public String digestHexStr;<br />
            &nbsp;&nbsp; <br />
            <font color="#333300">&nbsp;&nbsp; /* 最新一次计算结果的二进制内部表示，表示128位的MD5值（私有成员-digest）*/</font><br />
            &nbsp;&nbsp; private byte[] digest = new byte[ 16 ];<br />
            &nbsp;&nbsp; <br />
            &nbsp;&nbsp; public String getMD5ofStr( String inbuf )<br />
            &nbsp;&nbsp; {<br />
            &nbsp;&nbsp; &nbsp;&nbsp; md5Init();<br />
            &nbsp;&nbsp; &nbsp;&nbsp; md5Update( inbuf.getBytes(), inbuf.length() );<br />
            &nbsp;&nbsp; &nbsp;&nbsp; md5Final();<br />
            &nbsp;&nbsp; &nbsp;&nbsp; digestHexStr = "";<br />
            &nbsp;&nbsp; &nbsp;&nbsp; for( int i = 0; i &lt; 16; i ++ )<br />
            &nbsp;&nbsp; &nbsp;&nbsp; {<br />
            &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; digestHexStr += byteHEX( digest[ i ] );<br />
            &nbsp;&nbsp; &nbsp;&nbsp; }<br />
            &nbsp;&nbsp; &nbsp;&nbsp; return digestHexStr;<br />
            &nbsp;&nbsp; }<br />
            &nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; public MD5()<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; md5Init();<br />
            &nbsp;&nbsp;&nbsp; return;&nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; private void md5Init()<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; count[ 0 ] = 0L;<br />
            &nbsp;&nbsp;&nbsp; count[ 1 ] = 0L;<br />
            &nbsp;&nbsp;&nbsp; state[ 0 ] = 0x67452301L;<br />
            &nbsp;&nbsp;&nbsp; state[ 1 ] = 0xefcdab89L;<br />
            &nbsp;&nbsp;&nbsp; state[ 2 ] = 0x98badcfeL;<br />
            &nbsp;&nbsp;&nbsp; state[ 3 ] = 0x10325476L;<br />
            &nbsp;&nbsp;&nbsp; return;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; <br />
            <font color="#333300">&nbsp;&nbsp;&nbsp; /* F,G,H,I四个基本的MD5函数，实现简单的位运算。*/</font><br />
            &nbsp;&nbsp;&nbsp; private long F( long x, long y, long z )<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; return ( x &amp; y ) | ( ( ~x ) &amp; z );<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; private long G( long x, long y, long z )<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; return ( x &amp; z ) | ( y &amp; ( ~z ) );<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; private long H( long x, long y, long z )<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; return x ^ y ^ z;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; private long I( long x, long y, long z )<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; return y ^ ( x | ( ~z ) );<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; <br />
            <font color="#333300">&nbsp;&nbsp;&nbsp; /* FF,GG,HH和II将调用F,G,H,I进行进一步变换 */</font><br />
            &nbsp;&nbsp;&nbsp; private long FF( long a, long b, long c, long d, long x, long s, long ac )<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; a += F( b, c, d ) + x + ac;<br />
            &nbsp;&nbsp;&nbsp; a = ( ( int )a &lt;&lt; s ) | ( ( int )a &gt;&gt;&gt; ( 32 - s ) );<br />
            &nbsp;&nbsp;&nbsp; a += b;<br />
            &nbsp;&nbsp;&nbsp; return a ;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; private long GG( long a, long b, long c, long d, long x, long s, long ac )<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; a += G( b, c, d ) + x + ac;<br />
            &nbsp;&nbsp;&nbsp; a = ( ( int )a &lt;&lt; s ) | ( ( int )a &gt;&gt;&gt; ( 32 - s ) );<br />
            &nbsp;&nbsp;&nbsp; a += b;<br />
            &nbsp;&nbsp;&nbsp; return a;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; private long HH( long a, long b, long c, long d, long x, long s, long ac )<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; a += H( b, c, d ) + x + ac;<br />
            &nbsp;&nbsp;&nbsp; a = ( ( int )a &lt;&lt; s ) | ( ( int ) a &gt;&gt;&gt; ( 32 - s ) );<br />
            &nbsp;&nbsp;&nbsp; a += b;<br />
            &nbsp;&nbsp;&nbsp; return a;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; private long II( long a, long b, long c, long d, long x, long s, long ac )<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; a += I( b, c, d ) + x + ac;<br />
            &nbsp;&nbsp;&nbsp; a = ( ( int )a &lt;&lt; s ) | ( ( int )a &gt;&gt;&gt; ( 32 - s ) );<br />
            &nbsp;&nbsp;&nbsp; a += b;<br />
            &nbsp;&nbsp;&nbsp; return a;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; <br />
            <font color="#333300">&nbsp;&nbsp;&nbsp; /* md5Update是MD5的主计算过程，inbuf是要变换的字节串，inputLen是它的长度，这个函数由getMD5ofStr调用， 调用之前需要调用md5Init，因此把它设计成private的 */</font><br />
            &nbsp;&nbsp;&nbsp; private void md5Update( byte[] inbuf, int inputLen )<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; int i, index, partLen;<br />
            &nbsp;&nbsp;&nbsp; byte[] block = new byte[ 64 ];<br />
            &nbsp;&nbsp;&nbsp; index = ( int )( count[ 0 ] &gt;&gt;&gt; 3 ) &amp; 0x3F;<br />
            &nbsp;&nbsp;&nbsp; if( ( count[ 0 ] += ( inputLen &lt;&lt; 3 ) ) &lt; ( inputLen &lt;&lt; 3 ) )<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; count[ 1 ] ++;<br />
            &nbsp;&nbsp;&nbsp; count[ 1 ] += ( inputLen &gt;&gt;&gt; 29 );<br />
            &nbsp;&nbsp;&nbsp; partLen = 64 - index;<br />
            &nbsp;&nbsp;&nbsp; if( inputLen &gt;= partLen )<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; md5Memcpy( buffer, inbuf, index, 0, partLen );<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; md5Transform( buffer );<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; for( i = partLen; i + 63 &lt; inputLen; i += 64 )<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; md5Memcpy( block, inbuf, 0, i, 64 );<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; md5Transform( block );<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; index = 0;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; else<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; i = 0;<br />
            &nbsp;&nbsp;&nbsp; md5Memcpy( buffer, inbuf, index, i, inputLen - i );<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; <br />
            <font color="#333300">&nbsp;&nbsp;&nbsp; /* md5Final整理和填写输出结果 */</font><br />
            &nbsp;&nbsp;&nbsp; private void md5Final()<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; byte[] bits = new byte[ 8 ];<br />
            &nbsp;&nbsp;&nbsp; int index, padLen;<br />
            &nbsp;&nbsp;&nbsp; Encode( bits, count, 8 );<br />
            &nbsp;&nbsp;&nbsp; index = ( int )( count[ 0 ] &gt;&gt;&gt; 3 ) &amp; 0x3f;<br />
            &nbsp;&nbsp;&nbsp; padLen = ( index &lt; 56 ) ? ( 56 - index ) : ( 120 - index );<br />
            &nbsp;&nbsp;&nbsp; md5Update( PADDING, padLen );<br />
            &nbsp;&nbsp;&nbsp; md5Update( bits, 8 );<br />
            &nbsp;&nbsp;&nbsp; Encode( digest, state, 16 );<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; <br />
            <font color="#333300">&nbsp;&nbsp;&nbsp; /* md5Memcopy是一个内部使用的byte数组的块复制函数，从input的inpos开始把len长度的字节复制到ouput的outpos位置开始 */</font><br />
            &nbsp;&nbsp;&nbsp; private void md5Memcpy( byte[] output, byte[] input, int outpos, int inpos, int len )<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; int i;<br />
            &nbsp;&nbsp;&nbsp; for( i = 0; i &lt; len; i ++ )<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; output[ outpos + 1 ] = input[ inpos + 1 ];<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp;<font color="#333300"> /* md5Transform是md5的核心变换程序，有md5Update调用，block是分块的原始字节 */</font><br />
            &nbsp;&nbsp;&nbsp; private void md5Transform( byte block[] )<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; long a = state[ 0 ], b = state[ 1 ], c = state[ 2 ], d = state[ 3 ];<br />
            &nbsp;&nbsp;&nbsp; long[] x = new long[ 16 ];<br />
            &nbsp;&nbsp;&nbsp; Decode( x, block, 64 );<br />
            <font color="#333300">&nbsp;&nbsp;&nbsp; /* Round 1 */</font><br />
            &nbsp;&nbsp;&nbsp; a = FF( a, b, c, d, x[ 0 ], S11, 0xd76aa478L ); /* 1 */<br />
            &nbsp;&nbsp;&nbsp; d = FF( d, a, b, c, x[ 1 ], S12, 0xe8c7b756L ); /* 2 */<br />
            &nbsp;&nbsp;&nbsp; c = FF( c, d, a, b, x[ 2 ], S13, 0x242070dbL ); /* 3 */<br />
            &nbsp;&nbsp;&nbsp; b = FF( b, c, d, a, x[ 3 ], S14, 0xc1bdceeel ); /* 4 */<br />
            &nbsp;&nbsp;&nbsp; a = FF( a, b, c, d, x[ 4 ], S11, 0xf57c0fafL ); /* 5 */<br />
            &nbsp;&nbsp;&nbsp; d = FF( d, a, b, c, x[ 5 ], S12, 0x4787c62aL ); /* 6 */<br />
            &nbsp;&nbsp;&nbsp; c = FF( c, d, a, b, x[ 6 ], S13, 0xa8304613L ); /* 7 */<br />
            &nbsp;&nbsp;&nbsp; b = FF( b, c, d, a, x[ 7 ], S14, 0xfd469501L ); /* 8 */<br />
            &nbsp;&nbsp;&nbsp; a = FF( a, b, c, d, x[ 8 ], S11, 0x698098d8L ); /* 9 */<br />
            &nbsp;&nbsp;&nbsp; d = FF( d, a, b, c, x[ 9 ], S12, 0x8b44f7afL ); /* 10 */<br />
            &nbsp;&nbsp;&nbsp; c = FF( c, d, a, b, x[ 10 ], S13, 0xffff5bb1L ); /* 11 */<br />
            &nbsp;&nbsp;&nbsp; b = FF( b, c, d, a, x[ 11 ], S14, 0x895cd7beL ); /* 12 */<br />
            &nbsp;&nbsp;&nbsp; a = FF( a, b, c, d, x[ 12 ], S11, 0x6b901122L ); /* 13 */<br />
            &nbsp;&nbsp;&nbsp; d = FF( d, a, b, c, x[ 13 ], S12, 0xfd987193L ); /* 14 */<br />
            &nbsp;&nbsp;&nbsp; c = FF( c, d, a, b, x[ 14 ], S13, 0xa679438eL ); /* 15 */<br />
            &nbsp;&nbsp;&nbsp; b = FF( b, c, d, a, x[ 15 ], S14, 0x49b40821L ); /* 16 */<br />
            <font color="#333300">&nbsp;&nbsp;&nbsp; /* Round 2 */</font><br />
            &nbsp;&nbsp;&nbsp; a = GG( a, b, c, d, x[ 1 ], S21, 0xf61e2562L ); /* 17 */<br />
            &nbsp;&nbsp;&nbsp; d = GG( d, a, b, c, x[ 6 ], S22, 0xc040b340L ); /* 18 */<br />
            &nbsp;&nbsp;&nbsp; c = GG( c, d, a, b, x[ 11 ], S23, 0x265e5a51L ); /*19 */<br />
            &nbsp;&nbsp;&nbsp; b = GG( b, c, d, a, x[ 0 ], S24, 0xe9b6c7aaL ); /* 20 */<br />
            &nbsp;&nbsp;&nbsp; a = GG( a, b, c, d, x[ 5 ], S21, 0xd62f105dL ); /* 21 */<br />
            &nbsp;&nbsp;&nbsp; d = GG( d, a, b, c, x[ 10 ], S22, 0x2441453L ); /* 22 */<br />
            &nbsp;&nbsp;&nbsp; c = GG( c, d, a, b, x[ 15 ], S23, 0xd8a1e681L ); /* 23 */<br />
            &nbsp;&nbsp;&nbsp; b = GG( b, c, d, a, x[ 4 ], S24, 0xe7d3fbc8L ); /* 24 */<br />
            &nbsp;&nbsp;&nbsp; a = GG( a, b, c, d, x[ 9 ], S21, 0x21e1cde6L ); /* 25 */<br />
            &nbsp;&nbsp;&nbsp; d = GG( d, a, b, c, x[ 14 ], S22, 0xc33707d6L ); /* 26 */<br />
            &nbsp;&nbsp;&nbsp; c = GG( c, d, a, b, x[ 3] , S23, 0xf4d50d87L ); /* 27 */<br />
            &nbsp;&nbsp;&nbsp; b = GG( b, c, d, a, x[ 8 ], S24, 0x455a14edL ); /* 28 */<br />
            &nbsp;&nbsp;&nbsp; a = GG( a, b, c, d, x[ 13 ], S21, 0xa9e3e905L ); /* 29 */<br />
            &nbsp;&nbsp;&nbsp; d = GG( d, a, b, c, x[ 2 ], S22, 0xfcefa3f8L ); /* 30 */<br />
            &nbsp;&nbsp;&nbsp; c = GG( c, d, a, b, x[ 7 ], S23, 0x676f02d9L ); /* 31 */<br />
            &nbsp;&nbsp;&nbsp; b = GG( b, c, d, a, x[ 12 ], S24, 0x8d2a4c8aL ); /* 32 */<br />
            <font color="#333300">&nbsp;&nbsp;&nbsp; /* Round 3 */</font><br />
            &nbsp;&nbsp;&nbsp; a = HH( a, b, c, d, x[ 5 ], S31, 0xfffa3942L ); /* 33 */<br />
            &nbsp;&nbsp;&nbsp; d = HH( d, a, b, c, x[ 8 ], S32, 0x8771f681L ); /* 34 */<br />
            &nbsp;&nbsp;&nbsp; c = HH( c, d, a, b, x[ 11 ], S33, 0x6d9d6122L ); /* 35 */<br />
            &nbsp;&nbsp;&nbsp; b = HH( b, c, d, a, x[ 14 ], S34, 0xfde5380cL ); /* 36 */<br />
            &nbsp;&nbsp;&nbsp; a = HH( a, b, c, d, x[ 1 ], S31, 0xa4beea44L ); /* 37 */<br />
            &nbsp;&nbsp;&nbsp; d = HH( d, a, b, c, x[ 4 ], S32, 0x4bdecfa9L ); /* 38 */<br />
            &nbsp;&nbsp;&nbsp; c = HH( c, d, a, b, x[ 7 ], S33, 0xf6bb4b60L ); /* 39 */<br />
            &nbsp;&nbsp;&nbsp; b = HH( b, c, d, a, x[ 10 ], S34, 0xbebfbc70L ); /* 40 */<br />
            &nbsp;&nbsp;&nbsp; a = HH( a, b, c, d, x[ 13 ], S31, 0x289b7ec6L ); /* 41 */<br />
            &nbsp;&nbsp;&nbsp; d = HH( d, a, b, c, x[ 0 ], S32, 0xeaa127faL ); /* 42 */<br />
            &nbsp;&nbsp;&nbsp; c = HH( c, d, a, b, x[ 3 ], S33, 0xd4ef3085L ); /* 43 */<br />
            &nbsp;&nbsp;&nbsp; b = HH( b, c, d, a, x[ 6 ], S34, 0x4881d05L ); /* 44 */<br />
            &nbsp;&nbsp;&nbsp; a = HH( a, b, c, d, x[ 9 ], S31, 0xd9d4d039L ); /* 45 */<br />
            &nbsp;&nbsp;&nbsp; d = HH( d, a, b, c, x[ 12 ], S32, 0xe6db99e5L ); /* 46 */<br />
            &nbsp;&nbsp;&nbsp; c = HH( c, d, a, b, x[ 15 ], S33, 0x1fa27cf8L ); /* 47 */<br />
            &nbsp;&nbsp;&nbsp; b = HH( b, c, d, a, x[ 2 ], S34, 0xc4ac5665L ); /* 48 */<br />
            <font color="#333300">&nbsp;&nbsp;&nbsp; /* Round 4 */</font><br />
            &nbsp;&nbsp;&nbsp; a = II( a, b, c, d, x[ 0 ], S41, 0xf4292244L ); /* 49 */<br />
            &nbsp;&nbsp;&nbsp; d = II( d, a, b, c, x[ 7 ], S42, 0x432aff97L ); /* 50 */<br />
            &nbsp;&nbsp;&nbsp; c = II( c, d, a, b, x[ 14 ], S43, 0xab9423a7L ); /* 51 */<br />
            &nbsp;&nbsp;&nbsp; b = II( b, c, d, a, x[ 5 ], S44, 0xfc93a039L ); /* 52 */<br />
            &nbsp;&nbsp;&nbsp; a = II( a, b, c, d, x[ 12 ], S41, 0x655b59c3L ); /* 53 */<br />
            &nbsp;&nbsp;&nbsp; d = II( d, a, b, c, x[ 3 ], S42, 0x8f0ccc92L ); /* 54 */<br />
            &nbsp;&nbsp;&nbsp; c = II( c, d, a, b, x[ 10 ], S43, 0xffeff47dL ); /* 55 */<br />
            &nbsp;&nbsp;&nbsp; b = II( b, c, d, a, x[ 1 ], S44, 0x85845dd1L ); /* 56 */<br />
            &nbsp;&nbsp;&nbsp; a = II( a, b, c, d, x[ 8 ], S41, 0x6fa87e4fL ); /* 57 */<br />
            &nbsp;&nbsp;&nbsp; d = II( d, a, b, c, x[ 15 ], S42, 0xfe2ce6e0L ); /* 58 */<br />
            &nbsp;&nbsp;&nbsp; c = II( c, d, a, b, x[ 6 ], S43, 0xa3014314L ); /* 59 */<br />
            &nbsp;&nbsp;&nbsp; b = II( b, c, d, a, x[ 13 ], S44, 0x4e0811a1L ); /* 60 */<br />
            &nbsp;&nbsp;&nbsp; a = II( a, b, c, d, x[ 4 ], S41, 0xf7537e82L ); /* 61 */<br />
            &nbsp;&nbsp;&nbsp; d = II( d, a, b, c, x[ 11 ], S42, 0xbd3af235L ); /* 62 */<br />
            &nbsp;&nbsp;&nbsp; c = II( c, d, a, b, x[ 2 ], S43, 0x2ad7d2bbL ); /* 63 */<br />
            &nbsp;&nbsp;&nbsp; b = II( b, c, d, a, x[ 9 ], S44, 0xeb86d391L ); /* 64 */<br />
            &nbsp;&nbsp;&nbsp; state[ 0 ] += a;<br />
            &nbsp;&nbsp;&nbsp; state[ 1 ] += b;<br />
            &nbsp;&nbsp;&nbsp; state[ 2 ] += c;<br />
            &nbsp;&nbsp;&nbsp; state[ 3 ] += d;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; <br />
            <font color="#333300">&nbsp;&nbsp;&nbsp; /* Encode把long数组按顺序拆成byte数组，因为java的long类型是64位的，所以只拆低32位，以适应原始c实现的用途 */</font><br />
            &nbsp;&nbsp;&nbsp; private void Encode( byte[] output, long[] input, int len)<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; int i, j;<br />
            &nbsp;&nbsp;&nbsp; for( i = 0, j = 0; j &lt; len; i ++, j += 4 )<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; output[ j ] = ( byte )( input[ i ] &amp; 0xffL );<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; output[ j + 1 ] = ( byte )( ( input[ i ] &gt;&gt;&gt; 8 ) &amp; 0xffL );<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; output[ j + 2 ] = ( byte )( ( input[ i ] &gt;&gt;&gt; 16 ) &amp; 0xffL );<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; output[ j + 3 ] = ( byte )( ( input[ i ] &gt;&gt;&gt; 24 ) &amp; 0xffL );<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; <br />
            <font color="#333300">&nbsp;&nbsp; /* Decode把byte数组按顺序合成long数组，因为java的long类型是64位的，因此只合成低32位，高32位清零 */</font><br />
            &nbsp;&nbsp;&nbsp; private void Decode( long[] output, byte[] input, int len )<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; int i, j;<br />
            &nbsp;&nbsp;&nbsp; for( i = 0, j = 0; j &lt; len; i ++, j += 4 )<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; output[ i ] = b2iu( input[ j ] ) | <br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ( b2iu( input[ j + 1 ] ) &lt;&lt; 8 ) |<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ( b2iu( input[ j + 2 ] ) &lt;&lt; 16 ) |<br />
            &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ( b2iu( input[ j + 3 ] ) &lt;&lt; 24 );<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; <br />
            <font color="#333300">&nbsp;&nbsp;&nbsp; /* b2iu是一个附加的把byte按照不考虑正负号的原则的&#8220;升位&#8221;函数，因为java没有unsigned运算 */</font><br />
            &nbsp;&nbsp;&nbsp; public static long b2iu( byte b )<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; return b &lt; 0 ? b &amp; 0x7F + 128 : b;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; <br />
            <font color="#333300">&nbsp;&nbsp;&nbsp; /* byteHEX()用来把一个byte类型的数转换成十六进制的ASCII表示，因为toString方法无法做到这一点 */</font><br />
            &nbsp;&nbsp;&nbsp; public static String byteHEX( byte ib )<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'D', 'E', 'F' };<br />
            &nbsp;&nbsp;&nbsp; char[] ob = new char[ 2 ];<br />
            &nbsp;&nbsp;&nbsp; ob[ 0 ] = Digit[ ( ib &gt;&gt;&gt; 4 ) &amp; 0x0F ];<br />
            &nbsp;&nbsp;&nbsp; ob[ 1 ] = Digit[ ib &amp; 0x0F ];<br />
            &nbsp;&nbsp;&nbsp; String s = new String( ob );<br />
            &nbsp;&nbsp;&nbsp; return s;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; public static String toMD5( String source )<br />
            &nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp; MD5 md5 = new MD5();<br />
            &nbsp;&nbsp;&nbsp; return md5.getMD5ofStr( source );<br />
            &nbsp;&nbsp;&nbsp; }<br />
            }</font></strong></p>
            </div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/xiaoyi/aggbug/278976.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoyi/" target="_blank">可爱的小毅</a> 2009-05-30 01:55 <a href="http://www.blogjava.net/xiaoyi/articles/278976.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小毅收藏之------JAVA加密解密工具类 </title><link>http://www.blogjava.net/xiaoyi/articles/278975.html</link><dc:creator>可爱的小毅</dc:creator><author>可爱的小毅</author><pubDate>Fri, 29 May 2009 17:49:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoyi/articles/278975.html</guid><wfw:comment>http://www.blogjava.net/xiaoyi/comments/278975.html</wfw:comment><comments>http://www.blogjava.net/xiaoyi/articles/278975.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoyi/comments/commentRss/278975.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoyi/services/trackbacks/278975.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在很多的时候，需要将重要信息加密，而以下类就是在java中如何加密和解密经常用到的代码：&nbsp;&nbsp;1package&nbsp;cn.com.hkgt.apps.util;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;3&nbsp;&nbsp;4import&nbsp;java.security.*;&nbsp;&nbsp;&nbsp;5import...&nbsp;&nbsp;<a href='http://www.blogjava.net/xiaoyi/articles/278975.html'>阅读全文</a><img src ="http://www.blogjava.net/xiaoyi/aggbug/278975.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoyi/" target="_blank">可爱的小毅</a> 2009-05-30 01:49 <a href="http://www.blogjava.net/xiaoyi/articles/278975.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小毅收藏之------从JAR与zip档案文件中提取Java 资源 </title><link>http://www.blogjava.net/xiaoyi/articles/278972.html</link><dc:creator>可爱的小毅</dc:creator><author>可爱的小毅</author><pubDate>Fri, 29 May 2009 16:33:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoyi/articles/278972.html</guid><wfw:comment>http://www.blogjava.net/xiaoyi/comments/278972.html</wfw:comment><comments>http://www.blogjava.net/xiaoyi/articles/278972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoyi/comments/commentRss/278972.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoyi/services/trackbacks/278972.html</trackback:ping><description><![CDATA[<span style="font-family: Courier">&nbsp;<span style="font-size: 10pt; color: #993300">多数</span><span style="font-size: 10pt; color: #993300"> java </span><span style="font-size: 10pt; color: #993300">程序员都非常清楚使用</span><span style="font-size: 10pt; color: #993300"> jar </span><span style="font-size: 10pt; color: #993300">文件将组成</span><span style="font-size: 10pt; color: #993300"> java </span><span style="font-size: 10pt; color: #993300">解决方案的各种资源（即</span><span style="font-size: 10pt; color: #993300"> .class </span><span style="font-size: 10pt; color: #993300">文件、声音和图像）打包的优点。刚开始使用</span><span style="font-size: 10pt; color: #993300"> jar </span><span style="font-size: 10pt; color: #993300">文件的人常问的一个问题是：&#8220;如何从</span><span style="font-size: 10pt; color: #993300"> jar </span><span style="font-size: 10pt; color: #993300">文件中提取图像呢？&#8221;本文将回答这个问题，并会提供一个类，这个类使从</span><span style="font-size: 10pt; color: #993300"> jar </span><span style="font-size: 10pt; color: #993300">文件中提取任何资源变得非常简单！</span>
<div style="margin-bottom: 0pt"><font color="#993300"><strong><span style="font-size: 10pt; color: #993300">加载</span></strong><strong><span style="font-size: 10pt; color: #993300"> gif </span></strong><strong><span style="font-size: 10pt; color: #993300">图像</span></strong></font><span style="font-size: 10pt; color: #993300"><br />
<font color="#993300">&nbsp;&nbsp;&nbsp;</font></span><font color="#993300"><span style="font-size: 10pt; color: #993300">假定我们有一个</span><span style="font-size: 10pt; color: #993300"> jar </span><span style="font-size: 10pt; color: #993300">文件，其中包含我们的应用程序要使用的一组</span><span style="font-size: 10pt; color: #993300"> .gif </span><span style="font-size: 10pt; color: #993300">图像。下面就是使用</span><span style="font-size: 10pt; color: #993300"> JarResources </span><span style="font-size: 10pt; color: #993300">访问</span><span style="font-size: 10pt; color: #993300"> jar </span><span style="font-size: 10pt; color: #993300">文件中的图像文件的方法：</span></font><font color="#993300"><span style="font-size: 10pt; color: #993300"> <br />
</span><font face="Arial"><code><span style="font-size: 10pt; color: #993300">&nbsp;&nbsp;&nbsp;</span></code><code><span style="font-size: 10pt; color: #993300"> JarResources JR=new JarResources(" <a href="http://www.bt285.cn/">http://www.bt285.cn</a> /GifBundle.jar");</span></code></font></font><span style="font-size: 10pt; color: #993300"><br />
<br />
</span><font face="Arial"><font color="#993300"><code><span style="font-size: 10pt; color: #993300">&nbsp;&nbsp;&nbsp;&nbsp;</span></code><code><span style="font-size: 10pt; color: #993300">Image logo=Toolkit.getDefaultToolkit().createImage(JR.getResources("logo.gif"));</span></code></font></font><span style="font-size: 10pt; color: #993300"><br />
</span><span style="font-size: 10pt; color: #993300"><br />
<font color="#993300">&nbsp;&nbsp;&nbsp;&nbsp;</font></span><font color="#993300"><span style="font-size: 10pt; color: #993300">这段代码说明我们可以创建一个</span><font face="Arial"><code><span style="font-size: 10pt; color: #993300">JarResources</span></code><span style="font-size: 10pt; color: #993300">对象，并将其初始化为包含我们要使用的资源的</span><span style="font-size: 10pt; color: #993300"> jar </span><span style="font-size: 10pt; color: #993300">文件</span><span style="font-size: 10pt; color: #993300"> -- </span><code><span style="font-size: 10pt; color: #993300">images.jar</span></code><span style="font-size: 10pt; color: #993300">。随后我们使用</span><code><span style="font-size: 10pt; color: #993300">JarResources</span></code><span style="font-size: 10pt; color: #993300">的</span><code><span style="font-size: 10pt; color: #993300">getResource()</span></code><span style="font-size: 10pt; color: #993300">方法将来自</span><span style="font-size: 10pt; color: #993300"> logo.gif </span><span style="font-size: 10pt; color: #993300">文件的原始数据提供给</span><span style="font-size: 10pt; color: #993300"> awt Toolkit </span><span style="font-size: 10pt; color: #993300">的</span><code><span style="font-size: 10pt; color: #993300">createImage()</span></code><span style="font-size: 10pt; color: #993300">方法。</span></font></font></div>
<div style="margin-bottom: 0pt"><strong><span style="font-size: 10pt; color: #993300"><font color="#993300">命名说明</font></span></strong><span style="font-size: 10pt; color: #993300"><br />
<font color="#993300">JarResource </font></span><font color="#993300"><span style="font-size: 10pt; color: #993300">是一个非常简单的示例，它说明了如何使用</span><span style="font-size: 10pt; color: #993300"> java </span><span style="font-size: 10pt; color: #993300">所提供的各种功能来处理</span><span style="font-size: 10pt; color: #993300"> jar </span><span style="font-size: 10pt; color: #993300">和</span><span style="font-size: 10pt; color: #993300"> zip </span><span style="font-size: 10pt; color: #993300">档案文件。</span></font><font color="#993300"><span style="font-size: 10pt; color: #993300"> <br />
<br />
&nbsp;</span><strong><span style="font-size: 10pt; color: #993300">工作方式</span></strong></font><span style="font-size: 10pt; color: #993300"><br />
</span><font face="Arial"><font color="#993300"><code><span style="font-size: 10pt; color: #993300">JarReources</span></code><span style="font-size: 10pt; color: #993300">类的重要数据域用来跟踪和存储指定</span><span style="font-size: 10pt; color: #993300"> jar </span><span style="font-size: 10pt; color: #993300">文件的内容：</span></font></font></div>
<div style="margin-bottom: 0pt"><code><span style="font-size: 10pt; color: #993300"><font face="Arial" color="#993300">public final class JarResources {</font></span></code><span style="font-size: 10pt; color: #993300"><br />
<br />
</span><font face="Arial"><font color="#993300"><code><span style="font-size: 10pt; color: #993300">&nbsp;&nbsp;&nbsp;</span></code><code><span style="font-size: 10pt; color: #993300">public boolean debugon=false;</span></code></font></font><span style="font-size: 10pt; color: #993300"><br />
<br />
</span><font face="Arial"><font color="#993300"><code><span style="font-size: 10pt; color: #993300">&nbsp;&nbsp;&nbsp;</span></code><code><span style="font-size: 10pt; color: #993300">private Hashtable htsizes=new Hashtable(); </span></code></font></font><span style="font-size: 10pt; color: #993300"><br />
</span><font face="Arial"><font color="#993300"><code><span style="font-size: 10pt; color: #993300">&nbsp;&nbsp;&nbsp;</span></code><code><span style="font-size: 10pt; color: #993300">private Hashtable htjarcontents=new Hashtable();</span></code></font></font><span style="font-size: 10pt; color: #993300"><br />
<br />
</span><font face="Arial"><font color="#993300"><code><span style="font-size: 10pt; color: #993300">&nbsp;&nbsp;&nbsp;</span></code><code><span style="font-size: 10pt; color: #993300">private String jarfilename;</span></code></font></font><span style="font-size: 10pt; color: #993300"><br />
</span><span style="font-size: 10pt; color: #993300"><br />
</span><font color="#993300"><span style="font-size: 10pt; color: #993300">这样，该类的实例化设置</span><span style="font-size: 10pt; color: #993300"> jar </span><span style="font-size: 10pt; color: #993300">文件的名称，然后转到</span><font face="Arial"><code><span style="font-size: 10pt; color: #993300">init()</span></code><span style="font-size: 10pt; color: #993300">方法完成全部实际工作。</span></font></font></div>
<div style="margin-bottom: 0pt"><font face="Arial"><font color="#993300"><code><span style="font-size: 10pt; color: #993300">&nbsp;&nbsp;&nbsp;</span></code><code><span style="font-size: 10pt; color: #993300">public JarResources(String jarfilename) {</span></code></font></font><span style="font-size: 10pt; color: #993300"><br />
</span><font face="Arial"><font color="#993300"><code><span style="font-size: 10pt; color: #993300">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></code><code><span style="font-size: 10pt; color: #993300">this.jarfilename=jarfilename;</span></code></font></font><span style="font-size: 10pt; color: #993300"><br />
</span><font face="Arial"><font color="#993300"><code><span style="font-size: 10pt; color: #993300">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></code><code><span style="font-size: 10pt; color: #993300">init();</span></code></font></font><span style="font-size: 10pt; color: #993300"><br />
</span><font face="Arial"><font color="#993300"><code><span style="font-size: 10pt; color: #993300">&nbsp;&nbsp;&nbsp;</span></code><code><span style="font-size: 10pt; color: #993300">}</span></code></font></font><span style="font-size: 10pt; color: #993300"><br />
</span><span style="font-size: 10pt; color: #993300"><br />
</span><font color="#993300"><span style="font-size: 10pt; color: #993300">现在，</span><font face="Arial"><code><span style="font-size: 10pt; color: #993300">init()</span></code><span style="font-size: 10pt; color: #993300">方法只将指定</span><span style="font-size: 10pt; color: #993300"> jar </span><span style="font-size: 10pt; color: #993300">文件的整个内容加载到一个</span><span style="font-size: 10pt; color: #993300"> hashtable</span><span style="font-size: 10pt; color: #993300">（通过资源名访问）中。</span></font></font><font color="#993300"><span style="font-size: 10pt; color: #993300"> <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: #993300">这是一个相当有用的方法，下面我们对它作进一步的分析。</span><font face="Arial"><code><span style="font-size: 10pt; color: #993300">ZipFile</span></code><span style="font-size: 10pt; color: #993300">类为我们提供了对</span><span style="font-size: 10pt; color: #993300"> jar/zip </span><span style="font-size: 10pt; color: #993300">档案头信息的基本访问方法。这类似于文件系统中的目录信息。下面我们列出</span><code><span style="font-size: 10pt; color: #993300">ZipFile</span></code><span style="font-size: 10pt; color: #993300">中的所有条目，并用档案中每个资源的大小添充</span><span style="font-size: 10pt; color: #993300"> <em>htsizes</em> hashtable</span><span style="font-size: 10pt; color: #993300">：</span></font></font></div>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;private void init() {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // extracts just sizes only. </font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZipFile zf=new ZipFile(jarFileName);</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enumeration e=zf.entries();</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (e.hasMoreElements()) {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZipEntry ze=(ZipEntry)e.nextElement();</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (debugOn) {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(dumpZipEntry(ze));</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htSizes.put(ze.getName(),new Integer((int)ze.getSize()));</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zf.close();</font></span></pre>
<div><font color="#993300"><span style="font-size: 10pt; color: #993300">接下来，我们使用</span><font face="Arial"><code><span style="font-size: 10pt; color: #993300">ZipInputStream</span></code><span style="font-size: 10pt; color: #993300">类访问档案。</span><code><span style="font-size: 10pt; color: #993300">ZipInputStream</span></code><span style="font-size: 10pt; color: #993300">类完成了全部魔术，允许我们单独读取档案中的每个资源。我们从档案中读取组成每个资源的精确字节数，并将其存储在</span><span style="font-size: 10pt; color: #993300"> <em>htjarcontents</em> hashtable </span><span style="font-size: 10pt; color: #993300">中，您可以通过资源名访问这些数据：</span><code><span style="font-size: 10pt; color: #993300">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></code></font></font></div>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // extract resources and put them into the hashtable.</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileInputStream fis=new FileInputStream(jarFileName);</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedInputStream bis=new BufferedInputStream(fis);</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZipInputStream zis=new ZipInputStream(bis);</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZipEntry ze=null;</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ((ze=zis.getNextEntry())!=null) {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ze.isDirectory()) {</font></span></pre>
<pre><font size="2"><font face="Arial"><font color="#993300"><span style="color: #993300">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;////</span><span style="color: #993300">啊哟</span><span style="color: #993300">!</span><span style="color: #993300">没有处理子目录中的资源啊 <a href="http://www.5a520.cn/">http://www.5a520.cn</a>  小说520网</span></font></font></font></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (debugOn) {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "ze.getName()="+ze.getName()+","+"getSize()="+ze.getSize()</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int size=(int)ze.getSize();</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // -1 means unknown size. </font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (size==-1) {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size=((Integer)htSizes.get(ze.getName())).intValue();</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] b=new byte[(int)size];</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int rb=0;</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int chunk=0;</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (((int)size - rb) &gt; 0) {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chunk=zis.read(b,rb,(int)size - rb);</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (chunk==-1) {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rb+=chunk;</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // add to internal resource hashtable</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htJarContents.put(ze.getName(),b);</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (debugOn) {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ze.getName()+"&nbsp;rb="+rb+</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ",size="+size+</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ",csize="+ze.getCompressedSize()</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (NullPointerException e) {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("done.");</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (FileNotFoundException e) {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp; }</font></span></pre>
<div><font color="#993300"><span style="font-size: 10pt; color: #993300">请注意，用来标识每个资源的名称是档案中资源的限定路径名，例如，<em>不是</em>包中的类名</span><span style="font-size: 10pt; color: #993300"> -- </span><span style="font-size: 10pt; color: #993300">即</span><span style="font-size: 10pt; color: #993300"> java.util.zip </span><span style="font-size: 10pt; color: #993300">包中的</span><font face="Arial"><code><span style="font-size: 10pt; color: #993300">ZipEntry</span></code><span style="font-size: 10pt; color: #993300">类将被命名为</span><span style="font-size: 10pt; color: #993300"> "java/util/zip/ZipEntry"</span><span style="font-size: 10pt; color: #993300">，而不是</span><span style="font-size: 10pt; color: #993300"> "java.util.zip.ZipEntry"</span><span style="font-size: 10pt; color: #993300">。</span></font></font><font color="#993300"><span style="font-size: 10pt; color: #993300"> <br />
<br />
</span><span style="font-size: 10pt; color: #993300">其它方法</span><span style="font-size: 10pt; color: #993300">:</span></font></div>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp; /**</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp; * Dumps a zip entry into a string.</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp; * @param ze a ZipEntry</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp; */</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp; private String dumpZipEntry(ZipEntry ze) {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer sb=new StringBuffer();</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ze.isDirectory()) {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append("d "); </font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append("f "); </font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ze.getMethod()==ZipEntry.STORED) {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append("stored&nbsp;&nbsp; "); </font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append("defalted ");</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(ze.getName());</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append("\t");</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(""+ze.getSize());</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ze.getMethod()==ZipEntry.DEFLATED) {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append("/"+ze.getCompressedSize());</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (sb.toString());</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp; }</font></span></pre>
<pre><span style="color: #993300"><br />
<font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp; /**</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp; * Extracts a jar resource as a blob.</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp; * @param name a resource name.</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp; */</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp; public byte[] getResource(String name) {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (byte[])htJarContents.get(name);</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp; }</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></pre>
<div><font color="#993300"><span style="font-size: 10pt; color: #993300">代码的最后一个重要部分是简单的测试驱动程序。该测试驱动程序是一个简单的应用程序，它接收</span><span style="font-size: 10pt; color: #993300"> jar/zip </span><span style="font-size: 10pt; color: #993300">档案名和资源名。它试图发现档案中的资源文件，然后将成功或失败的消息报告出来：</span></font></div>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">public static void main(String[] args) throws IOException {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (args.length!=2) {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println(</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "usage: java JarResources &lt; jar file name&gt; &lt; resource name&gt;"</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.exit(1);</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JarResources jr=new JarResources(args[0]);</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] buff=jr.getResource(args[1]);</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (buff==null) {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Could not find "+args[1]+".");</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;} else {</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Found "+args[1]+ " (length="+buff.length+").");</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">&nbsp;&nbsp; }</font></span></pre>
<pre><span style="color: #993300"><font face="Arial" color="#993300" size="2">}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // End of JarResources class.</font></span></pre>
<div><font color="#993300"><span style="font-size: 10pt; color: #993300">您已了解了这个类。一个易于使用的类，它隐藏了使用打包在</span><span style="font-size: 10pt; color: #993300"> jar </span><span style="font-size: 10pt; color: #993300">文件中的资源的全部棘手问题。</span></font></div>
<div><strong><span style="font-size: 10pt; color: #993300"><font color="#993300">小结</font></span></strong><span style="font-size: 10pt; color: #993300"><br />
</span><font color="#993300"><span style="font-size: 10pt; color: #993300">如果您曾经渴望知道如何从</span><span style="font-size: 10pt; color: #993300"> jar </span><span style="font-size: 10pt; color: #993300">文件中提取图像，那么您现在已学到了一种方法。有了本技巧提供的这个新类，您就不仅可以用</span><span style="font-size: 10pt; color: #993300"> jar </span><span style="font-size: 10pt; color: #993300">文件处理图像，而且可以将提取魔术用于</span><span style="font-size: 10pt; color: #993300"> jar </span><span style="font-size: 10pt; color: #993300">文件中的</span><em><span style="font-size: 10pt; color: #993300">任何</span></em><span style="font-size: 10pt; color: #993300">资源。</span></font></div>
</span>
<img src ="http://www.blogjava.net/xiaoyi/aggbug/278972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoyi/" target="_blank">可爱的小毅</a> 2009-05-30 00:33 <a href="http://www.blogjava.net/xiaoyi/articles/278972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小毅收藏之------------利用Comparator接口实现根据List中对象的属性排序(以前碰到过，没有深究，时间久了忘了。汗。)</title><link>http://www.blogjava.net/xiaoyi/articles/278224.html</link><dc:creator>可爱的小毅</dc:creator><author>可爱的小毅</author><pubDate>Wed, 27 May 2009 08:55:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoyi/articles/278224.html</guid><wfw:comment>http://www.blogjava.net/xiaoyi/comments/278224.html</wfw:comment><comments>http://www.blogjava.net/xiaoyi/articles/278224.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoyi/comments/commentRss/278224.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoyi/services/trackbacks/278224.html</trackback:ping><description><![CDATA[<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"  alt="" /><span style="color: #000000">Collections.sort(fileList,&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;FileNodeComparator(form.getSortName(),form.isAsc()));&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_161_516_Open_Image" onclick="this.style.display='none'; Codehighlighter1_161_516_Open_Text.style.display='none'; Codehighlighter1_161_516_Closed_Image.style.display='inline'; Codehighlighter1_161_516_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_161_516_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_161_516_Closed_Text.style.display='none'; Codehighlighter1_161_516_Open_Image.style.display='inline'; Codehighlighter1_161_516_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;FileNodeComparator&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;Comparator</span><span id="Codehighlighter1_161_516_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"  alt="" /></span><span id="Codehighlighter1_161_516_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;String&nbsp;&nbsp;&nbsp;sortName&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">name</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;isAsc&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_311_382_Open_Image" onclick="this.style.display='none'; Codehighlighter1_311_382_Open_Text.style.display='none'; Codehighlighter1_311_382_Closed_Image.style.display='inline'; Codehighlighter1_311_382_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_311_382_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_311_382_Closed_Text.style.display='none'; Codehighlighter1_311_382_Open_Image.style.display='inline'; Codehighlighter1_311_382_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;FileNodeComparator(String&nbsp;&nbsp;&nbsp;sortName,</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;isAsc)</span><span id="Codehighlighter1_311_382_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"  alt="" /></span><span id="Codehighlighter1_311_382_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.sortName&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;sortName;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.isAsc&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;isAsc;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_446_509_Open_Image" onclick="this.style.display='none'; Codehighlighter1_446_509_Open_Text.style.display='none'; Codehighlighter1_446_509_Closed_Image.style.display='inline'; Codehighlighter1_446_509_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_446_509_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_446_509_Closed_Text.style.display='none'; Codehighlighter1_446_509_Open_Image.style.display='inline'; Codehighlighter1_446_509_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;compare(Object&nbsp;&nbsp;&nbsp;arg0,&nbsp;&nbsp;&nbsp;Object&nbsp;&nbsp;&nbsp;arg1)&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_446_509_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"  alt="" /></span><span id="Codehighlighter1_446_509_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;。。。。。。。。&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;。。。。。。。。&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;。。。。。。。。&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;。。。。。。。。&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span></div>
<img src ="http://www.blogjava.net/xiaoyi/aggbug/278224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoyi/" target="_blank">可爱的小毅</a> 2009-05-27 16:55 <a href="http://www.blogjava.net/xiaoyi/articles/278224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小毅收藏之----------Java反射实现类似与Winform中委托的swing事件处理</title><link>http://www.blogjava.net/xiaoyi/articles/278124.html</link><dc:creator>可爱的小毅</dc:creator><author>可爱的小毅</author><pubDate>Tue, 26 May 2009 20:02:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoyi/articles/278124.html</guid><wfw:comment>http://www.blogjava.net/xiaoyi/comments/278124.html</wfw:comment><comments>http://www.blogjava.net/xiaoyi/articles/278124.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoyi/comments/commentRss/278124.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoyi/services/trackbacks/278124.html</trackback:ping><description><![CDATA[<p>学习过Java Swing的程序员一定对于Swing中相对较为复杂的事件驱动模型比较困惑，虽然事件驱动模型在Java Swing中被完完全全的体现出来了，但是对于一个软件初学者而言这样的近乎&#8220;裸体&#8221;的事件驱动模型确实是很难理解的。</p>
<p>微软公司.Net框架与Java Swing的GUI编程相比要简单很多，同样是事件驱动模型.Net框架就进行了大量的封装处理，.Net把这种封装称之为委托器(Delegate)，其代码如下： </p>
<p>&nbsp;</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"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">当btnSubmit按钮被点击以后要求交给btnSubmit_Click方法处理</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;EventHandler在中间启到委托器的作用，</span><span style="color: #008000">//</span><span style="color: #008000">它负责将事件分发到指定的方法中进行处理this.btnSubmit.Click&nbsp;+=&nbsp;new&nbsp;EventHandler(this.btnSubmit_Click);</span><span style="color: #008000">//</span><span style="color: #008000">事件处理方法</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;object&nbsp;sender:事件源，这里指btnSubmit对象</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;EventArgs&nbsp;e:事件处理参数，它保存了需要提供给程序员的必要信息private&nbsp;void&nbsp;btnSubmit_Click(object&nbsp;sender,&nbsp;EventArgs&nbsp;e){　</span><span style="color: #008000">//</span><span style="color: #008000">打印This&nbsp;is&nbsp;a&nbsp;button语句　System.Diagnostics.Debug.WriteLine("This&nbsp;is&nbsp;button");}</span></div>
<p>&nbsp;</p>
<p>作为对比，我们来看看Java Swing的事件处理和委托就要复杂很多代码如下：</p>
<p>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>//为btnSubmit增加侦听器SelectHandler，当btnSubmit被点击以后<br />
            //有侦听器的actionPerformed负责处理该点击事件的业务<br />
            //由于事件源btnSubmit和侦听器类SelectHandler处于两个不同的类中<br />
            //为了让SelectHandler类取得页面的信息，我们需要将窗体对象(this)<br />
            //传入到侦听器中<br />
            btnSubmit.addActionListener(new SelectHandler(this));<br />
            //侦听器SelectHandler，它必须实现动作事件ActionListener接口<br />
            //以达到事件分发的作用<br />
            class SelectHandler implements ActionListener {<br />
            　private CommonDialogDemo form = null;<br />
            　//将窗体对象CommonDialogDemo通过构造函数传入SelectHandler类中<br />
            　public SelectHandler(CommonDialogDemo form) {<br />
            this.form = form;<br />
            　}<br />
            　//事件处理方法，当btnSubmit被点击，自动执行以下打印代码<br />
            　publicvoid actionPerformed(ActionEvent e) {<br />
            System.out.println("This is button");<br />
            　}<br />
            }</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>根据以上代码，我们可以清晰的看到Java Swing要比.Net的麻烦的多，而且更不能让人忍受的就是，一个页面如果有多个按钮的话，我们必须针对每个按钮编写多个事件侦听类，而且这些类一般都会被设为内部类。学过软件建模的读者可能知道，内部软件建模在软件工程中是不推荐使用的，所以这样的代码编写明显会增加设计冗余度和复杂度，因此，我们可以考虑自己编写一个类似于.Net中EventHandler一样的事件委托类来处理事件分发。</p>
<p>由于我们无权修改Java的编译器，所以我在这里将会借助于反射技术，利用一个事件委托类处理所有的点击事件，代码如下：</p>
<p>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>package cn.softworks.teachersearchsystem.support;</p>
            <p>import java.awt.event.ActionEvent;<br />
            import java.awt.event.ActionListener;<br />
            import java.lang.reflect.Method;</p>
            <p>/**<br />
            *该类是用来处理所有的Swing按钮点击事件，并根据将处理权&lt;br&gt;<br />
            *转交给使用者来处理<br />
            *<br />
            <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#42;&#64;&#97;&#117;&#116;&#104;&#111;&#114;&#67;&#104;&#101;&#110;&#46;&#121;&#117;">*@authorChen.yu</a><br />
            *<br />
            */<br />
            publicclass EventHandlerimplements ActionListener {</p>
            <p>　//组件所在的窗体对象<br />
            　private Object form = null;</p>
            <p>　//受到委托的方法名<br />
            　private String methodName = null;</p>
            <p>　/**<br />
            　*构造函数<br />
            　*<br />
            　<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#42;&#64;&#112;&#97;&#114;&#97;&#109;&#102;&#111;&#114;&#109;">*@paramform</a> 组件所在的窗体对象<br />
            　<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#42;&#64;&#112;&#97;&#114;&#97;&#109;&#109;&#101;&#116;&#104;&#111;&#100;&#78;&#97;&#109;&#101;">*@parammethodName</a> 受到委托的方法名<br />
            　*/<br />
            　public EventHandler(Object form,String methodName) {<br />
            this.form = form;<br />
            this.methodName = methodName;<br />
            　}</p>
            <p>　/**<br />
            　*事件处理委托方法<br />
            　*/<br />
            　publicvoid actionPerformed(ActionEvent e) {</p>
            <p>//得到窗体对象的类型<br />
            Class formType = this.form.getClass();</p>
            <p>try {<br />
            　//得到指定委托方法的类型 <br />
            　Method method = <br />
            formType.getMethod(this.methodName, new Class[] {e.getClass()});<br />
            　//调用指定的方法<br />
            　method.invoke(this.form, new Object[] {e});</p>
            <p>}catch(Exception ex) {<br />
            　return;<br />
            } <br />
            　}<br />
            }</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>现在我们来编写一个测试程序，代码如下：</p>
<p>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>
            <p>btnSearch.addActionListener(new EventHandler(this,"btnSearch_Click"));</p>
            <p>public void btnSearch_Click(ActionEvent e) {<br />
            　System.out.println("This is btnSearch");<br />
            }</p>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>从以上代码中我们可以清晰的看到，事件处理和事件委托处于同一窗体中了，.Net方便的Delegate处理被我们用反射实现了。</p>
<img src ="http://www.blogjava.net/xiaoyi/aggbug/278124.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoyi/" target="_blank">可爱的小毅</a> 2009-05-27 04:02 <a href="http://www.blogjava.net/xiaoyi/articles/278124.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小毅收藏之----------截屏</title><link>http://www.blogjava.net/xiaoyi/articles/272037.html</link><dc:creator>可爱的小毅</dc:creator><author>可爱的小毅</author><pubDate>Thu, 21 May 2009 09:21:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoyi/articles/272037.html</guid><wfw:comment>http://www.blogjava.net/xiaoyi/comments/272037.html</wfw:comment><comments>http://www.blogjava.net/xiaoyi/articles/272037.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoyi/comments/commentRss/272037.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoyi/services/trackbacks/272037.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 通过java.awt.Robot的createScreenCapture截屏.
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; 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 id="Codehighlighter1_67_355_Open_Image" onclick="this.style.display='none'; Codehighlighter1_67_355_Open_Text.style.display='none'; Codehighlighter1_67_355_Closed_Image.style.display='inline'; Codehighlighter1_67_355_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_67_355_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_67_355_Closed_Text.style.display='none'; Codehighlighter1_67_355_Open_Image.style.display='inline'; Codehighlighter1_67_355_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top" /><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;captureScreen(String&nbsp;fileName)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;</span><span id="Codehighlighter1_67_355_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Dimension&nbsp;screenSize&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Toolkit.getDefaultToolkit().getScreenSize();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Rectangle&nbsp;screenRectangle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Rectangle(screenSize);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Robot&nbsp;robot&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Robot();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;BufferedImage&nbsp;image&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;robot.createScreenCapture(screenRectangle);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;ImageIO.write(image,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">png</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;File(fileName));<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<img src ="http://www.blogjava.net/xiaoyi/aggbug/272037.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoyi/" target="_blank">可爱的小毅</a> 2009-05-21 17:21 <a href="http://www.blogjava.net/xiaoyi/articles/272037.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jspmartLoad文件上传下载</title><link>http://www.blogjava.net/xiaoyi/articles/232137.html</link><dc:creator>可爱的小毅</dc:creator><author>可爱的小毅</author><pubDate>Thu, 02 Oct 2008 15:16:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoyi/articles/232137.html</guid><wfw:comment>http://www.blogjava.net/xiaoyi/comments/232137.html</wfw:comment><comments>http://www.blogjava.net/xiaoyi/articles/232137.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoyi/comments/commentRss/232137.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoyi/services/trackbacks/232137.html</trackback:ping><description><![CDATA[<p>&nbsp;</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 alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">此例子是基于jspsmartupload组件的，jspsmartupload是一个不错的上传下载组件，但对中文支持不足。若下载的文件名中有汉字，则浏览器在提示另存的文件名时，显示的是一堆乱码，让人看了很不舒服，为此，有人专门修改此组件，做了编码的转换工作，将文件名转换为UTF-8形式的编码形式。我用的是网上修改过的，已经可以支持中文，相信你也可以找到，如果需要，可以联系我，我会在第一时间发给你！<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />在网上找了很多相关资料，自己也添加了一些js代码，基本实现了动态添加删除多文件上传的功能，如果想要做得更完美，或者把文件上传下载信息存储到数据库等，那就自己去完善了，以下是所有的源代码：<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />(文件下载出于安全考虑是按流的方式来进行的，而不是直接给出文件下载路径地址，所以像迅雷等下载工具是不能下载的)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />首先当然是上传下载的页面了，upfile.jsp<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">%@&nbsp;page&nbsp;</span><span style="color: #ff0000">contentType</span><span style="color: #0000ff">="text/html;charset=GBK"</span><span style="color: #ff0000">%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">File&nbsp;Upload</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text/javascript"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;addFile()<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;upFile&nbsp;=&nbsp;'</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="file"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="file1"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">br</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">';<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document&nbsp;.getElementById&nbsp;("files").insertAdjacentHTML("beforeEnd",upFile);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;deleteFile()<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;file&nbsp;=&nbsp;document&nbsp;.getElementById&nbsp;("files").lastChild;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(file&nbsp;==&nbsp;null)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document&nbsp;.getElementById&nbsp;("files").removeChild(file);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;=&nbsp;document&nbsp;.getElementById&nbsp;("files").lastChild;&nbsp;&nbsp;&nbsp;//移除换行符</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">br</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">所以要移两次<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document&nbsp;.getElementById&nbsp;("files").removeChild(file);&nbsp;//如果在表格里面不加</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">br</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">就自动换行的，可以去掉，自己把握<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">h3</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">基于jspsmart&nbsp;upload组件的文件上传下载</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">h3</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form&nbsp;</span><span style="color: #ff0000">action</span><span style="color: #0000ff">="servlet/ServletUpload"</span><span style="color: #ff0000">&nbsp;method</span><span style="color: #0000ff">="post"</span><span style="color: #ff0000">&nbsp;enctype</span><span style="color: #0000ff">="multipart/form-data"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;选择文件：</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">div&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="files"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="file"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="file1"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">br</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="submit"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="上传"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="button"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="增加文件"</span><span style="color: #ff0000">&nbsp;onclick</span><span style="color: #0000ff">="addFile()"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="button"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="删除文件"</span><span style="color: #ff0000">&nbsp;onclick</span><span style="color: #0000ff">="deleteFile()"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="reset"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="重置"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">br</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form&nbsp;</span><span style="color: #ff0000">action</span><span style="color: #0000ff">="servlet/ServletDownload"</span><span style="color: #ff0000">&nbsp;method</span><span style="color: #0000ff">="post"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下载文件的名称：<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="downloadFileName"</span><span style="color: #ff0000">&nbsp;size</span><span style="color: #0000ff">="20"</span><span style="color: #ff0000">&nbsp;maxlength</span><span style="color: #0000ff">="80"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="submit"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="下载"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />然后是实现上传和下载的两个servlet类<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />上传文件ServletUpload类：<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />package&nbsp;servlet;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />import&nbsp;java.io.IOException;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />import&nbsp;java.io.PrintWriter;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />import&nbsp;javax.servlet.ServletConfig;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />import&nbsp;javax.servlet.ServletException;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />import&nbsp;javax.servlet.http.HttpServlet;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />import&nbsp;javax.servlet.http.HttpServletRequest;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />import&nbsp;javax.servlet.http.HttpServletResponse;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />import&nbsp;com.jspsmart.upload.SmartUpload;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />import&nbsp;com.jspsmart.upload.SmartUploadException;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />public&nbsp;class&nbsp;ServletUpload&nbsp;extends&nbsp;HttpServlet&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />private&nbsp;ServletConfig&nbsp;config;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />public&nbsp;ServletUpload()&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;super();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />public&nbsp;void&nbsp;destroy()&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;super.destroy();&nbsp;//&nbsp;Just&nbsp;puts&nbsp;"destroy"&nbsp;string&nbsp;in&nbsp;log<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />public&nbsp;void&nbsp;doGet(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;ServletException,&nbsp;IOException&nbsp;{&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;int&nbsp;count&nbsp;=&nbsp;0;&nbsp;//记录文件上传总个数<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;SmartUpload&nbsp;mySmartUpload&nbsp;=&nbsp;new&nbsp;SmartUpload();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;mySmartUpload.initialize(config,request,&nbsp;response);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;try&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;//mySmartUpload.setAllowedFilesList("rar,htm,html,jar");//设置允许上传的文件<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;mySmartUpload.setDeniedFilesList("exe,jsp,asp");//禁止上传的文件<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;mySmartUpload.setDenyPhysicalPath(true);&nbsp;//拒绝物理路径<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;mySmartUpload.setMaxFileSize(5000000);//设置允许上传文件最大为50000bytes<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;mySmartUpload.setTotalMaxFileSize(50000000);//一次上传文件大小最多不超过5000000bytes<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;mySmartUpload.upload();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;i</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mySmartUpload</span><span style="color: #ff0000">.getFiles().getCount();i++){<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.jspsmart.upload.File&nbsp;myFile&nbsp;</span><span style="color: #0000ff">=&nbsp;mySmartUpload.getFiles().getFile(i);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">String&nbsp;fileName&nbsp;</span><span style="color: #0000ff">=&nbsp;myFile.getFileName();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">System.out.println("文件名："+fileName);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;</span><span style="color: #0000ff">=&nbsp;mySmartUpload.save("/upload");<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">System.out.println(count+"文件已上传");<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;}<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />public&nbsp;void&nbsp;doPost(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;ServletException,&nbsp;IOException&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;doGet(request,&nbsp;response);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />public&nbsp;void&nbsp;init(ServletConfig&nbsp;config)&nbsp;throws&nbsp;ServletException&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;this.config&nbsp;</span><span style="color: #0000ff">=&nbsp;config;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #ff0000">}<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />下载文件ServletDownload类：<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />package&nbsp;servlet;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />import&nbsp;java.io.IOException;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />import&nbsp;java.io.PrintWriter;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />import&nbsp;javax.servlet.ServletConfig;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />import&nbsp;javax.servlet.ServletException;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />import&nbsp;javax.servlet.http.HttpServlet;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />import&nbsp;javax.servlet.http.HttpServletRequest;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />import&nbsp;javax.servlet.http.HttpServletResponse;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />import&nbsp;com.jspsmart.upload.SmartUpload;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />import&nbsp;com.jspsmart.upload.SmartUploadException;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />public&nbsp;class&nbsp;ServletDownload&nbsp;extends&nbsp;HttpServlet&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />private&nbsp;ServletConfig&nbsp;config;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />public&nbsp;ServletDownload()&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;super();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />public&nbsp;void&nbsp;destroy()&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;super.destroy();&nbsp;//&nbsp;Just&nbsp;puts&nbsp;"destroy"&nbsp;string&nbsp;in&nbsp;log<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />public&nbsp;void&nbsp;doGet(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;ServletException,&nbsp;IOException&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;String&nbsp;temp_fileName&nbsp;</span><span style="color: #0000ff">=&nbsp;request.getParameter("downloadFileName");<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">if(temp_fileName&nbsp;</span><span style="color: #0000ff">==&nbsp;</span><span style="color: #ff0000">null&nbsp;||&nbsp;temp_fileName&nbsp;</span><span style="color: #0000ff">==&nbsp;</span><span style="color: #ff0000">"")<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;byte[]&nbsp;temp_t&nbsp;</span><span style="color: #0000ff">=&nbsp;temp_fileName.getBytes("ISO8859_1");<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">String&nbsp;fileName&nbsp;</span><span style="color: #0000ff">=&nbsp;new&nbsp;</span><span style="color: #ff0000">String(temp_t,&nbsp;"GBK");<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;SmartUpload&nbsp;mySmartUpload&nbsp;</span><span style="color: #0000ff">=&nbsp;new&nbsp;</span><span style="color: #ff0000">SmartUpload();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;mySmartUpload.initialize(config,&nbsp;request,&nbsp;response);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;mySmartUpload.setContentDisposition(null);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;/*<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;*&nbsp;原型：public&nbsp;void&nbsp;setContentDisposition(String&nbsp;contentDisposition)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;*&nbsp;其中，contentDisposition为要添加的数据。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;*&nbsp;如果contentDisposition为null，则组件将自动添加"attachment;"，<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;*&nbsp;以表明将下载的文件作为附件，结果是IE浏览器将会提示另存文件，而不是自动打开这个文件<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;*&nbsp;（IE浏览器一般根据下载的文件扩展名决定执行什么操作，扩展名为doc的将用word程序打开，<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;*&nbsp;扩展名为pdf的将用acrobat程序打开，等等）。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;*/<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;try&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;mySmartUpload.downloadFile("/upload/"+fileName);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(SmartUploadException&nbsp;e)&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;}<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />public&nbsp;void&nbsp;doPost(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;ServletException,&nbsp;IOException&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;doGet(request,&nbsp;response);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />public&nbsp;void&nbsp;init(ServletConfig&nbsp;config)&nbsp;throws&nbsp;ServletException&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;this.config&nbsp;</span><span style="color: #0000ff">=&nbsp;config;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #ff0000">}<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />以下是web.xml配置文件:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&lt;?xml&nbsp;version</span><span style="color: #0000ff">="1.0"</span><span style="color: #ff0000">&nbsp;encoding</span><span style="color: #0000ff">="UTF-8"</span><span style="color: #ff0000">?</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">web-app&nbsp;</span><span style="color: #ff0000">version</span><span style="color: #0000ff">="2.5"</span><span style="color: #ff0000">&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />xmlns</span><span style="color: #0000ff">="http://java.sun.com/xml/ns/javaee"</span><span style="color: #ff0000">&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000">&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />xsi:schemaLocation</span><span style="color: #0000ff">="http://java.sun.com/xml/ns/javaee&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">This&nbsp;is&nbsp;the&nbsp;description&nbsp;of&nbsp;my&nbsp;J2EE&nbsp;component</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">display-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">This&nbsp;is&nbsp;the&nbsp;display&nbsp;name&nbsp;of&nbsp;my&nbsp;J2EE&nbsp;component</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">display-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">ServletUpload</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">servlet.ServletUpload</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">This&nbsp;is&nbsp;the&nbsp;description&nbsp;of&nbsp;my&nbsp;J2EE&nbsp;component</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">display-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">This&nbsp;is&nbsp;the&nbsp;display&nbsp;name&nbsp;of&nbsp;my&nbsp;J2EE&nbsp;component</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">display-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">ServletDownload</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">servlet.ServletDownload</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">ServletUpload</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/servlet/ServletUpload</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">ServletDownload</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/servlet/ServletDownload</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">welcome-file-list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">welcome-file</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">index.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">welcome-file</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">welcome-file-list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">web-app</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
<strong style="font-size: 10pt; color: red">要实现无刷新上传其实很简单。只要利用iframe即可，只要把target设置为隐藏的iframe将就可以了。<br />
&nbsp;＜iframe&nbsp;name='hidden_frame'&nbsp;id=<span class="string">"hidden_frame"</span><span>&nbsp;style='display:none'＞＜/iframe＞</span></strong>
<img src ="http://www.blogjava.net/xiaoyi/aggbug/232137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoyi/" target="_blank">可爱的小毅</a> 2008-10-02 23:16 <a href="http://www.blogjava.net/xiaoyi/articles/232137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小议泛型</title><link>http://www.blogjava.net/xiaoyi/articles/230494.html</link><dc:creator>可爱的小毅</dc:creator><author>可爱的小毅</author><pubDate>Mon, 22 Sep 2008 11:25:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoyi/articles/230494.html</guid><wfw:comment>http://www.blogjava.net/xiaoyi/comments/230494.html</wfw:comment><comments>http://www.blogjava.net/xiaoyi/articles/230494.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoyi/comments/commentRss/230494.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoyi/services/trackbacks/230494.html</trackback:ping><description><![CDATA[<strong style="color: #008080">泛型 <br />
一、什么是泛型？ <br />
通过泛型可以定义类型安全类，而不会损害类型安全、性能或工作效率 <br />
<br />
二、实例化泛型 <br />
1、可以使用任何类型来声明和实例化 <br />
2、申明和实例话都必须用一个特定的类型来代替一般类型T <br />
3、例子： <br />
//原来写法 <br />
Public &nbsp; class &nbsp; Stack <br />
{ <br />
object[] &nbsp; m_Items; <br />
public &nbsp; void &nbsp; Push(object &nbsp; item) <br />
{...} <br />
public &nbsp; object &nbsp; Pop() <br />
{...} <br />
} <br />
Stack &nbsp; stack &nbsp; = &nbsp; new &nbsp; Stack(); <br />
stack.Push(1); <br />
int &nbsp; number &nbsp; = &nbsp; (int)stack.Pop(); <br />
<br />
//有了泛型后 <br />
Public &nbsp; class &nbsp; Stack &lt;T&gt; <br />
{ <br />
T[] &nbsp; m_Items; <br />
public &nbsp; void &nbsp; Push(T &nbsp; item) <br />
{...} <br />
public &nbsp; T &nbsp; Pop() <br />
{...} <br />
} <br />
Stack &lt;int&gt; &nbsp; stack &nbsp; = &nbsp; new &nbsp; Stack &lt;int&gt; (); <br />
stack.Push(1); <br />
int &nbsp; number &nbsp; = &nbsp; (int)stack.Pop(); <br />
<br />
三：泛型的好处 <br />
1、一次性的开发、测试和部署代码，通过任何类型来重用它 <br />
2、编译器支持和类型安全 <br />
3、不会强行对值类型进行装箱和取消装箱，或者对引用类型进行向下强制类型转换，所以性能得到显著提高。 <br />
注：值类型大概可以提高200%，引用类型大概为100% <br />
<br />
四：多个泛型 <br />
1、单个类型可以定义多个泛型 <br />
<br />
五：泛型别名 <br />
1、在文件头部使用using &nbsp; 为特定类型取别名，别名作用范围是整个文件 <br />
2、例子 <br />
using &nbsp; List &nbsp; = &nbsp; LinkedList &lt;int,string&gt; ; <br />
class &nbsp; ListClient <br />
{ <br />
static &nbsp; void &nbsp; Main(string[] &nbsp; args) <br />
{ <br />
List &nbsp; list &nbsp; = &nbsp; new &nbsp; List(); <br />
list.AddHead(123, "AAA "); <br />
} <br />
} <br />
<br />
五：泛型约束 <br />
(1)、派生约束 <br />
如： <br />
public &nbsp; class &nbsp; LinkedList &lt;K,T&gt; &nbsp; where &nbsp; K:IComparable <br />
{ <br />
T &nbsp; Find(K &nbsp; key) <br />
{ <br />
if &nbsp; (str.Key.CompareTo(key) &nbsp; == &nbsp; 0)//只有实现这个接口才可比较 <br />
} <br />
} <br />
<br />
注意: <br />
1、所有的派生约束必须放在类的实际派生列表之后 <br />
如：public &nbsp; class &nbsp; LinkedList &lt;K,T&gt; :IEnumerable &lt;T&gt; &nbsp; where &nbsp; K:IComparable &lt;K&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; {...} <br />
2、一个泛型参数上可以约束多个接口（用逗号分隔） <br />
public &nbsp; class &nbsp; LinkedList &lt;K,T&gt; &nbsp; where &nbsp; K:IComparable &lt;K&gt; ,IConvertible <br />
3、在一个约束中最多只能使用一个基类 <br />
4、约束的基类不能是密封类或静态类 <br />
5、不能将System.Delegate或System.Array约束为基类 <br />
6、可以同时约束一个基类以及一个或多个接口，但是该基类必须首先出现在派生约束列表中。 <br />
7、C#允许你将另一个泛型参数指定为约束 <br />
public &nbsp; class &nbsp; MyClass &lt;T,U&gt; &nbsp; where &nbsp; T:U <br />
{...} <br />
8、可以自己定义基类或接口进行泛型约束 <br />
9、自定义的接口或基类必须与泛型具有一致的可见性 <br />
<br />
(2)、构造函数约束 <br />
如： <br />
class &nbsp; Node &nbsp; &lt;K,T&gt; &nbsp; where &nbsp; T:new() <br />
{ <br />
} <br />
注意： <br />
1、可以将构造函数的约束和派生约束结合起来，前提是构造函数的约束出现在约束列表中的最后 <br />
<br />
(3)、引用/值类型约束 <br />
1、可以使用struct约束将泛型参数约束为值类型(如int、bool、enum),或任何自定义结构 <br />
2、同样可以使用class约束将泛型参数约束为引用类型 <br />
3、不能将引用/值类型约束与基类约束一起使用，因为基类约束涉及到类 <br />
4、不能使用结构和默认构造函数约束，因为默认构造函数约束也涉及到类 <br />
5、虽然您可以使用类和默认构造函数约束，但是这样做没有任何价值 <br />
6、可以将引用/值类型约束与接口约束组合起来，前提是引用/值类型约束出现在约束列表的开头 <br />
<br />
六：泛型和强制类型转换 <br />
1、C#编译器只允许将泛型参数隐式转换到Object或约束指定的类型 <br />
如： <br />
interface &nbsp; IS{...} <br />
class &nbsp; BaseClass{...} <br />
class &nbsp; MyClass &lt;T&gt; &nbsp; where &nbsp; T:BaseClass,IS <br />
{ <br />
void &nbsp; SomeMethod(T &nbsp; t) <br />
{ <br />
IS &nbsp; obj1 &nbsp; = &nbsp; t; <br />
BaseClass &nbsp; obj2 &nbsp; = &nbsp; t; <br />
object &nbsp; obj3 &nbsp; = &nbsp; t; <br />
} <br />
} <br />
2、编译器允许你将泛型参数显示强制转换到其他任何借口，但不能将其转换到类 <br />
interface &nbsp; IS{...} <br />
class &nbsp; SomeClass{...} <br />
class &nbsp; MyClass &nbsp; &lt;T&gt; &nbsp; //没有约束 <br />
{ <br />
void &nbsp; SomeMethod(T &nbsp; t) <br />
{ <br />
IS &nbsp; obj1 &nbsp; = &nbsp; (IS)t; &nbsp; //可以 <br />
SomeClass &nbsp; obj2 &nbsp; = &nbsp; (SomeClass)t &nbsp; //不可以 <br />
} <br />
} <br />
3、可以使用临时的Object变量，将泛型参数强制转换到其他任何类型 <br />
class &nbsp; SomeClass{...} <br />
class &nbsp; MyClass &nbsp; &lt;T&gt; &nbsp; <br />
{ <br />
void &nbsp; SomeMethod(T &nbsp; t) <br />
{ <br />
object &nbsp; temp &nbsp; = &nbsp; t; <br />
SomeClass &nbsp; obj &nbsp; = &nbsp; (SomeClass)temp;//可以 <br />
} <br />
} <br />
注意：这里只是告诉你这样写是可以的，但是要不要这样写？不要这样写，因为如果t确实没有继承SomeClass编译没错但是运行就会出错 <br />
4、解决上面强制转换问题，可以使用is和as运算符进行判断 <br />
public &nbsp; class &nbsp; MyClass &lt;T&gt; <br />
{ <br />
public &nbsp; void &nbsp; SomeMethod &lt;T &nbsp; t&gt; <br />
{ <br />
if &nbsp; (t &nbsp; is &nbsp; int &nbsp; ){...} <br />
if &nbsp; (t &nbsp; is &nbsp; LinkedList &lt;int,string&gt; ){...} <br />
//如果泛型参数的类型是所查询的类型，则is运算符返回true <br />
string &nbsp; str &nbsp; = &nbsp; t &nbsp; as &nbsp; string; <br />
//如果这写类型兼容，则as将执行强制类型转换，否则将返回null <br />
if &nbsp; (str &nbsp; != &nbsp; null){...} <br />
LinkedList &lt;int,string&gt; &nbsp; list &nbsp; = &nbsp; t &nbsp; as &nbsp; LinkedList &lt;int,string&gt; ; <br />
if &nbsp; (list &nbsp; != &nbsp; null){...} <br />
} <br />
} <br />
<br />
七：继承和泛型 <br />
1、在从泛型基类派生，可以提供类型实参，而不是基类泛型参数 <br />
public &nbsp; class &nbsp; BaseClass &lt;T&gt; {...} <br />
public &nbsp; class &nbsp; SubClass:BaseClass &lt;int&gt; <br />
2、如果子类是泛型，而非具体的类型实参，则可以使用子类泛型参数作为泛型基类的指定类型 <br />
public &nbsp; class &nbsp; BaseClass &lt;TT&gt; {...} <br />
public &nbsp; class &nbsp; SubClass &lt;T&gt; :BaseClass &lt;T&gt; {...} <br />
3、在使用子类泛型参数时，必须在子类级别重复在基类级别规定的任何约束 <br />
4、基类可以定义其签名使用泛型参数的虚礼方法，在重写它们时，子类必须在方法签名中提供相应的类型。 <br />
如： <br />
public &nbsp; class &nbsp; BaseClass &lt;T&gt; <br />
{ <br />
public &nbsp; virtual &nbsp; T &nbsp; SomeMethod() <br />
{...} <br />
} <br />
public &nbsp; class &nbsp; SubClass:BaseClass &lt;int&gt; <br />
{ <br />
public &nbsp; override &nbsp; int &nbsp; SomeMethod() <br />
{...} <br />
} <br />
5、如果该子类是泛型，则它还可以在重写时使用它自己的泛型参数 <br />
public &nbsp; class &nbsp; SubClass &lt;T&gt; :BaseClass &lt;T&gt; <br />
{ <br />
public &nbsp; override &nbsp; T &nbsp; SomeMethod() <br />
{...} <br />
} <br />
6、你可以定义泛型接口、泛型抽象类，甚至泛型抽象方法。 <br />
7、不能对泛型参数使用+或+=之类的运算符 <br />
public &nbsp; class &nbsp; Calculator &lt;T&gt; <br />
{ <br />
public &nbsp; T &nbsp; Add &nbsp; (T &nbsp; arg1,T &nbsp; arg2) <br />
{ <br />
return &nbsp; arg1 &nbsp; + &nbsp; arg2;//错误 <br />
} <br />
} <br />
但是我们可以通过泛型抽象类、接口来实现在个功能，因为实现泛型抽象类、接口我们就已经明确传一个参数了，就可以执行诸如+这样的操作。 <br />
<br />
八：泛型方法 <br />
1、方法可以定义特定于其执行范围的泛型参数 <br />
public &nbsp; class &nbsp; MyClass &lt;T&gt; <br />
{ <br />
public &nbsp; void &nbsp; MyMethod &lt;X&gt; (X &nbsp; x) <br />
{...} <br />
} <br />
2、即使各包含类根本不使用泛型，你也可以定义方法特定的泛型参数 <br />
public &nbsp; class &nbsp; MyClass <br />
{ <br />
public &nbsp; void &nbsp; MyMethod &lt;T&gt; (T &nbsp; t) <br />
{...} <br />
} <br />
注意：该功能只使用于方法，属性，索引器只能使用在类的作用范围中定义的泛型参数。 <br />
3、调用泛型方法 <br />
MyClass &nbsp; obj &nbsp; = &nbsp; new &nbsp; MyClass(); <br />
obj.MyMethod &lt;int&gt; (3); <br />
也可以这样： <br />
MyClass &nbsp; obj &nbsp; = &nbsp; new &nbsp; MyClass(); <br />
obj.MyMethod(3); &nbsp; //该功能称为泛型推理 <br />
4、泛型方法也可以有自己的泛型参数约束 <br />
pubic &nbsp; class &nbsp; MyClass <br />
{ <br />
public &nbsp; void &nbsp; SomeMethod &lt;T&gt; (T &nbsp; t) &nbsp; where &nbsp; T:IComparable &lt;T&gt; <br />
{...} <br />
} <br />
5、子类方法实现不能重复在父级别出现的约束 <br />
public &nbsp; class &nbsp; BaseClass <br />
{ <br />
public &nbsp; virtual &nbsp; void &nbsp; SomeMethod &lt;T&gt; (T &nbsp; t)where &nbsp; T:new() <br />
{...} <br />
} <br />
pubic &nbsp; class &nbsp; SubClass:BaseClass <br />
{ <br />
public &nbsp; override &nbsp; void &nbsp; SomeMethod &lt;T&gt; (T &nbsp; t)//不能再有约束 <br />
{...} <br />
} <br />
6、静态方法 <br />
静态方法可以定义特定的泛型参数和约束 <br />
public &nbsp; class &nbsp; MyClass &lt;T&gt; <br />
{ <br />
public &nbsp; static &nbsp; T &nbsp; SomeMethod &lt;X&gt; (T &nbsp; t,X &nbsp; x) <br />
{...} <br />
} <br />
int &nbsp; number &nbsp; = &nbsp; MyClass &lt;int&gt; .SomeMethod &lt;string&gt; (3, "AAA "); <br />
或者：int &nbsp; mumber &nbsp; = &nbsp; MyClass &lt;int&gt; .SomeMethod(3, "AAA "); <br />
<br />
九：泛型委托 <br />
1、在某个类中定义的委托可以利用该类的泛型参数 <br />
2、委托也可以定义自己的泛型参数</strong>
<img src ="http://www.blogjava.net/xiaoyi/aggbug/230494.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoyi/" target="_blank">可爱的小毅</a> 2008-09-22 19:25 <a href="http://www.blogjava.net/xiaoyi/articles/230494.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小毅的验证码</title><link>http://www.blogjava.net/xiaoyi/articles/228185.html</link><dc:creator>可爱的小毅</dc:creator><author>可爱的小毅</author><pubDate>Wed, 10 Sep 2008 08:42:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoyi/articles/228185.html</guid><wfw:comment>http://www.blogjava.net/xiaoyi/comments/228185.html</wfw:comment><comments>http://www.blogjava.net/xiaoyi/articles/228185.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoyi/comments/commentRss/228185.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoyi/services/trackbacks/228185.html</trackback:ping><description><![CDATA[<strong style="color: red"><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff">checkCode.java</span></span></span></span>
<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: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></span></span></span><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff"><span style="color: #000000">package&nbsp;com.yz.checkcode;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;java.io.IOException;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;java.io.PrintWriter;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;javax.servlet.ServletException;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;javax.servlet.ServletOutputStream;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;javax.servlet.http.HttpServlet;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;javax.servlet.http.HttpServletRequest;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;javax.servlet.http.HttpServletResponse;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;javax.servlet.http.HttpSession;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;com.sun.image.codec.jpeg.JPEGCodec;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;com.sun.image.codec.jpeg.JPEGImageEncoder;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;java.awt.*;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;java.awt.image.*;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;java.util.*;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />public&nbsp;class&nbsp;checkCode&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;extends&nbsp;HttpServlet&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;public&nbsp;void&nbsp;doGet(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;throws&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletException,&nbsp;IOException&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.reset();&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType("image/jpeg");&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setHeader("Pragma","No-cache");<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setHeader("Cache-Control","no-cache");<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setHeader("Expires",&nbsp;&nbsp;&nbsp;"Tues,&nbsp;&nbsp;&nbsp;01&nbsp;&nbsp;&nbsp;Jan&nbsp;&nbsp;&nbsp;1980&nbsp;&nbsp;&nbsp;00:00:00&nbsp;&nbsp;&nbsp;GMT");&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />//在内存中创建图象&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;width&nbsp;=&nbsp;58,&nbsp;height&nbsp;=&nbsp;18;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedImage&nbsp;image&nbsp;=&nbsp;new&nbsp;BufferedImage(width,&nbsp;height,&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedImage.TYPE_INT_RGB);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />//获取图形上下文&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Graphics&nbsp;g&nbsp;=&nbsp;image.getGraphics();&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />//生成随机类&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Random&nbsp;random&nbsp;=&nbsp;new&nbsp;Random();&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />//设定背景色&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.setColor(new&nbsp;Color(201&nbsp;+&nbsp;random.nextInt(50),&nbsp;201&nbsp;+&nbsp;random.nextInt(50),&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;201&nbsp;+&nbsp;random.nextInt(50)));&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.fillRect(0,&nbsp;0,&nbsp;width,&nbsp;height);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />//设定字体&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.setFont(new&nbsp;Font("Times&nbsp;new&nbsp;Roman",&nbsp;Font.PLAIN,&nbsp;18));&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />//画边框&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />g.setColor(new&nbsp;Color(255,140,0));&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />g.drawRect(0,0,width-1,height-1);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />//随机产生155条干扰线，使图象中的认证码不易被其它程序探测到&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.setColor(new&nbsp;Color(160&nbsp;+&nbsp;random.nextInt(41),&nbsp;160&nbsp;+&nbsp;random.nextInt(41),&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;160&nbsp;+&nbsp;random.nextInt(41)));&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">&nbsp;155</span></span></span></span></span><span style="color: #ff0000"><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff">;&nbsp;i++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;x&nbsp;</span></span></span></span></span><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff"><span style="color: #0000ff">=&nbsp;random.nextInt(width);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">int&nbsp;y&nbsp;</span></span></span></span></span><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff"><span style="color: #0000ff">=&nbsp;random.nextInt(height);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">int&nbsp;xl&nbsp;</span></span></span></span></span><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff"><span style="color: #0000ff">=&nbsp;random.nextInt(12);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">int&nbsp;yl&nbsp;</span></span></span></span></span><span style="color: #0000ff"><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff">=&nbsp;random.nextInt(12);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span></span></span><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff"><span style="color: #ff0000">g.drawLine(x,&nbsp;y,&nbsp;x&nbsp;+&nbsp;xl,&nbsp;y&nbsp;+&nbsp;yl);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />//取随机产生的认证码<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;src&nbsp;</span><span style="color: #0000ff">=&nbsp;"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKMNOPQRSTUVWXYZ0123456789"</span></span></span></span></span><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff"><span style="color: #ff0000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sRand&nbsp;</span><span style="color: #0000ff">=&nbsp;""</span></span></span></span></span><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff"><span style="color: #ff0000">;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;</span><span style="color: #0000ff">=&nbsp;0;&nbsp;</span></span></span></span></span><span style="color: #ff0000"><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff">i&nbsp;&lt;&nbsp;4;&nbsp;i++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;position</span></span></span></span></span><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff"><span style="color: #0000ff">=random.nextInt(src.length());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">String&nbsp;radomChar</span></span></span></span></span><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff"><span style="color: #0000ff">=src.charAt(position)+"";<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">sRand&nbsp;+</span></span></span></span></span><span style="color: #0000ff"><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff">=&nbsp;radomChar;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></span></span></span></span><span style="color: #ff0000"><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff">//将认证码显示到图象中&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.setColor(new&nbsp;Color(20&nbsp;+&nbsp;random.nextInt(111),&nbsp;20&nbsp;+&nbsp;random.nextInt(111),&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;+&nbsp;random.nextInt(111)));&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />//调用函数出来的颜色相同，可能是因为种子太接近，所以只能直接生成&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.drawString(&nbsp;&nbsp;radomChar,&nbsp;13&nbsp;*&nbsp;i&nbsp;+&nbsp;6,&nbsp;16);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />//图象生效&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.dispose();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpSession&nbsp;session&nbsp;</span></span></span></span></span><span style="color: #0000ff"><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff">=&nbsp;request.getSession(true);&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span></span></span><span style="color: #ff0000"><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff">//将认证码存入SESSION&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.setAttribute("checkCode",&nbsp;sRand);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />//输出图象到页面&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletOutputStream&nbsp;out&nbsp;</span></span></span></span></span><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff"><span style="color: #0000ff">=&nbsp;response.getOutputStream();&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">JPEGImageEncoder&nbsp;encoder&nbsp;</span></span></span></span></span><span style="color: #0000ff"><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff">=&nbsp;JPEGCodec.createJPEGEncoder(out);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span></span></span><span style="color: #ff0000"><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff">encoder.encode(image);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("验证码：\t"+sRand);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(sRand);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.flush();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.close();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />}&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></span></span></span></span></div>
<br />
<span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff">getKey.java</span></span></span></span>
<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: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></span></span></span><span style="color: #000000"><span style="color: red"><span style="color: #f43d3d"><span style="color: #f43d3d"><span style="color: #ff00ff">package&nbsp;com.yz.checkcode;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;java.io.IOException;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;java.io.PrintWriter;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;javax.servlet.ServletException;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;javax.servlet.ServletInputStream;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;javax.servlet.http.HttpServlet;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;javax.servlet.http.HttpServletRequest;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;javax.servlet.http.HttpServletResponse;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;javax.servlet.http.HttpSession;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />public&nbsp;class&nbsp;getKey&nbsp;extends&nbsp;HttpServlet&nbsp;{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;doGet(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;ServletException,&nbsp;IOException&nbsp;{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.doPost(request,&nbsp;response);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;doPost(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;ServletException,&nbsp;IOException&nbsp;{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType("text/html");<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setCharacterEncoding("utf-8");<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintWriter&nbsp;out&nbsp;=&nbsp;response.getWriter();&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;key=request.getSession().getAttribute("checkCode").toString();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(key);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.flush();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.close();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />}</span></span></span></span></span></div>
</strong>
<img src ="http://www.blogjava.net/xiaoyi/aggbug/228185.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoyi/" target="_blank">可爱的小毅</a> 2008-09-10 16:42 <a href="http://www.blogjava.net/xiaoyi/articles/228185.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小毅小议Java字符串</title><link>http://www.blogjava.net/xiaoyi/articles/224118.html</link><dc:creator>可爱的小毅</dc:creator><author>可爱的小毅</author><pubDate>Mon, 25 Aug 2008 04:22:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoyi/articles/224118.html</guid><wfw:comment>http://www.blogjava.net/xiaoyi/comments/224118.html</wfw:comment><comments>http://www.blogjava.net/xiaoyi/articles/224118.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoyi/comments/commentRss/224118.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoyi/services/trackbacks/224118.html</trackback:ping><description><![CDATA[<strong>首先我们来看以个小例子：<br />
</strong>
<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"><strong><img id="Codehighlighter1_18_200_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_200_Open_Text.style.display='none'; Codehighlighter1_18_200_Closed_Image.style.display='inline'; Codehighlighter1_18_200_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_18_200_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_18_200_Closed_Text.style.display='none'; Codehighlighter1_18_200_Open_Image.style.display='inline'; Codehighlighter1_18_200_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><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;</span><span id="Codehighlighter1_18_200_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"  alt="" /></span></strong><span id="Codehighlighter1_18_200_Open_Text"><strong><span style="color: #000000">{<br />
<img id="Codehighlighter1_62_84_Open_Image" onclick="this.style.display='none'; Codehighlighter1_62_84_Open_Text.style.display='none'; Codehighlighter1_62_84_Closed_Image.style.display='inline'; Codehighlighter1_62_84_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_62_84_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_62_84_Closed_Text.style.display='none'; Codehighlighter1_62_84_Open_Image.style.display='inline'; Codehighlighter1_62_84_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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;changeStr(String&nbsp;str)&nbsp;</span><span id="Codehighlighter1_62_84_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"  alt="" /></span></strong><span id="Codehighlighter1_62_84_Open_Text"><strong><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">welcome</span><span style="color: #000000">"</span></strong><span style="color: #000000"><strong>;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</strong></span></span><span style="color: #000000"><br />
<strong><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_127_198_Open_Image" onclick="this.style.display='none'; Codehighlighter1_127_198_Open_Text.style.display='none'; Codehighlighter1_127_198_Closed_Image.style.display='inline'; Codehighlighter1_127_198_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_127_198_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_127_198_Closed_Text.style.display='none'; Codehighlighter1_127_198_Open_Image.style.display='inline'; Codehighlighter1_127_198_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><strong><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 id="Codehighlighter1_127_198_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"  alt="" /></span></strong><span id="Codehighlighter1_127_198_Open_Text"><strong><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1234</span><span style="color: #000000">"</span></strong><span style="color: #000000"><strong>;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changeStr(str);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(str);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</strong></span></span><span style="color: #000000"><br />
<strong><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</strong></span></span></div>
<span style="color: #0000ff; background-color: #ffffff"><strong>输出结果是什么？wecome?<span style="color: #ff0000">你错了，是 1234&nbsp; 为什么呢？原因如下：<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"  alt="" /><span style="color: #008000">&lt;!--</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;对象：一个对象可以被很多引用关联&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />引用：一个引用只能关联一个对象<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />Ojbect&nbsp;xiaoyi1;&nbsp;Ojbect&nbsp;xiaoyi1;&nbsp;Ojbect&nbsp;xiaoyi1;&nbsp;这里创建了三个引用&nbsp;并没有创建对象<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />xiaoyi&nbsp;xy&nbsp;=&nbsp;new&nbsp;xiaoyi();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />xy是一个引用，&nbsp;new&nbsp;xiaoyi()这个在内存中创建了一个对象，这个对象被&nbsp;xy这个引用所关联<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />引用就好比一个句柄对象，通过xy这个引用（句柄对象）&nbsp;可以操作&nbsp;new&nbsp;xiaoyi()对象<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />引用也是一个值，只不过他的值记录了其关联对象的地址信息而已。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />public&nbsp;void&nbsp;test(String&nbsp;s1){&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />只要是参数在方法内使用时，都会产生参数的副本的,记住这一点，无论java，C#,C,C++。&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />1&gt;String&nbsp;temp&nbsp;=&nbsp;s1;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />这里s1只是一个引用的副本，是实际S1引用的一副本，好比你main方法内str实际引用的副本<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />2&gt;s1="welcome";<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />在这里进行交换的时候你交换的仅仅是副本而已，虽然S1和main方法的str指向同一个对象，但是你交换的是main方法str引用的副本而已<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />另外：String&nbsp;str="XIAOYI";<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />str.toLowerCase()&nbsp;;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />System.out.println(str);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />结果是什么？xiaoyi?&nbsp;那么你又错了。。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />因为在你调用toLowerCase(）方法是会新开辟内存来保存转换完成的对象，而你并没有把原来对象的引用重新关联被转换后的对象，所以输出的仍然是转换前的对象&nbsp;XIAOYI,要想改变结果怎么办？<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />重新关联:str=str.toLowerCase();&nbsp;&nbsp;这样就可以了<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">--&gt;</span></div>
<br />
关于&nbsp; Java字符串池(String pool)<br />
<p>public&nbsp;&nbsp; class&nbsp;&nbsp; Sub{&nbsp;&nbsp; <br />
String&nbsp;&nbsp; str=new&nbsp;&nbsp; String( "good ");&nbsp;&nbsp; <span style="color: #008080">//一个地址的传递,new出来的对象，在内存中已经开辟了空间<br />
</span>&nbsp;<br />
public&nbsp;&nbsp; static&nbsp;&nbsp; void&nbsp;&nbsp; main(String&nbsp;&nbsp; args[]){&nbsp;&nbsp; <br />
Sub&nbsp;&nbsp; ex=new&nbsp;&nbsp; Sub();&nbsp;&nbsp; <br />
ex.change(ex.str);&nbsp;&nbsp; <br />
System.out.println(ex.str);&nbsp;&nbsp; <br />
}&nbsp;&nbsp; <br />
public&nbsp;&nbsp; void&nbsp;&nbsp; change(String&nbsp;&nbsp; bb){&nbsp;&nbsp; <br />
bb= "test&nbsp;&nbsp; ok "&nbsp;}</p>
<p><font color="#ff0000"><span style="color: #008080"><font color="#ff0000">问题：</font>String&nbsp;&nbsp; str=new&nbsp;&nbsp; String( "good ") 和String str="good"的区别？</span></font></p>
<p><font color="#ff0000">体会1：</font><clk><span style="color: #008080">str是一个String类型的对象引用，他是Sub类的类变量。当ex对象引用使用change方法时。bb是str引用的拷贝。可以通过bb访问原str的对象。而方法里当bb="test ok"的时候他把bb指向了一个新的对象中。这时候我们就要引出<nobr oncontextmenu="return false" onmousemove="kwM(0)" id="clickeyekey0" onmouseover="kwE(event,0, this)" style="border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick="kwC(event,0)" onmouseout="kwL(event,this)">java</nobr>字符串的概念了。</span></clk></p>
<p><font color="#ff0000">体会2：</font><span style="color: #008080">字符串池（转）</span><font face="Courier New, Courier, Monospace, Simsun" color="#0000ff">String a = "Hello";<br />
String b = "Hello";<br />
String c =&nbsp;new<strong><font color="#000000"> </font></strong>String("Hello");<br />
String d = new&nbsp;String("Hello");<br />
System.out.println(a == b);<br />
System.out.println(b == c);<br />
System.out.println(c == d);<br />
System.out.println(a.equals(b));<br />
System.out.println(b.equals(c));<br />
System.out.println(c.equals(d));</font></p>
<p><span style="color: #008080">结果是true，false，false，true，true，true。这里就涉及到字符串池。&#8220;字符串池&#8221;，是Java为了提高内存利用率而采用的措施：</span></p>
<p><span style="color: #008080">当遇到String a = "Hello"; 这样的语句时，Java会先在字符串池中寻找是否已经存在"Hello"这个字符串,如果没有，则建立字符串"Hello"对象，然后变量 a 指向这个地址；然后遇到语句String b = "Hello"，这时字符串池中已经有 "Hello"了，所以直接让变量b也指向这个地址，省去了重新分配的麻烦。而在Java中，操作符&#8220;==&#8221;对于两个基本型来说，是判断其内容是否相同，对于两个对象来说，则是判断其地址是否相同，所以a == b返回 true。</span></p>
<p><span style="color: #008080">那么String c = new String("Hello")又如何处理呢？如果是这种写法，则不会去访问字符串池，而是先为变量 c 开辟空间，然后将值写入空间。所以a == c返回false，c == d同样返回false。</span></p>
<p><span style="color: #008080">至于String的equals方法，因为它比较的不是对象的地址，而是对象的值，所以都返回true就不奇怪了。</span></p>
<p><span style="color: #008080">Java虚拟机有一个字符串池，保存着几乎所有的字符串对象。字符串表达式总是指向字符串池中的一个对象。使用new操作创建的字符串对象不指向字符串池中的对象但是可以使用intern方法使其指向字符串池中的对象.（注：如果池中已经有相同的字符串--使用equals方法确定，则直接返回池中的字符串，否则先将字符串添加到池中，再返回）。池中两个相等的字符串如果使用&#8220;==&#8221;来比较将返回真。</span></p>
<p><span style="color: #008080"><font color="#ff0000">总结：</font>也就是在change这个方法中，bb已经写入str空间。而bb在等于&#8220;test ok&#8221;的时候是运用字符串池创建了对象中了。所以不能赋值。可以这样 bb="test ok"; this.str=bb;</span></p>
<p><span style="color: #008080">理解有错误，希望看到的高手可以告诉我，以便我可以更好的修改，谢谢了。</span></p>
<br />
</span></strong></span>
 <img src ="http://www.blogjava.net/xiaoyi/aggbug/224118.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoyi/" target="_blank">可爱的小毅</a> 2008-08-25 12:22 <a href="http://www.blogjava.net/xiaoyi/articles/224118.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>