﻿<?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-ice world-随笔分类-Java</title><link>http://www.blogjava.net/icewee/category/49008.html</link><description>There is nothing too difficult if you put your heart into it.</description><language>zh-cn</language><lastBuildDate>Thu, 12 Dec 2013 11:50:35 GMT</lastBuildDate><pubDate>Thu, 12 Dec 2013 11:50:35 GMT</pubDate><ttl>60</ttl><item><title>Java日常随意记</title><link>http://www.blogjava.net/icewee/archive/2013/11/21/406622.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Thu, 21 Nov 2013 04:49:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2013/11/21/406622.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/406622.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2013/11/21/406622.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/406622.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/406622.html</trackback:ping><description><![CDATA[
<div style="font-family: Tahoma; font-size: 14pt;"><span style="font-family: Tahoma; font-size: 12pt;"><br />2013年12月10日<br />---------------------------<br />冒泡排序<br /><div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_25_325_Open_Image" onclick="this.style.display='none'; Codehighlighter1_25_325_Open_Text.style.display='none'; Codehighlighter1_25_325_Closed_Image.style.display='inline'; Codehighlighter1_25_325_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none;" id="Codehighlighter1_25_325_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_25_325_Closed_Text.style.display='none'; Codehighlighter1_25_325_Open_Image.style.display='inline'; Codehighlighter1_25_325_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif"><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> bubble(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">[] array) </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_25_325_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_25_325_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">boolean</span><span style="color: rgb(0, 0, 0);"> swaped </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">true</span><span style="color: rgb(0, 0, 0);">;<br /><img id="Codehighlighter1_103_322_Open_Image" onclick="this.style.display='none'; Codehighlighter1_103_322_Open_Text.style.display='none'; Codehighlighter1_103_322_Closed_Image.style.display='inline'; Codehighlighter1_103_322_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_103_322_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_103_322_Closed_Text.style.display='none'; Codehighlighter1_103_322_Open_Image.style.display='inline'; Codehighlighter1_103_322_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> t </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">; t </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);"> array.length </span><span style="color: rgb(0, 0, 0);">&amp;&amp;</span><span style="color: rgb(0, 0, 0);"> swaped; t</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">) </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_103_322_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_103_322_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swaped </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">false</span><span style="color: rgb(0, 0, 0);">;<br /><img id="Codehighlighter1_170_318_Open_Image" onclick="this.style.display='none'; Codehighlighter1_170_318_Open_Text.style.display='none'; Codehighlighter1_170_318_Closed_Image.style.display='inline'; Codehighlighter1_170_318_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_170_318_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_170_318_Closed_Text.style.display='none'; Codehighlighter1_170_318_Open_Image.style.display='inline'; Codehighlighter1_170_318_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> i </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">; i </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);"> array.length </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);"> t; i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">) </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_170_318_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_170_318_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img id="Codehighlighter1_205_313_Open_Image" onclick="this.style.display='none'; Codehighlighter1_205_313_Open_Text.style.display='none'; Codehighlighter1_205_313_Closed_Image.style.display='inline'; Codehighlighter1_205_313_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_205_313_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_205_313_Closed_Text.style.display='none'; Codehighlighter1_205_313_Open_Image.style.display='inline'; Codehighlighter1_205_313_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (array[i] </span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"> array[i </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">]) </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_205_313_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_205_313_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" />                   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> temp </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> array[i];<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; array[i] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> array[i </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">];<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; array[i </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> temp;<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swaped </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">true</span><span style="color: rgb(0, 0, 0);">;<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></span><span style="color: rgb(0, 0, 0);"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></span><span style="color: rgb(0, 0, 0);"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></span><span style="color: rgb(0, 0, 0);"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;&nbsp;&nbsp; }</span></span></div><br /><br />2013年11月26日<br />---------------------------<br />1、String的split方法<br />平常总是这样用，String str = "a,b,c,d,e"; String[] arr = str.split(",");<br />其实还可以这样用，String lan = "Java;C#?C++:C"; String si = lan.split("[;?:]"); 返回的是字符串数组{"Java", "C#", "C++", "C"}<br /><br /><br />2013年11月21日<br />---------------------------<br /></span><br /><span style="font-family: Tahoma; font-size: 12pt;">1、Java对象池知多少？<br />示例：String s1 = "abc"; String s2 = "abc"; s1 == s2 返回ture还是false？只要不是new出来的都先从对象池中读取，因此结果为true，两个变量指向的是同一块内存空间地址。<br /><br />Java除了String类使用了对象池以外，还有5个基本类型的封装类：Byte、Short、Integer、Long和Character，例如：Integer inA = 20; Integer inB = 20; 那么 inA == inB 的结果为true，其他类与此相同，不做示例。<br /><br /><strong>特别注意：</strong><br />(1)浮点型的两个封装类Float和Double并没有参与对象池；<br />(2)整形封装类(Byte、Short、Integer和Long)只有数值小于或等于127时才使用对象池，例如：Integer x = 128; Integer y = 128; x == y的结果为false。<br /></span><br /><span style="font-family: Tahoma; font-size: 12pt;">2、Java变量命名规范<br />A. String #name = "Joe";<br />B. int $age = 30;<br />C. Double _height = 174.4;<br />D. float ~temp = 37.6;<br />以上A到D，哪个无法通过编译？答案是A和D，因为Java变量名只允许字母、下划线(_)、美元符($)开头，那么 int _ = 30; String $$ = "I DO";可以吗？答案是完全可以，但很少有人这样定义变量名，虽然没有违法命名规范，但最后我估计程序员自己都会被自己绕晕。<br /><br />3、0和1能标识布尔值吗？<br />int flag = 0;<br />if (flag) {<br />&nbsp;&nbsp;&nbsp;&nbsp;System.out.print("error");<br />}<br />error会打印吗？不会，因为根本就不会编译通过，编译器会提示flag是int类型而不是boolean类型，如果你会有这种想法可能之前学过C，C总的0和1可以标识布尔的。<br /><br />4、静态导入<br />例：<br />ClassA.java<br /><div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);">&nbsp;bing.test.sub1;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br /><img id="Codehighlighter1_45_102_Open_Image" onclick="this.style.display='none'; Codehighlighter1_45_102_Open_Text.style.display='none'; Codehighlighter1_45_102_Closed_Image.style.display='inline'; Codehighlighter1_45_102_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none;" id="Codehighlighter1_45_102_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_45_102_Closed_Text.style.display='none'; Codehighlighter1_45_102_Open_Image.style.display='inline'; Codehighlighter1_45_102_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;ClassA&nbsp;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_45_102_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_45_102_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;MAX_INT&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;Integer.MAX_VALUE;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div><br /><br /><br />ClassB.java<br /><div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);"> bing.test.sub2;<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> bing.test.sub1.ClassA.MAX_INT;<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" /><br /><img id="Codehighlighter1_91_173_Open_Image" onclick="this.style.display='none'; Codehighlighter1_91_173_Open_Text.style.display='none'; Codehighlighter1_91_173_Closed_Image.style.display='inline'; Codehighlighter1_91_173_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none;" id="Codehighlighter1_91_173_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_91_173_Closed_Text.style.display='none'; Codehighlighter1_91_173_Open_Image.style.display='inline'; Codehighlighter1_91_173_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);"> ClassB </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_91_173_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_91_173_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img id="Codehighlighter1_134_171_Open_Image" onclick="this.style.display='none'; Codehighlighter1_134_171_Open_Text.style.display='none'; Codehighlighter1_134_171_Closed_Image.style.display='inline'; Codehighlighter1_134_171_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_134_171_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_134_171_Closed_Text.style.display='none'; Codehighlighter1_134_171_Open_Image.style.display='inline'; Codehighlighter1_134_171_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp; </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> main(String[] args) </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_134_171_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_134_171_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" />    System.out.println(MAX_INT);<br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp; }</span></span><span style="color: rgb(0, 0, 0);"><br /><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div><br />输出：2147483647。不仅仅可以静态导入其他类的静态属性还可以导入静态方法，这些特性在实际开发中很少见。<br /><br /><br /><br /><br /><br /><br /><br /></span><br /><br /></div> 
 
 
 
 
 
<img src ="http://www.blogjava.net/icewee/aggbug/406622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2013-11-21 12:49 <a href="http://www.blogjava.net/icewee/archive/2013/11/21/406622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FTPClient上传文件蜗牛速度的解决方法</title><link>http://www.blogjava.net/icewee/archive/2013/09/13/404052.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Fri, 13 Sep 2013 08:32:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2013/09/13/404052.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/404052.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2013/09/13/404052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/404052.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/404052.html</trackback:ping><description><![CDATA[Apache Commons的FTPClient局域网上传文件速度本应该很快的，但却在实际开发中发现上传一个文件蜗牛速度，都是因为调用了如下API：<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->ftpClient.storeFile(fileName,&nbsp;inputStream)</div><br />原因是因为默认缓冲区大小是1024，也就是1K，当然慢了，在调用上传API之前重新修改以下默认设置即可，如将缓冲区改为10M，API：<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->ftpClient.setBufferSize(1024&nbsp;*&nbsp;1024&nbsp;*&nbsp;10)</div><img src ="http://www.blogjava.net/icewee/aggbug/404052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2013-09-13 16:32 <a href="http://www.blogjava.net/icewee/archive/2013/09/13/404052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HttpClientUtils</title><link>http://www.blogjava.net/icewee/archive/2013/07/27/402028.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Sat, 27 Jul 2013 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2013/07/27/402028.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/402028.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2013/07/27/402028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/402028.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/402028.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 备用。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->import&nbsp;java.io.BufferedReader;import&nbsp;java.io.IOException;import&nbsp;java.io.InputStream;...&nbsp;&nbsp;<a href='http://www.blogjava.net/icewee/archive/2013/07/27/402028.html'>阅读全文</a><img src ="http://www.blogjava.net/icewee/aggbug/402028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2013-07-27 11:53 <a href="http://www.blogjava.net/icewee/archive/2013/07/27/402028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java获取本机IP列表</title><link>http://www.blogjava.net/icewee/archive/2013/07/19/401739.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Fri, 19 Jul 2013 03:10:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2013/07/19/401739.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/401739.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2013/07/19/401739.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/401739.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/401739.html</trackback:ping><description><![CDATA[<div>Java获取本地IP地址方法网上搜一箩筐，但基本上都是获得一个IP，实际开发中一台电脑很可能有多个IP地址，如多网卡，或者安装了VM Ware虚拟机，就会虚拟出其他的网卡，那么传统的方法得到的一个IP地址就不全面了，下面贴出获取本机IP列表的方法：<br /><div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_0_82_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_82_Open_Text.style.display='none'; Codehighlighter1_0_82_Closed_Image.style.display='inline'; Codehighlighter1_0_82_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none;" id="Codehighlighter1_0_82_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_0_82_Closed_Text.style.display='none'; Codehighlighter1_0_82_Open_Image.style.display='inline'; Codehighlighter1_0_82_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_0_82_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_0_82_Open_Text"><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;IceWee&nbsp;2013.07.19<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;获取本地IP列表（针对多网卡情况）<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span></span><span style="color: rgb(0, 0, 0);"><br /><img id="Codehighlighter1_132_914_Open_Image" onclick="this.style.display='none'; Codehighlighter1_132_914_Open_Text.style.display='none'; Codehighlighter1_132_914_Closed_Image.style.display='inline'; Codehighlighter1_132_914_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none;" id="Codehighlighter1_132_914_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_132_914_Closed_Text.style.display='none'; Codehighlighter1_132_914_Open_Image.style.display='inline'; Codehighlighter1_132_914_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;List</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">String</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;getLocalIPList()&nbsp;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_132_914_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_132_914_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">String</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;ipList&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;ArrayList</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">String</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">();<br /><img id="Codehighlighter1_195_832_Open_Image" onclick="this.style.display='none'; Codehighlighter1_195_832_Open_Text.style.display='none'; Codehighlighter1_195_832_Closed_Image.style.display='inline'; Codehighlighter1_195_832_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_195_832_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_195_832_Closed_Text.style.display='none'; Codehighlighter1_195_832_Open_Image.style.display='inline'; Codehighlighter1_195_832_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_195_832_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_195_832_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumeration</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">NetworkInterface</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;networkInterfaces&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;NetworkInterface.getNetworkInterfaces();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NetworkInterface&nbsp;networkInterface;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumeration</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">InetAddress</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;inetAddresses;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InetAddress&nbsp;inetAddress;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;ip;<br /><img id="Codehighlighter1_461_828_Open_Image" onclick="this.style.display='none'; Codehighlighter1_461_828_Open_Text.style.display='none'; Codehighlighter1_461_828_Closed_Image.style.display='inline'; Codehighlighter1_461_828_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_461_828_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_461_828_Closed_Text.style.display='none'; Codehighlighter1_461_828_Open_Image.style.display='inline'; Codehighlighter1_461_828_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">&nbsp;(networkInterfaces.hasMoreElements())&nbsp;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_461_828_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_461_828_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;networkInterface&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;networkInterfaces.nextElement();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inetAddresses&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;networkInterface.getInetAddresses();<br /><img id="Codehighlighter1_620_823_Open_Image" onclick="this.style.display='none'; Codehighlighter1_620_823_Open_Text.style.display='none'; Codehighlighter1_620_823_Closed_Image.style.display='inline'; Codehighlighter1_620_823_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_620_823_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_620_823_Closed_Text.style.display='none'; Codehighlighter1_620_823_Open_Image.style.display='inline'; Codehighlighter1_620_823_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">&nbsp;(inetAddresses.hasMoreElements())&nbsp;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_620_823_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_620_823_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inetAddress&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;inetAddresses.nextElement();<br /><img id="Codehighlighter1_739_817_Open_Image" onclick="this.style.display='none'; Codehighlighter1_739_817_Open_Text.style.display='none'; Codehighlighter1_739_817_Closed_Image.style.display='inline'; Codehighlighter1_739_817_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_739_817_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_739_817_Closed_Text.style.display='none'; Codehighlighter1_739_817_Open_Image.style.display='inline'; Codehighlighter1_739_817_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(inetAddress&nbsp;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;&amp;</span><span style="color: rgb(0, 0, 0);">&nbsp;inetAddress&nbsp;</span><span style="color: rgb(0, 0, 255);">instanceof</span><span style="color: rgb(0, 0, 0);">&nbsp;Inet4Address)&nbsp;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_739_817_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_739_817_Open_Text"><span style="color: rgb(0, 0, 0);">{&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;IPV4</span><span style="color: rgb(0, 128, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ip&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;inetAddress.getHostAddress();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;ipList.add(ip);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br /><img id="Codehighlighter1_860_888_Open_Image" onclick="this.style.display='none'; Codehighlighter1_860_888_Open_Text.style.display='none'; Codehighlighter1_860_888_Closed_Image.style.display='inline'; Codehighlighter1_860_888_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_860_888_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_860_888_Closed_Text.style.display='none'; Codehighlighter1_860_888_Open_Image.style.display='inline'; Codehighlighter1_860_888_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);">&nbsp;(SocketException&nbsp;e)&nbsp;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_860_888_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_860_888_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;ipList;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div><br /><br /><br /><br /></div><img src ="http://www.blogjava.net/icewee/aggbug/401739.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2013-07-19 11:10 <a href="http://www.blogjava.net/icewee/archive/2013/07/19/401739.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Exception loading sessions from persistent storage</title><link>http://www.blogjava.net/icewee/archive/2012/07/12/382853.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Thu, 12 Jul 2012 02:15:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2012/07/12/382853.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/382853.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2012/07/12/382853.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/382853.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/382853.html</trackback:ping><description><![CDATA[<div>出现以下异常信息，一般删除下Tomcat的work目录即可<div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /><span style="color: rgb(0, 0, 0);">严重</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);"> IOException </span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);"> loading persisted sessions</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);"> java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">io</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">EOFException<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">io</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">EOFException<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">io</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">ObjectInputStream</span><span style="color: rgb(128, 0, 128);">$PeekInputStream</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">readFully(ObjectInputStream</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">2280</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">io</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">ObjectInputStream</span><span style="color: rgb(128, 0, 128);">$BlockDataInputStream</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">readShort(ObjectInputStream</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">2749</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">io</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">ObjectInputStream</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">readStreamHeader(ObjectInputStream</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">779</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">io</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">ObjectInputStream</span><span style="color: rgb(0, 0, 0);">.&lt;</span><span style="color: rgb(0, 0, 0);">init</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">(ObjectInputStream</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">279</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">util</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">CustomObjectInputStream</span><span style="color: rgb(0, 0, 0);">.&lt;</span><span style="color: rgb(0, 0, 0);">init</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">(CustomObjectInputStream</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">58</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">session</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">StandardManager</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">doLoad(StandardManager</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">246</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">session</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">StandardManager</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">load(StandardManager</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">204</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">session</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">StandardManager</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">startInternal(StandardManager</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">491</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">util</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">LifecycleBase</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">start(LifecycleBase</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">150</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">core</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">StandardContext</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">startInternal(StandardContext</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">5282</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">util</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">LifecycleBase</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">start(LifecycleBase</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">150</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">core</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">ContainerBase</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">addChildInternal(ContainerBase</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">895</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">core</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">ContainerBase</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">addChild(ContainerBase</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">871</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">core</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">StandardHost</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">addChild(StandardHost</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">615</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">startup</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">HostConfig</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">deployDescriptor(HostConfig</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">649</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">startup</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">HostConfig</span><span style="color: rgb(128, 0, 128);">$DeployDescriptor</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">run(HostConfig</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">1585</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">util</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">concurrent</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">Executors</span><span style="color: rgb(128, 0, 128);">$RunnableAdapter</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">call(Executors</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">441</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">util</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">concurrent</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">FutureTask</span><span style="color: rgb(128, 0, 128);">$Sync</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">innerRun(FutureTask</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">303</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">util</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">concurrent</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">FutureTask</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">run(FutureTask</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">138</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">util</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">concurrent</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">ThreadPoolExecutor</span><span style="color: rgb(128, 0, 128);">$Worker</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">runTask(ThreadPoolExecutor</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">886</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">util</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">concurrent</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">ThreadPoolExecutor</span><span style="color: rgb(128, 0, 128);">$Worker</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">run(ThreadPoolExecutor</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">908</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">lang</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">Thread</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">run(Thread</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">662</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: rgb(128, 0, 0);">2012</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(128, 0, 0);">7</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(128, 0, 0);">12</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(128, 0, 0);">10</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">08</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">04</span><span style="color: rgb(0, 0, 0);"> org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">session</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">StandardManager startInternal<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />严重</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);"> Exception loading sessions from persistent storage<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">io</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">EOFException<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">io</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">ObjectInputStream</span><span style="color: rgb(128, 0, 128);">$PeekInputStream</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">readFully(ObjectInputStream</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">2280</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">io</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">ObjectInputStream</span><span style="color: rgb(128, 0, 128);">$BlockDataInputStream</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">readShort(ObjectInputStream</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">2749</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">io</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">ObjectInputStream</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">readStreamHeader(ObjectInputStream</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">779</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">io</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">ObjectInputStream</span><span style="color: rgb(0, 0, 0);">.&lt;</span><span style="color: rgb(0, 0, 0);">init</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">(ObjectInputStream</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">279</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">util</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">CustomObjectInputStream</span><span style="color: rgb(0, 0, 0);">.&lt;</span><span style="color: rgb(0, 0, 0);">init</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">(CustomObjectInputStream</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">58</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">session</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">StandardManager</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">doLoad(StandardManager</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">246</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">session</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">StandardManager</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">load(StandardManager</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">204</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">session</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">StandardManager</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">startInternal(StandardManager</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">491</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">util</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">LifecycleBase</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">start(LifecycleBase</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">150</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">core</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">StandardContext</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">startInternal(StandardContext</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">5282</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">util</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">LifecycleBase</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">start(LifecycleBase</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">150</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">core</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">ContainerBase</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">addChildInternal(ContainerBase</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">895</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">core</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">ContainerBase</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">addChild(ContainerBase</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">871</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">core</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">StandardHost</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">addChild(StandardHost</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">615</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">startup</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">HostConfig</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">deployDescriptor(HostConfig</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">649</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at org</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">catalina</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">startup</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">HostConfig</span><span style="color: rgb(128, 0, 128);">$DeployDescriptor</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">run(HostConfig</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">1585</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">util</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">concurrent</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">Executors</span><span style="color: rgb(128, 0, 128);">$RunnableAdapter</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">call(Executors</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">441</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">util</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">concurrent</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">FutureTask</span><span style="color: rgb(128, 0, 128);">$Sync</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">innerRun(FutureTask</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">303</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">util</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">concurrent</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">FutureTask</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">run(FutureTask</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">138</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">util</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">concurrent</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">ThreadPoolExecutor</span><span style="color: rgb(128, 0, 128);">$Worker</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">runTask(ThreadPoolExecutor</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">886</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">util</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">concurrent</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">ThreadPoolExecutor</span><span style="color: rgb(128, 0, 128);">$Worker</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">run(ThreadPoolExecutor</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">908</span><span style="color: rgb(0, 0, 0);">)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp; at java</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">lang</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">Thread</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">run(Thread</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">java</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(128, 0, 0);">662</span><span style="color: rgb(0, 0, 0);">)</span></div><br /></div><img src ="http://www.blogjava.net/icewee/aggbug/382853.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2012-07-12 10:15 <a href="http://www.blogjava.net/icewee/archive/2012/07/12/382853.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Tomcat SSL 服务端/客户端双向认证のApache HttpClient（二）</title><link>http://www.blogjava.net/icewee/archive/2012/06/05/379983.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Tue, 05 Jun 2012 01:32:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2012/06/05/379983.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/379983.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2012/06/05/379983.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/379983.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/379983.html</trackback:ping><description><![CDATA[ 
本演示例程是继<a id="viewpost1_TitleUrl" class="singleposttitle" href="http://www.blogjava.net/icewee/archive/2012/06/04/379947.html"><font color="#223355">Java Tomcat SSL 服务端/客户端双向认证（一）</font></a>，密钥库可证书的生成脚本不再重复黏贴，仅仅是用程序来代替浏览器访问服务端。<br />例程中使用到了Apache HttpClient库，版本为4.1.3<br />全部依赖库：<br />commons-logging-1.1.1.jar<br />httpclient-4.1.3.jar<br />httpcore-4.1.4.jar<br />httpmime-4.1.3.jar(上传文件使用)<br /><br />在（一）中的程序包中创建一个客户端类：HttpsClient<br />HttpsClient.java<br /><div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);"> com.icesoft.client;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> java.io.BufferedReader;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> java.io.File;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> java.io.FileInputStream;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> java.io.InputStream;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> java.io.InputStreamReader;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> java.security.KeyStore;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.apache.http.HttpEntity;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.apache.http.HttpResponse;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.apache.http.client.HttpClient;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.apache.http.client.methods.HttpGet;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.apache.http.conn.scheme.Scheme;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.apache.http.conn.ssl.SSLSocketFactory;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.apache.http.impl.client.DefaultHttpClient;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.apache.http.util.EntityUtils;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /><br /><img id="Codehighlighter1_582_3211_Open_Image" onclick="this.style.display='none'; Codehighlighter1_582_3211_Open_Text.style.display='none'; Codehighlighter1_582_3211_Closed_Image.style.display='inline'; Codehighlighter1_582_3211_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none;" id="Codehighlighter1_582_3211_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_582_3211_Closed_Text.style.display='none'; Codehighlighter1_582_3211_Open_Image.style.display='inline'; Codehighlighter1_582_3211_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);"> HttpsClient </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_582_3211_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_582_3211_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp; <br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);"> String KEY_STORE_TYPE_JKS </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">jks</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);"> String KEY_STORE_TYPE_P12 </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">PKCS12</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);"> String SCHEME_HTTPS </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">https</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> HTTPS_PORT </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">8443</span><span style="color: rgb(0, 0, 0);">;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);"> String HTTPS_URL </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">https://127.0.0.1:8443/HttpClientSSL/sslServlet</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);"> String KEY_STORE_CLIENT_PATH </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">E:/ssl/client.p12</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);"> String KEY_STORE_TRUST_PATH </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">E:/ssl/client.truststore</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);"> String KEY_STORE_PASSWORD </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">123456</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);"> String KEY_STORE_TRUST_PASSWORD </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">123456</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img id="Codehighlighter1_1231_1243_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1231_1243_Open_Text.style.display='none'; Codehighlighter1_1231_1243_Closed_Image.style.display='inline'; Codehighlighter1_1231_1243_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_1231_1243_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1231_1243_Closed_Text.style.display='none'; Codehighlighter1_1231_1243_Open_Image.style.display='inline'; Codehighlighter1_1231_1243_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> main(String[] args) </span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);"> Exception </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_1231_1243_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1231_1243_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ssl();<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp; }</span></span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp; <br /><img id="Codehighlighter1_1291_3208_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1291_3208_Open_Text.style.display='none'; Codehighlighter1_1291_3208_Closed_Image.style.display='inline'; Codehighlighter1_1291_3208_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_1291_3208_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1291_3208_Closed_Text.style.display='none'; Codehighlighter1_1291_3208_Open_Image.style.display='inline'; Codehighlighter1_1291_3208_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> ssl() </span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);"> Exception </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_1291_3208_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1291_3208_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpClient httpClient </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> DefaultHttpClient();<br /><img id="Codehighlighter1_1356_3130_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1356_3130_Open_Text.style.display='none'; Codehighlighter1_1356_3130_Closed_Image.style.display='inline'; Codehighlighter1_1356_3130_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_1356_3130_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1356_3130_Closed_Text.style.display='none'; Codehighlighter1_1356_3130_Open_Image.style.display='inline'; Codehighlighter1_1356_3130_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);"> </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_1356_3130_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1356_3130_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KeyStore keyStore&nbsp; </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> KeyStore.getInstance(KEY_STORE_TYPE_P12);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KeyStore trustStore&nbsp; </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> KeyStore.getInstance(KEY_STORE_TYPE_JKS);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStream ksIn </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> FileInputStream(KEY_STORE_CLIENT_PATH);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStream tsIn </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> FileInputStream(</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> File(KEY_STORE_TRUST_PATH));<br /><img id="Codehighlighter1_1682_1843_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1682_1843_Open_Text.style.display='none'; Codehighlighter1_1682_1843_Closed_Image.style.display='inline'; Codehighlighter1_1682_1843_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_1682_1843_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1682_1843_Closed_Text.style.display='none'; Codehighlighter1_1682_1843_Open_Image.style.display='inline'; Codehighlighter1_1682_1843_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);"> </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_1682_1843_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1682_1843_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; keyStore.load(ksIn, KEY_STORE_PASSWORD.toCharArray());<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trustStore.load(tsIn, KEY_STORE_TRUST_PASSWORD.toCharArray());<br /><img id="Codehighlighter1_1853_1996_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1853_1996_Open_Text.style.display='none'; Codehighlighter1_1853_1996_Closed_Image.style.display='inline'; Codehighlighter1_1853_1996_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_1853_1996_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1853_1996_Closed_Text.style.display='none'; Codehighlighter1_1853_1996_Open_Image.style.display='inline'; Codehighlighter1_1853_1996_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">finally</span><span style="color: rgb(0, 0, 0);"> </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_1853_1996_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1853_1996_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img id="Codehighlighter1_1872_1888_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1872_1888_Open_Text.style.display='none'; Codehighlighter1_1872_1888_Closed_Image.style.display='inline'; Codehighlighter1_1872_1888_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_1872_1888_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1872_1888_Closed_Text.style.display='none'; Codehighlighter1_1872_1888_Open_Image.style.display='inline'; Codehighlighter1_1872_1888_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);"> </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_1872_1888_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1872_1888_Open_Text"><span style="color: rgb(0, 0, 0);">{ ksIn.close(); }</span></span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);"> (Exception ignore) </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_1915_1916_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1915_1916_Open_Text"><span style="color: rgb(0, 0, 0);">{}</span></span><span style="color: rgb(0, 0, 0);"><br /><img id="Codehighlighter1_1938_1954_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1938_1954_Open_Text.style.display='none'; Codehighlighter1_1938_1954_Closed_Image.style.display='inline'; Codehighlighter1_1938_1954_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_1938_1954_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1938_1954_Closed_Text.style.display='none'; Codehighlighter1_1938_1954_Open_Image.style.display='inline'; Codehighlighter1_1938_1954_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);"> </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_1938_1954_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1938_1954_Open_Text"><span style="color: rgb(0, 0, 0);">{ tsIn.close(); }</span></span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);"> (Exception ignore) </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_1981_1982_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1981_1982_Open_Text"><span style="color: rgb(0, 0, 0);">{}</span></span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SSLSocketFactory socketFactory </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> SSLSocketFactory(keyStore, KEY_STORE_PASSWORD, trustStore);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Scheme sch </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Scheme(SCHEME_HTTPS, HTTPS_PORT, socketFactory);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; httpClient.getConnectionManager().getSchemeRegistry().register(sch);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpGet httpget </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> HttpGet(HTTPS_URL);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">executing request</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> httpget.getRequestLine());<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpResponse response </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> httpClient.execute(httpget);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpEntity entity </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> response.getEntity();<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">----------------------------------------</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(response.getStatusLine());<br /><img id="Codehighlighter1_2685_3079_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2685_3079_Open_Text.style.display='none'; Codehighlighter1_2685_3079_Closed_Image.style.display='inline'; Codehighlighter1_2685_3079_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_2685_3079_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_2685_3079_Closed_Text.style.display='none'; Codehighlighter1_2685_3079_Open_Image.style.display='inline'; Codehighlighter1_2685_3079_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (entity </span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">) </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_2685_3079_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2685_3079_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Response content length: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> entity.getContentLength());<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader bufferedReader </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> BufferedReader(</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> InputStreamReader(entity.getContent()));<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String text;<br /><img id="Codehighlighter1_2988_3025_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2988_3025_Open_Text.style.display='none'; Codehighlighter1_2988_3025_Closed_Image.style.display='inline'; Codehighlighter1_2988_3025_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_2988_3025_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_2988_3025_Closed_Text.style.display='none'; Codehighlighter1_2988_3025_Open_Image.style.display='inline'; Codehighlighter1_2988_3025_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);"> ((text </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> bufferedReader.readLine()) </span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">) </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_2988_3025_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2988_3025_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(text);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bufferedReader.close();<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EntityUtils.consume(entity);<br /><img id="Codehighlighter1_3140_3205_Open_Image" onclick="this.style.display='none'; Codehighlighter1_3140_3205_Open_Text.style.display='none'; Codehighlighter1_3140_3205_Closed_Image.style.display='inline'; Codehighlighter1_3140_3205_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_3140_3205_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_3140_3205_Closed_Text.style.display='none'; Codehighlighter1_3140_3205_Open_Image.style.display='inline'; Codehighlighter1_3140_3205_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">finally</span><span style="color: rgb(0, 0, 0);"> </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_3140_3205_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_3140_3205_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; httpClient.getConnectionManager().shutdown();<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp; }</span></span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span></div><br /><br />启动Tomcat，运行HttpsClient，控制台返回：<br /><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/icewee/ssl/30.png" width="750" height="650" /><br /><br />OK，和使用浏览器访问得到的结果一模一样！<br /><br />全文完！<br /> <img src ="http://www.blogjava.net/icewee/aggbug/379983.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2012-06-05 09:32 <a href="http://www.blogjava.net/icewee/archive/2012/06/05/379983.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Tomcat SSL 服务端/客户端双向认证（一）</title><link>http://www.blogjava.net/icewee/archive/2012/06/04/379947.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Mon, 04 Jun 2012 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2012/06/04/379947.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/379947.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2012/06/04/379947.html#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/379947.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/379947.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: SSL&#8212;&#8212;Secure Sockets Layer双向认证(个人理解)：客户端认证：客户端通过浏览器访问某一网站时，如果该网站为HTTPS网站，浏览器会自动检测系统中是否存在该网站的信任证书，如果没有信任证书，浏览器一般会拒绝访问，IE会有一个继续访问的链接，但地址栏是红色，给予用户警示作用，即客户端验证服务端并不是强制性的，可以没有服务端的信任证书，当然是否继续访问完全取...&nbsp;&nbsp;<a href='http://www.blogjava.net/icewee/archive/2012/06/04/379947.html'>阅读全文</a><img src ="http://www.blogjava.net/icewee/aggbug/379947.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2012-06-04 17:36 <a href="http://www.blogjava.net/icewee/archive/2012/06/04/379947.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java MD5校验工具类</title><link>http://www.blogjava.net/icewee/archive/2012/06/01/379760.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Fri, 01 Jun 2012 09:57:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2012/06/01/379760.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/379760.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2012/06/01/379760.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/379760.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/379760.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 之前使用到了NIO的FileChannel做文件快速阅读，后来发现存在一个巨大的BUG，使用它会一直不释放文件句柄，即生成MD5的文件不能操作（移动或删除等），这个BUG网上吵得沸沸扬扬，至今没有解决，毕竟是SUN的BUG，解铃还需系铃人啊！咱只好乖乖的使用文件分块读取的方法，这种方式要求生成MD5和验证的时候得使用相同的缓存大小。MD5Utils.javaCode highlighting pr...&nbsp;&nbsp;<a href='http://www.blogjava.net/icewee/archive/2012/06/01/379760.html'>阅读全文</a><img src ="http://www.blogjava.net/icewee/aggbug/379760.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2012-06-01 17:57 <a href="http://www.blogjava.net/icewee/archive/2012/06/01/379760.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ExceptionUtil 获取异常堆栈内容</title><link>http://www.blogjava.net/icewee/archive/2012/05/26/379270.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Sat, 26 May 2012 03:45:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2012/05/26/379270.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/379270.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2012/05/26/379270.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/379270.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/379270.html</trackback:ping><description><![CDATA[ 
这个类一般在记录程序日志时可能会用到。<br />ExceptionUtil.java<br /><div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_0_87_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_87_Open_Text.style.display='none'; Codehighlighter1_0_87_Closed_Image.style.display='inline'; Codehighlighter1_0_87_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none;" id="Codehighlighter1_0_87_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_0_87_Closed_Text.style.display='none'; Codehighlighter1_0_87_Open_Image.style.display='inline'; Codehighlighter1_0_87_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_0_87_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_0_87_Open_Text"><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;p&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;异常工具类<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;/p&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@author</span><span style="color: rgb(0, 128, 0);">&nbsp;IceWee<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;@date&nbsp;2012-4-19<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@version</span><span style="color: rgb(0, 128, 0);">&nbsp;1.0<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span></span><span style="color: rgb(0, 0, 0);"><br /><img id="Codehighlighter1_116_646_Open_Image" onclick="this.style.display='none'; Codehighlighter1_116_646_Open_Text.style.display='none'; Codehighlighter1_116_646_Closed_Image.style.display='inline'; Codehighlighter1_116_646_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none;" id="Codehighlighter1_116_646_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_116_646_Closed_Text.style.display='none'; Codehighlighter1_116_646_Open_Image.style.display='inline'; Codehighlighter1_116_646_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;ExceptionUtil&nbsp;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_116_646_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_116_646_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img id="Codehighlighter1_120_200_Open_Image" onclick="this.style.display='none'; Codehighlighter1_120_200_Open_Text.style.display='none'; Codehighlighter1_120_200_Closed_Image.style.display='inline'; Codehighlighter1_120_200_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_120_200_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_120_200_Closed_Text.style.display='none'; Codehighlighter1_120_200_Open_Image.style.display='inline'; Codehighlighter1_120_200_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_120_200_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_120_200_Open_Text"><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;p&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;将异常堆栈信息以字符串的格式返回<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;/p&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@param</span><span style="color: rgb(0, 128, 0);">&nbsp;e&nbsp;异常对象<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span></span><span style="color: rgb(0, 0, 0);"><br /><img id="Codehighlighter1_261_642_Open_Image" onclick="this.style.display='none'; Codehighlighter1_261_642_Open_Text.style.display='none'; Codehighlighter1_261_642_Closed_Image.style.display='inline'; Codehighlighter1_261_642_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_261_642_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_261_642_Closed_Text.style.display='none'; Codehighlighter1_261_642_Open_Image.style.display='inline'; Codehighlighter1_261_642_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;String&nbsp;createStackTrackMessage(Exception&nbsp;e)&nbsp;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_261_642_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_261_642_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;messsage&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;StringBuffer();<br /><img id="Codehighlighter1_326_609_Open_Image" onclick="this.style.display='none'; Codehighlighter1_326_609_Open_Text.style.display='none'; Codehighlighter1_326_609_Closed_Image.style.display='inline'; Codehighlighter1_326_609_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_326_609_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_326_609_Closed_Text.style.display='none'; Codehighlighter1_326_609_Open_Image.style.display='inline'; Codehighlighter1_326_609_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(e&nbsp;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">)&nbsp;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_326_609_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_326_609_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;messsage.append(e.getClass()).append(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">).append(e.getMessage()).append(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">\n</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StackTraceElement[]&nbsp;elements&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;e.getStackTrace();<br /><img id="Codehighlighter1_521_605_Open_Image" onclick="this.style.display='none'; Codehighlighter1_521_605_Open_Text.style.display='none'; Codehighlighter1_521_605_Closed_Image.style.display='inline'; Codehighlighter1_521_605_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_521_605_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_521_605_Closed_Text.style.display='none'; Codehighlighter1_521_605_Open_Image.style.display='inline'; Codehighlighter1_521_605_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;(StackTraceElement&nbsp;stackTraceElement&nbsp;:&nbsp;elements)&nbsp;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_521_605_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_521_605_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;messsage.append(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">\t</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">).append(stackTraceElement.toString()).append(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">\n</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;messsage.toString();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div><br /><br /> <img src ="http://www.blogjava.net/icewee/aggbug/379270.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2012-05-26 11:45 <a href="http://www.blogjava.net/icewee/archive/2012/05/26/379270.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Zip Utils 压缩/解压缩工具包</title><link>http://www.blogjava.net/icewee/archive/2012/05/26/379267.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Sat, 26 May 2012 02:51:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2012/05/26/379267.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/379267.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2012/05/26/379267.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/379267.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/379267.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 实际开发中可能会用到压缩或解压缩，底层借助于apache的zip，依赖jar文件：ant-1.7.1.jarZipUtilsTester.javaCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->public&nbsp;static&nbsp;void&...&nbsp;&nbsp;<a href='http://www.blogjava.net/icewee/archive/2012/05/26/379267.html'>阅读全文</a><img src ="http://www.blogjava.net/icewee/aggbug/379267.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2012-05-26 10:51 <a href="http://www.blogjava.net/icewee/archive/2012/05/26/379267.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java数字证书对文件/加密/解密/签名/校验签名</title><link>http://www.blogjava.net/icewee/archive/2012/05/21/378719.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Mon, 21 May 2012 09:14:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2012/05/21/378719.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/378719.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2012/05/21/378719.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/378719.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/378719.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文中的Base64Utils.java在其他随笔中已经贴出。Java证书生成命令如下，不做过多解释，可先到网上查询下资料，本文仅提供工具类代码：把生成的密钥库和证书都放到类的同包下。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->keytool&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/icewee/archive/2012/05/21/378719.html'>阅读全文</a><img src ="http://www.blogjava.net/icewee/aggbug/378719.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2012-05-21 17:14 <a href="http://www.blogjava.net/icewee/archive/2012/05/21/378719.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java RSA加密解密</title><link>http://www.blogjava.net/icewee/archive/2012/05/19/378570.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Sat, 19 May 2012 08:54:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2012/05/19/378570.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/378570.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2012/05/19/378570.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/378570.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/378570.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 该工具类中用到了BASE64，需要借助第三方类库：javabase64-1.3.1.jar注意：RSA加密明文最大长度117字节，解密要求密文最大长度为128字节，所以在加密和解密的过程中需要分块进行。RSA加密对明文的长度是有限制的，如果加密数据过大会抛出如下异常：Code highlighting produced by Actipro CodeHighlighter (freeware)ht...&nbsp;&nbsp;<a href='http://www.blogjava.net/icewee/archive/2012/05/19/378570.html'>阅读全文</a><img src ="http://www.blogjava.net/icewee/aggbug/378570.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2012-05-19 16:54 <a href="http://www.blogjava.net/icewee/archive/2012/05/19/378570.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java AES文件加解密</title><link>http://www.blogjava.net/icewee/archive/2012/05/19/378556.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Sat, 19 May 2012 05:43:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2012/05/19/378556.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/378556.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2012/05/19/378556.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/378556.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/378556.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 之前写了DES加解密，AES几乎与之相同，不同的是底层key的位数而已，不过这些对于我们使用者都是透明的。AESUtils.javaCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->package&nbsp;demo.security;import&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/icewee/archive/2012/05/19/378556.html'>阅读全文</a><img src ="http://www.blogjava.net/icewee/aggbug/378556.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2012-05-19 13:43 <a href="http://www.blogjava.net/icewee/archive/2012/05/19/378556.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java DES文件加密解密  javax.crypto.BadPaddingException: Given final block not properly padded</title><link>http://www.blogjava.net/icewee/archive/2012/05/19/378554.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Sat, 19 May 2012 05:19:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2012/05/19/378554.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/378554.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2012/05/19/378554.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/378554.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/378554.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本工具类经过测试可用，之前写的没有使用CipherInputStream和CipherOutputStream，生成的加密文件与源文件大小不一致，加密时没有问题，解密时总是抛出如下异常：Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->Exception...&nbsp;&nbsp;<a href='http://www.blogjava.net/icewee/archive/2012/05/19/378554.html'>阅读全文</a><img src ="http://www.blogjava.net/icewee/aggbug/378554.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2012-05-19 13:19 <a href="http://www.blogjava.net/icewee/archive/2012/05/19/378554.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>className.class.getResourceAsStream()与ClassLoader.getSystemResourceAsStream() 的区别</title><link>http://www.blogjava.net/icewee/archive/2012/05/04/377371.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Fri, 04 May 2012 05:31:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2012/05/04/377371.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/377371.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2012/05/04/377371.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/377371.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/377371.html</trackback:ping><description><![CDATA[<p><span style="font-size: small;"><span style="font-size: medium;"><strong>className.class.getResourceAsStream</strong></span> ：</span></p><p><span style="font-size: small;">&nbsp;<br /></span><span style="font-size: small;">一： 要加载的文件和.class文件在<span style="color: rgb(255, 0, 0);">同一目录</span>下，例如：com.x.y 下有类Test.class ,同时有资源文件config.properties</span></p><p><span style="font-size: small;">那么，应该有如下代码：</span></p><p><span style="font-size: small;">//前面没有&#8220;/&#8221;代表当前类的目录</span></p><p><span style="font-size: small;">InputStream is1 = Test.class.getResourceAsStream("config.properties");<br />System.out.println(is1);// 不为null</span></p><p>&nbsp;</p><p><span style="font-size: small;">第二：在Test.class目录的<span style="color: rgb(255, 0, 0);">子目录</span>下，例如：<span style="color: rgb(255, 0, 0);">com.x.y</span> 下有类Test.class ,同时在 <span style="color: rgb(255, 0, 0);">com.x.y.prop</span>目录下有资源文件config.properties</span></p><p><span style="font-size: small;">那么，应该有如下代码：</span></p><p><span style="font-size: small;">//前面没有&#8220;/&#8221;代表当前类的目录</span></p><p><span style="font-size: small;">InputStream is2 = Test.class.getResourceAsStream("prop/config.properties");<br />System.out.println(is2);//不为null</span></p><p><span style="font-size: small;">&nbsp;</span></p><p><span style="font-size: small;">第三：<span style="color: rgb(255, 0, 0);">不在同目录</span>下，也<span style="color: rgb(255, 0, 0);">不在子目录</span>下，例如：<span style="color: rgb(255, 0, 0);">com.x.y</span> 下有类Test.class ,同时在 <span style="color: rgb(255, 0, 0);">com.m.n</span> 目录下有资源文件config.properties</span></p><p><span style="font-size: small;">那么，应该有如下代码：</span></p><p><span style="font-size: small;">//<span style="color: rgb(255, 0, 0);">前面有&#8220;/&#8221;<span style="color: rgb(0, 0, 0);">,</span></span>代表了工程的根目录</span></p><p><span style="font-size: small;">InputStream is3 = Test.class.getResourceAsStream("/com/m/n/config.properties");</span></p><p><span style="font-size: small;">System.out.println(is3);//不为null</span></p><p> </p><p> </p><p><span style="font-size: small;"><strong><span style="font-size: medium;">ClassLoader.getSystemResourceAsStream</span></strong> ：</span></p><p> </p><p><span style="font-size: small;">和<span style="font-size: small;">className.class.getResourceAsStream 的第三种取得的路径一样，</span><span style="color: red; font-size: small;">但少了&#8220;/&#8221;</span></span></p><p>&nbsp;<p><span style="font-size: small;">InputStream is4 = ClassLoader.getSystemResourceAsStream("properties/PayManagment_Config.properties");<br />System.out.println(is4);//不为null</span></p><img src ="http://www.blogjava.net/icewee/aggbug/377371.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2012-05-04 13:31 <a href="http://www.blogjava.net/icewee/archive/2012/05/04/377371.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(ParameterizedType) getClass().getGenericSuperclass().getActualTypeArguments()[0]得到的是什么？</title><link>http://www.blogjava.net/icewee/archive/2012/04/27/376741.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Fri, 27 Apr 2012 01:13:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2012/04/27/376741.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/376741.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2012/04/27/376741.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/376741.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/376741.html</trackback:ping><description><![CDATA[
<div>这种写法一般都会在基类中看到，而且是使用了JAVA泛型的，比如我们J2EE中的BaseDAO什么的，请看代码，其实简写了，分开写就明了了。<br /><br /><br /><strong>基类：<br /></strong><div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;java.lang.reflect.ParameterizedType;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;java.lang.reflect.Type;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br /><img id="Codehighlighter1_112_691_Open_Image" onclick="this.style.display='none'; Codehighlighter1_112_691_Open_Text.style.display='none'; Codehighlighter1_112_691_Closed_Image.style.display='inline'; Codehighlighter1_112_691_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none;" id="Codehighlighter1_112_691_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_112_691_Closed_Text.style.display='none'; Codehighlighter1_112_691_Open_Image.style.display='inline'; Codehighlighter1_112_691_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">abstract</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;SuperClass</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">T</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_112_691_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_112_691_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;Class</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">T</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;beanClass;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;@SuppressWarnings(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">unchecked</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)<br /><img id="Codehighlighter1_198_404_Open_Image" onclick="this.style.display='none'; Codehighlighter1_198_404_Open_Text.style.display='none'; Codehighlighter1_198_404_Closed_Image.style.display='inline'; Codehighlighter1_198_404_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_198_404_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_198_404_Closed_Text.style.display='none'; Codehighlighter1_198_404_Open_Image.style.display='inline'; Codehighlighter1_198_404_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;SuperClass()&nbsp;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_198_404_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_198_404_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">super</span><span style="color: rgb(0, 0, 0);">();<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParameterizedType&nbsp;parameterizedType&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;(ParameterizedType)&nbsp;getClass().getGenericSuperclass();<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type[]&nbsp;types&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;parameterizedType.getActualTypeArguments();<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beanClass&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;(Class</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">T</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">)&nbsp;types[</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">];<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /><br /><img id="Codehighlighter1_439_462_Open_Image" onclick="this.style.display='none'; Codehighlighter1_439_462_Open_Text.style.display='none'; Codehighlighter1_439_462_Closed_Image.style.display='inline'; Codehighlighter1_439_462_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_439_462_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_439_462_Closed_Text.style.display='none'; Codehighlighter1_439_462_Open_Image.style.display='inline'; Codehighlighter1_439_462_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;Class</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">T</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;getBeanClass()&nbsp;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_439_462_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_439_462_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;beanClass;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /><br /><img id="Codehighlighter1_511_544_Open_Image" onclick="this.style.display='none'; Codehighlighter1_511_544_Open_Text.style.display='none'; Codehighlighter1_511_544_Closed_Image.style.display='inline'; Codehighlighter1_511_544_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_511_544_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_511_544_Closed_Text.style.display='none'; Codehighlighter1_511_544_Open_Image.style.display='inline'; Codehighlighter1_511_544_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;setBeanClass(Class</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">T</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;beanClass)&nbsp;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_511_544_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_511_544_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.beanClass&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;beanClass;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img id="Codehighlighter1_588_687_Open_Image" onclick="this.style.display='none'; Codehighlighter1_588_687_Open_Text.style.display='none'; Codehighlighter1_588_687_Closed_Image.style.display='inline'; Codehighlighter1_588_687_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_588_687_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_588_687_Closed_Text.style.display='none'; Codehighlighter1_588_687_Open_Image.style.display='inline'; Codehighlighter1_588_687_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_588_687_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_588_687_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SuperClass</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">Cat</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;superClass&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;SubClass();<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(superClass.getBeanClass());<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div><br /><br /><strong>子类：</strong><br /><div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_46_87_Open_Image" onclick="this.style.display='none'; Codehighlighter1_46_87_Open_Text.style.display='none'; Codehighlighter1_46_87_Closed_Image.style.display='inline'; Codehighlighter1_46_87_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none;" id="Codehighlighter1_46_87_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_46_87_Closed_Text.style.display='none'; Codehighlighter1_46_87_Open_Image.style.display='inline'; Codehighlighter1_46_87_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif"><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);"> SubClass </span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);"> SuperClass</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">Cat</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"> </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_46_87_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_46_87_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp; <br /><img id="Codehighlighter1_69_83_Open_Image" onclick="this.style.display='none'; Codehighlighter1_69_83_Open_Text.style.display='none'; Codehighlighter1_69_83_Closed_Image.style.display='inline'; Codehighlighter1_69_83_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_69_83_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_69_83_Closed_Text.style.display='none'; Codehighlighter1_69_83_Open_Image.style.display='inline'; Codehighlighter1_69_83_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> SubClass() </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_69_83_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_69_83_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">super</span><span style="color: rgb(0, 0, 0);">();<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp; }</span></span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp; <br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /><br /><img id="Codehighlighter1_100_133_Open_Image" onclick="this.style.display='none'; Codehighlighter1_100_133_Open_Text.style.display='none'; Codehighlighter1_100_133_Closed_Image.style.display='inline'; Codehighlighter1_100_133_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none;" id="Codehighlighter1_100_133_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_100_133_Closed_Text.style.display='none'; Codehighlighter1_100_133_Open_Image.style.display='inline'; Codehighlighter1_100_133_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);"> Cat </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_100_133_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_100_133_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img id="Codehighlighter1_117_131_Open_Image" onclick="this.style.display='none'; Codehighlighter1_117_131_Open_Text.style.display='none'; Codehighlighter1_117_131_Closed_Image.style.display='inline'; Codehighlighter1_117_131_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none;" id="Codehighlighter1_117_131_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_117_131_Closed_Text.style.display='none'; Codehighlighter1_117_131_Open_Image.style.display='inline'; Codehighlighter1_117_131_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> Cat() </span><span style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);" id="Codehighlighter1_117_131_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_117_131_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">super</span><span style="color: rgb(0, 0, 0);">();<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp; }</span></span><span style="color: rgb(0, 0, 0);"><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div><br /><br />运行SuperClass后控制台会打印：<br /><div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /><span style="color: rgb(0, 0, 0);">class com.stos.test.generic.Cat</span></div><br />看到运行结果你可能就清楚了，就是获取实际的泛型类。<br /><br /><br /><br /><br /><br /><br /><br /><br /></div> 
<img src ="http://www.blogjava.net/icewee/aggbug/376741.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2012-04-27 09:13 <a href="http://www.blogjava.net/icewee/archive/2012/04/27/376741.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java优化占用内存的方法(一)</title><link>http://www.blogjava.net/icewee/archive/2011/08/24/357164.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Wed, 24 Aug 2011 02:25:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2011/08/24/357164.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/357164.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2011/08/24/357164.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/357164.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/357164.html</trackback:ping><description><![CDATA[<div><span style="font-family: Tahoma; font-size: 12pt;">原文出自【雪的痕迹】</span><br /><span style="font-family: Tahoma; font-size: 12pt;">原文地址：</span><a href="http://www.java3z.com/cwbwebhome/article/article8/852.html"><span style="font-family: Tahoma; font-size: 12pt;">http://www.java3z.com/cwbwebhome/article/article8/852.html</span></a><br /><br /><span style="font-family: Tahoma; font-size: 12pt;">java做的系统给人的印象是什么？占内存！说道这句话就会有N多人站出来为java辩护，并举出一堆的性能测试报告来证明这一点。其实从理论上来讲java做的系统并不比其他语言开发出来的系统更占用内存，那么为什么却有这么N多理由来证明它确实占内存呢？两个字，陋习。</span><br /><br /><font color="#0000ff"><span style="font-family: Tahoma; font-size: 12pt;" class="STYLE1">（1）别用new Boolean()</span><br /></font><span style="font-family: Tahoma; font-size: 12pt;">在很多场景中Boolean类型是必须的，比如JDBC中boolean类型的set与get都是通过Boolean封装传递的，大部分ORM也是用Boolean来封装boolean类型的，比如：</span><br /><br /><span style="font-family: Tahoma; font-size: 12pt;">ps.setBoolean("isClosed",new </span><span style="font-family: Tahoma; font-size: 12pt;">Boolean(true));</span><br /><span style="font-family: Tahoma; font-size: 12pt;">ps.setBoolean("isClosed",new </span><span style="font-family: Tahoma; font-size: 12pt;">Boolean(isClosed));</span><br /><span style="font-family: Tahoma; font-size: 12pt;">ps.setBoolean("isClosed",new Boolean(i==3));</span><br /><br /><span style="font-family: Tahoma; font-size: 12pt;">通常这些系统中构造的Boolean实例的个数是相当多的，所以系统中充满了大量Boolean实例小对象，这是相当消耗内存的。Boolean类实际上只要两个实例就够了，一个true的实例，一个false的实例。</span><br /><br /><span style="font-family: Tahoma; font-size: 12pt;">Boolean类提供两了个静态变量：</span><br /><span style="font-family: Tahoma; font-size: 12pt;">public static final Boolean TRUE = new Boolean(true);</span><br /><span style="font-family: Tahoma; font-size: 12pt;">public static final Boolean FALSE = new Boolean(false);</span><br /><br /><span style="font-family: Tahoma; font-size: 12pt;">需要的时候只要取这两个变量就可以了，</span><br /><span style="font-family: Tahoma; font-size: 12pt;">比如：</span><br /><span style="font-family: Tahoma; font-size: 12pt;">ps.setBoolean("isClosed",Boolean.TRUE);</span><br /><span style="font-family: Tahoma; font-size: 12pt;">那么象2、3句那样要根据一个boolean变量来创建一个Boolean怎么办呢?可以使用Boolean提供的静态方法： </span><br /><span style="font-family: Tahoma; font-size: 12pt;">Boolean.valueOf（）</span><br /><br /><span style="font-family: Tahoma; font-size: 12pt;">比如：</span><br /><span style="font-family: Tahoma; font-size: 12pt;">ps.setBoolean("isClosed",Boolean.valueOf(isClosed));</span><br /><span style="font-family: Tahoma; font-size: 12pt;">ps.setBoolean("isClosed",Boolean.valueOf(i==3));</span><br /><br /><span style="font-family: Tahoma; font-size: 12pt;">因为valueOf的内部实现是：return (b ? TRUE : FALSE);</span><br /><span style="font-family: Tahoma; font-size: 12pt;">所以可以节省大量内存。相信如果Java规范直接把Boolean的构造函数规定成private，就再也不会出现这种情况了。</span><br /><br /><font color="#0000ff"><span style="font-family: Tahoma; font-size: 12pt;" class="STYLE1">（2）别用new Integer</span><br /></font><span style="font-family: Tahoma; font-size: 12pt;">和Boolean类似，java开发中使用Integer封装int的场合也非常多，并且通常用int表示的数值通常都非常小。SUN </span><br /><span style="font-family: Tahoma; font-size: 12pt;">SDK中对Integer的实例化进行了优化,Integer类缓存了-128到127这256个状态的Integer，如果使用Integer.valueOf(int </span><br /><span style="font-family: Tahoma; font-size: 12pt;">i)，传入的int范围正好在此内，就返回静态实例。这样如果我们使用Integer.valueOf代替new </span><br /><span style="font-family: Tahoma; font-size: 12pt;">Integer的话也将大大降低内存的占用。如果您的系统要在不同的SDK（比如IBM </span><br /><span style="font-family: Tahoma; font-size: 12pt;">SDK）中使用的话，那么可以自己做了工具类封装一下，比如IntegerUtils.valueOf(),这样就可以在任何SDK中都可以使用这种特性。</span><br /><br /><span class="STYLE1"><font color="#0000ff"><span style="font-family: Tahoma; font-size: 12pt;">（3）用StringBuffer代替字符串相加</span><br /></font></span><span style="font-family: Tahoma; font-size: 12pt;">这个我就不多讲了，因为已经被人讲过N次了。我只想将一个不是笑话的笑话，我在看国内某&#8220;著名&#8221;java开发的WEB系统的源码中，竟然发现其中大量的使用字符串相加，一个拼装SQL语句的方法中竟然最多构造了将近100个string实例。无语中！</span><br /><br /><span class="STYLE1"><font color="#0000ff"><span style="font-family: Tahoma; font-size: 12pt;">（4）过滥使用哈希表</span><br /></font></span><span style="font-family: Tahoma; font-size: 12pt;">有一定开发经验的开发人员经常会使用hash表（hash表在JDK中的一个实现就是HashMap）来缓存一些数据，从而提高系统的运行速度。比如使用HashMap缓存一些物料信息、人员信息等基础资料，这在提高系统速度的同时也加大了系统的内存占用，特别是当缓存的资料比较多的时候。其实我们可以使用操作系统中的缓存的概念来解决这个问题，也就是给被缓存的分配一个一定大小的缓存容器，按照一定的算法淘汰不需要继续缓存的对象，这样一方面会因为进行了对象缓存而提高了系统的运行效率，同时由于缓存容器不是无限制扩大，从而也减少了系统的内存占用。现在有很多开源的缓存实现项目，比如ehcache、oscache等，这些项目都实现了FIFO、MRU等常见的缓存算法。</span><br /><br /><span class="STYLE1"><font color="#0000ff"><span style="font-family: Tahoma; font-size: 12pt;">（5）避免过深的类层次结构和过深的方法调用</span><br /></font></span><span style="font-family: Tahoma; font-size: 12pt;">因为这两者都是非常占用内存的（特别是方法调用更是堆栈空间的消耗大户）。</span><br /><br /><font color="#0000ff"><span style="font-family: Tahoma; font-size: 12pt;" class="STYLE1">（6）变量只有在用到它的时候才定义和实例化。</span><br /><br /><span style="font-family: Tahoma; font-size: 12pt;" class="STYLE1">（7）尽量避免使用static变量<br /></span></font><span style="font-family: Tahoma; font-size: 12pt;">类内私有常量可以用final来代替。 </span><br /><div class="articleContent"><p><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">java内存管理的思想(主要来源于thinking in java)</span><br /></p><p><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;"><strong>Java内存管理特点<br /></strong><span style="font-size: 10pt;">Java一个最大的优点就是取消了指针，由垃圾收集器来自动管理内存的回收。程序员不需要通过调用函数来释放内存。</span></span></p><p><span style="font-size: 10pt;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"><strong><span style="font-family: Tahoma; font-size: 12pt;"><br />1、Java的内存管理就是对象的分配和释放问题。</span><br /></strong></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">在Java中，程序员需要通过关键字new为每个对象申请内存空间 <br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">(基本类型除外)，所有的对象都在堆 <br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">(Heap)中分配空间。<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">对象的释放是由GC决定和执行的。<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">在Java中，内存的分配是由程序完成的，而内存的释放是由GC完成的，这种收支两条线的方法简化了程序员的工作。但也加重了JVM的工作。这也是Java程序运行速度较慢的原因之一。</span></span></span></p><p><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">GC释放空间方法：<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">监控每一个对象的运行状态，包括对象的申请、引用、被引用、赋值等。当该对象不再被引用时，释放对象。</span></p><p><span><br /></span><span style="font-size: 10pt;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"><strong><span style="font-family: Tahoma; font-size: 12pt;">2、内存管理结构</span><br /></strong></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">Java使用有向图的方式进行内存管理，对于程序的每一个时刻，我们都有一个有向图表示JVM的内存分配情况。</span></span></span></p><span style="font-family: Tahoma; font-size: 12pt;">将对象考虑为有向图的顶点，将引用关系考虑为图的有向边，有向边从引用者指向被引对象。另外，每个线程对象可以作为一个图的起始顶点，例如大多程序从main进程开始执行，那么该图就是以main进程顶点开始的一棵根树。在这个有向图中，根顶点可达的对象都是有效对象，GC将不回收这些对象。如果某个对象 </span><br /><span style="font-family: Tahoma; font-size: 12pt;">(连通子图)与这个根顶点不可达(注意，该图为有向图)，那么我们认为这个(这些)对象不再被引用，可以被GC回收。 </span><br /><p><span style="font-size: 10pt;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"><strong><span style="font-family: Tahoma; font-size: 12pt;">3、使用有向图方式管理内存的优缺点</span><br /></strong></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">Java使用有向图的方式进行内存管理，可以消除引用循环的问题，例如有三个对象，相互引用，只要它们和根进程不可达的，那么GC也是可以回收它们的。<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">这种方式的优点是管理内存的精度很高，但是效率较低。</span></span></span></p><p><span style="font-size: 10pt;"><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;"><br />++：<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">另外一种常用的内存管理技术是使用计数器，例如COM模型采用计数器方式管理构件，它与有向图相比，精度行低(很难处理循环引用的问题)，但执行效率很高。</span></span></p><p><span style="color: rgb(0, 0, 0);"><span style="font-family: Tahoma; font-size: 12pt;"><strong><br />&#9733; Java的内存泄露<br /></strong></span><span style="font-family: Tahoma; font-size: 12pt;">Java虽然由GC来回收内存，但也是存在泄露问题的，只是比C++小一点。</span></span></p><p><span style="font-size: 10pt;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"><strong><span style="font-family: Tahoma; font-size: 12pt;"><br />1、与C++的比较</span><br /></strong></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">c++所有对象的分配和回收都需要由用户来管理。即需要管理点，也需要管理边。若存在不可达的点，无法回收分配给那个点的内存，导致内存泄露。存在无用的对象引用，自然也会导致内存泄露。<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">Java由GC来管理内存回收，GC将回收不可达的对象占用的内存空间。所以，Java需要考虑的内存泄露问题主要是那些被引用但无用的对象&#8212;&#8212;即指要管理边就可以。被引用但无用的对象，程序引用了该对象，但后续不会再使用它。它占用的内存空间就浪费了。<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">如果存在对象的引用，这个对象就被定义为&#8220;活动的&#8221;，同时不会被释放。</span></span></span></p><p><span style="font-size: 10pt;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"><strong><span style="font-family: Tahoma; font-size: 12pt;"><br />2、Java内存泄露处理</span><br /></strong></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">处理Java的内存泄露问题：确认该对象不再会被使用。<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">典型的做法&#8212;&#8212;<br /></span></span><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"><span style="font-family: Tahoma; font-size: 12pt;">把对象数据成员设为null<br /></span><span style="color: rgb(51, 102, 255); font-family: Tahoma; font-size: 12pt;">从集合中移除该对象</span><br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">注意，当局部变量不需要时，不需明显的设为null，因为一个方法执行完毕时，这些引用会自动被清理。</span></span></span></p><p><span style="font-size: 10pt;"><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;"><br />例子：</span><span><br /><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">List myList=new ArrayList();<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">for </span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">(int i=1;i&lt;100; i++) </span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">{<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">&nbsp;&nbsp;&nbsp; Object o=new <br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">&nbsp;&nbsp;&nbsp; Object();<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">&nbsp;&nbsp;&nbsp; myList.add(o);<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">&nbsp;&nbsp;&nbsp; o=null;<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">}<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">//此时，所有的Object对象都没有被释放，因为变量myList引用这些对象。</span></span></span></p><p><span style="font-size: 10pt;"><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">当myList后来不再用到，将之设为null，释放所有它引用的对象。之后GC便会回收这些对象占用的内存。</span></span></p><p><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;"><strong><br />&#9733; 对GC操作<br /></strong>对GC的操作并不一定能达到管理内存的效果。</span></p><p><span style="font-size: 10pt;"><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">GC对于程序员来说基本是透明的，不可见的。我们只有几个函数可以访问GC，例如运行GC的函数System.gc()，System.。<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">但是根据Java语言规范定义， <br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">System.gc()函数不保证JVM的垃圾收集器一定会执行。因为，不同的JVM实现者可能使用不同的算法管理GC。通常，GC的线程的优先级别较低。</span></span></p><p><span style="font-family: Tahoma; font-size: 12pt;">JVM调用GC的策略有很多种，有的是内存使用到达一定程度时，GC才开始工作，也有定时执行的，有的是平缓执行GC，有的是中断式执行GC。但通常来说，我们不需要关心这些。除非在一些特定的场合，GC的执行影响应用程序的性能，例如对于基于Web的实时系统，如网络游戏等，用户不希望GC突然中断应用程序执行而进行垃圾回收，那么我们需要调整GC的参数，让GC能够通过平缓的方式释放内存，例如将垃圾回收分解为一系列的小步骤执行，Sun提供的HotSpot </span><br /><span style="font-family: Tahoma; font-size: 12pt;">JVM就支持这一特性。</span></p><p><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;"><strong><br />&#9733; 内存泄露检测<br /></strong>市场上已有几种专业检查Java内存泄漏的工具，它们的基本工作原理大同小异，都是通过监测Java程序运行时，所有对象的申请、释放等动作，将内存管理的所有信息进行统计、分析、可视化。开发人员将根据这些信息判断程序是否有内存泄漏问题。这些工具包括Optimizeit <br />Profiler，JProbe Profiler，JinSight , Rational 公司的Purify等。</span></p><p><span style="color: rgb(0, 0, 0);"><span style="font-family: Tahoma; font-size: 12pt;">在运行过程中，我们可以随时观察内存的使用情况，通过这种方式，我们可以很快找到那些长期不被释放，并且不再使用的对象。我们通过检查这些对象的生存周期，确认其是否为内存泄露。</span></span></p><p><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;"><strong><br />&#9733; 软引用<br /></strong>特点：只有当内存不够的时候才回收这类内存，同时又保证在Java抛出OutOfMemory异常之前，被设置为null。<br />保证最大限度的使用内存而不引起OutOfMemory异常。<br />在某些时候对软引用的使用会降低应用的运行效率与性能，例如：应用软引用的对象的初始化过程较为耗时，或者对象的状态在程序的运行过程中发生了变化，都会给重新创建对象与初始化对象带来不同程度的麻烦。</span></p><p><span style="font-size: 10pt;"><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;"><br />用途：</span></span></p><p><span style="font-size: 10pt;"><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">可以用于实现一些常用资源的缓存，实现Cache的功能<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">处理一些占用内存大而且声明周期较长，但使用并不频繁的对象时应尽量应用该技术</span></span></p><p><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;"><strong><br />&#9733; java程序设计中有关内存管理的经验</strong></span></p><p><span style="font-size: 10pt;"><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">1．最基本的建议是尽早释放无用对象的引用。如：...<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">A a = new </span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">A();<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">//应用a对象<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">a = null; //当使用对象a之后主动将其设置为空<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">&#8230;.<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">注：如果a </span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">是方法的返回值，不要做这样的处理，否则你从该方法中得到的返回值永远为空，而且这种错误不易被发现、排除</span></span> <br /><span style="font-size: 10pt;"><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">2．尽量少用finalize函数。它会加大GC的工作量。<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">3．如果需要使用经常用到的图片，可以使用soft应用类型。它尽可能把图片保存在内存中<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">4．注意集合数据类型，包括数组、树、图、链表等数据结构，这些数据结构对GC来说，回收更为复杂。<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">5．尽量避免在类的默认构造器中创建、初始化大量的对象，防止在调用其自类的构造器时造成不必要的内存资源浪费<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">6．尽量避免强制系统做垃圾内</span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">8．尽量做远程方法调用类应用开发时使用瞬间值变量，除非远程调用端需要获取该瞬间值变量的值。<br /></span><span style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 12pt;">9．尽量在合适的场景下使用对象池技术以提高系统性能。</span><span style="color: rgb(0, 0, 0); font-size: 12pt;">存的回收，增长系统做垃圾回收的最终时间<br />7．尽量避免显式申请数组空间<br /></span></span></p></div></div><img src ="http://www.blogjava.net/icewee/aggbug/357164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2011-08-24 10:25 <a href="http://www.blogjava.net/icewee/archive/2011/08/24/357164.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java桌面程序打包成exe可执行文件</title><link>http://www.blogjava.net/icewee/archive/2011/06/05/353192.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Sun, 05 Jun 2011 08:27:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2011/06/05/353192.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/353192.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2011/06/05/353192.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/353192.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/353192.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前言：<br> <br>我们都知道Java可以将二进制程序打包成可执行jar文件，双击这个jar和双击exe效果是一样一样的，但感觉还是不同。其实将java程序打包成exe也需要这个可执行jar文件。<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/icewee/archive/2011/06/05/353192.html'>阅读全文</a><img src ="http://www.blogjava.net/icewee/aggbug/353192.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2011-06-05 16:27 <a href="http://www.blogjava.net/icewee/archive/2011/06/05/353192.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java(CallableStatement)调用Oracle存储过程返回结果集(ResultSet)</title><link>http://www.blogjava.net/icewee/archive/2011/04/18/353198.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Mon, 18 Apr 2011 06:09:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2011/04/18/353198.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/353198.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2011/04/18/353198.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/353198.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/353198.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/icewee/archive/2011/04/18/353198.html'>阅读全文</a><img src ="http://www.blogjava.net/icewee/aggbug/353198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2011-04-18 14:09 <a href="http://www.blogjava.net/icewee/archive/2011/04/18/353198.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC链接SQL Server2000和SQL Server2005的不同之处</title><link>http://www.blogjava.net/icewee/archive/2011/04/16/353203.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Sat, 16 Apr 2011 06:36:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2011/04/16/353203.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/353203.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2011/04/16/353203.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/353203.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/353203.html</trackback:ping><description><![CDATA[<span style="font-family: Tahoma; font-size: 12pt;">
</span><p><span style="font-family: tahoma,arial,helvetica,sans-serif;"><span style="font-family: Tahoma; font-size: 12pt;">&nbsp;</span><span style="font-family: Tahoma; font-size: 12pt;">在SQL Server 2000 中加载驱动和URL路径的语句是<br /></span><span style="font-size: 14px;"></p><div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: rgb(0, 0, 0);">String&nbsp;driverName&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">com.microsoft.jdbc.sqlserver.SQLServerDriver</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />String&nbsp;dbURL&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">jdbc:microsoft:sqlserver://localhost:1433;&nbsp;DatabaseName=sample</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;</span></div><p></span></span>&nbsp;</p>



<p><span style="font-family: Tahoma; font-size: 12pt;">而SQL Server 2005 中加载驱动和url的语句则为</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif;">
</p><div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: rgb(0, 0, 0);">String&nbsp;driverName&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">com.microsoft.sqlserver.jdbc.SQLServerDriver</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />String&nbsp;dbURL&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">jdbc:sqlserver://localhost:1433;&nbsp;DatabaseName=sample</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;</span></div><p></span>&nbsp;</p>



<p><span style="font-family: Tahoma; font-size: 12pt;">如</span><span style="font-family: tahoma,arial,helvetica,sans-serif;">果写法错误将会找不到驱动.</span></p> 
<img src ="http://www.blogjava.net/icewee/aggbug/353203.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2011-04-16 14:36 <a href="http://www.blogjava.net/icewee/archive/2011/04/16/353203.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第一次使用Java Graphics2D画出一个完整的图</title><link>http://www.blogjava.net/icewee/archive/2011/04/16/353204.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Sat, 16 Apr 2011 06:32:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2011/04/16/353204.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/353204.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2011/04/16/353204.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/353204.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/353204.html</trackback:ping><description><![CDATA[
<span style="font-family: Tahoma; font-size: 12pt;">
</span><span style="font-family: tahoma,arial,helvetica,sans-serif;"><span style="font-size: 12px;"></span></span><span style="font-family: Tahoma; font-size: 12pt;">新项目需求，要在页面中加载一个叫&#8220;大卫三角形&#8221;的图形，还是GB(国标)中的东西，在网上搜索了一下&#8220;大卫三角形&#8221;，无果，也不知道什么东西，而且根据
什么画出来的也不清楚。领导让试试，看能不能画出来。事前从未使用过开发语言画图，Windows的画板倒是用过，连Photoshop都不会用，汗！而
且不是用手握着画笔或者鼠标在屏幕上乱写乱画，是用程序语言将图画出。</span>
<p><span style="font-family: tahoma,arial,helvetica,sans-serif;"><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/icewee/java2d/1.jpg" width="469" height="425" /></span></p>
<p><span style="font-family: Tahoma; font-size: 12pt;"><br />在网上搜寻关于使用JAVA画图的信息，知道了JAVA 
2D，又下了几个用Graphics2D画图的例子，看了看Java核心API。开始着手画图。不画不知道，画了才知道，开发Windows画图和其他画
图软件的程序员都为我们做了多少贡献，因为用程序画图简直太麻烦了，一点一点的描，一线一线的连。像我画这个图还要经过很多次的计算，主要是计算坐
标，Graphics2D能画的东西很多，但是要在User Space里给它指定坐标。</span></p>
<p><span style="font-family: Tahoma; font-size: 12pt;">经过不到两天的努力，终于完成了这幅&#8220;大卫三角形&#8221;！虽然是硬画出来的，并无什么计算公式而言（况且我也不会啊！），但还是有些激动，毕竟是第一次用程序画图么！</span></p>
<p><span style="font-family: tahoma,arial,helvetica,sans-serif;"><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/icewee/java2d/2.jpg" width="399" height="397" /></span></p>
<p><span style="font-family: Tahoma; font-size: 12pt;"><br />发布到WEB，最终&#8220;大卫三角形&#8221;的摸样：</span><span style="font-family: tahoma,arial,helvetica,sans-serif;"><br /></span><span style="font-family: tahoma,arial,helvetica,sans-serif;"><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/icewee/java2d/3.jpg" width="400" height="400" /></span> 
</p> 
<img src ="http://www.blogjava.net/icewee/aggbug/353204.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2011-04-16 14:32 <a href="http://www.blogjava.net/icewee/archive/2011/04/16/353204.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.io.CharConversionException: Not an ISO 8859-1 character: xx</title><link>http://www.blogjava.net/icewee/archive/2011/04/16/353207.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Sat, 16 Apr 2011 06:25:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2011/04/16/353207.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/353207.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2011/04/16/353207.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/353207.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/353207.html</trackback:ping><description><![CDATA[<span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">使用Ajax调用Action获取XML字符串，其中包含中文，使用如下代码输出： 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #000000; font-size: 12pt">ServletOutputStream&nbsp;out&nbsp;</span><span style="color: #000000; font-size: 12pt">=</span><span style="color: #000000; font-size: 12pt">&nbsp;response.getOutputStream();<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #000000; font-size: 12pt">request.setAttribute(</span><span style="color: #000000; font-size: 12pt">"</span><span style="color: #000000; font-size: 12pt">xmlTree</span><span style="color: #000000; font-size: 12pt">"</span><span style="color: #000000; font-size: 12pt">,&nbsp;tree);<br /></span><span style="color: #000000; font-size: 12pt">&nbsp;&nbsp; out.print(tree);</span></div><br /></span>
<p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">在JDK1.5平台运行一切正常，在JDK1.6平台运行抛出异常：</span></p>
<p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">严重: Servlet.service() for servlet action threw exception</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; color: #ff0000; font-size: 12pt" color="#ff0000">java.io.CharConversionException: Not an ISO 8859-1 character: 全</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at javax.servlet.ServletOutputStream.print(ServletOutputStream.java:89)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at com.xjgc.rsm.web.action.ProblemtypeAction.createTypeTree(ProblemtypeAction.java:282)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at java.lang.reflect.Method.invoke(Method.java:597)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at com.xjgc.rsm.web.action.ProblemtypeAction.execute(ProblemtypeAction.java:37)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.extremecomponents.table.filter.AbstractExportFilter.doFilter(AbstractExportFilter.java:49)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:75)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)</span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">at java.lang.Thread.run(Thread.java:619)</span></p>
<p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">异常的大概意思是说非ISO-8859-1编码，确实，我使用的GBK。而且第一行就是</span></p>
<p><span style="font-family: tahoma,arial,helvetica,sans-serif; color: #ff0000; font-size: 12pt">at javax.servlet.ServletOutputStream.print(ServletOutputStream.java:89)</span></p>
<p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">问题可能出现在ServletOutputStream上，于是用PrintWriter替换了ServletOutputStream，运行正确，如：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #000000; font-size: 12pt">PrintWriter&nbsp;pw&nbsp;</span><span style="color: #000000; font-size: 12pt">=</span><span style="color: #000000; font-size: 12pt">&nbsp;response.getWriter();<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #000000; font-size: 12pt">pw.print(tree);</span></div>
<p><br /></span></p><img src ="http://www.blogjava.net/icewee/aggbug/353207.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2011-04-16 14:25 <a href="http://www.blogjava.net/icewee/archive/2011/04/16/353207.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java获取时间比实际时间晚8个小时的解决方法</title><link>http://www.blogjava.net/icewee/archive/2011/04/16/353210.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Sat, 16 Apr 2011 06:17:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2011/04/16/353210.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/353210.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2011/04/16/353210.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/353210.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/353210.html</trackback:ping><description><![CDATA[<span style="font-family: Tahoma; font-size: 12pt">平常只用日期，很少精确到时间，今天偶尔用到了时间，发现小时比本机时间小了8个小时，操作系统是WIN7。时区设置也是+8北京。在网上搜索到可能是注册表坏了，下了一个XP的注册表导入后恢复正常了。</span> 
<div id="blog_text" class="cnt">
<p><span style="font-family: Tahoma; font-size: 12pt">原帖地址：http://huiy.javaeye.com/blog/200512</span></p>
<p><span style="font-family: Tahoma; font-size: 12pt">问题描述：Window XP 系统自己能够读取正确的时间，但是用java获取的时间始终与北京时间相差八个小时。 </span><br /><span style="font-family: Tahoma; font-size: 12pt">原因分析： </span><br /><span style="font-family: Tahoma; font-size: 12pt">1.系统本身时区设置错误（<span style="font-family: Tahoma; color: red; font-size: 12pt">可以排除,上面已经交代系统能够获取正确时间</span></span><span style="font-family: Tahoma; font-size: 12pt">） </span><br /><span style="font-family: Tahoma; font-size: 12pt">2.注册表出现异常。 </span><br /><span style="font-family: Tahoma; font-size: 12pt">注册表对应项：HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones </span><br /><span style="font-family: Tahoma; font-size: 12pt">解决之道： </span><br /><span style="font-family: Tahoma; font-size: 12pt">1.备份Time Zones这一项 </span><br /><span style="font-family: Tahoma; font-size: 12pt">2.从正常的并且是相同系统的机器中导出该项，然后倒入到自己机器中</span></p>
<p><span style="font-family: Tahoma; font-size: 12pt">上招不行，还有一招！</span></p>
<p><span style="font-family: Tahoma; font-size: 12pt">1.找到jdk 的安装路径 找到 如： </span><br /><span style="font-family: Tahoma; font-size: 12pt">a) C:\Program Files\Java\jdk1.5.0\jre\lib\zi\Etc； </span><br /><span style="font-family: Tahoma; font-size: 12pt">b) C:\Program Files\Java\jdk1.5.0\jre\lib\zi; </span><br /><span style="font-family: Tahoma; font-size: 12pt">c) C:\Program Files\Java\jre1.5.0\lib\zi\Etc; </span><br /><span style="font-family: Tahoma; font-size: 12pt">d) C:\Program Files\Java\jre1.5.0\lib\zi; </span><br /><span style="font-family: Tahoma; font-size: 12pt">这四个文件路径下找到 GMT 文件 进行删除（注意：在删除之前将其文件备份一下，以防万一）；在 C:\Program Files\Java\jdk1.5.0\jre\lib\zi\Etc 下找到 GMT-8 文件复制一份 重命名为 CMT ，将其原来 的 GMT 文件覆盖掉即可！</span></p></div><img src ="http://www.blogjava.net/icewee/aggbug/353210.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2011-04-16 14:17 <a href="http://www.blogjava.net/icewee/archive/2011/04/16/353210.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网页文章保存到数据库丢失格式的解决方法</title><link>http://www.blogjava.net/icewee/archive/2011/04/16/353213.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Sat, 16 Apr 2011 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2011/04/16/353213.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/353213.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2011/04/16/353213.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/353213.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/353213.html</trackback:ping><description><![CDATA[<span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">网站上的文章用什么存储？使用Oralce用CLOB存储，Java操作CLOB的方法网上很多，可是发现读取后显示在网页上和录入时的格式完全不同，该有的段落已经不复存在，由于页面中使用的是textarea标签而不是强大的网页文本编辑器，所以要自己处理格式的问题了，下面是我找到的一个专业函数，使用它将前台传过来的文章字符串转义一下再存入数据库，这次再读取出来的文章就有段落的显示了。 </span><span style="font-family: tahoma,arial,helvetica,sans-serif">
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_0_60_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_60_Open_Text.style.display='none'; Codehighlighter1_0_60_Closed_Image.style.display='inline'; Codehighlighter1_0_60_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_0_60_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_0_60_Closed_Text.style.display='none'; Codehighlighter1_0_60_Open_Image.style.display='inline'; Codehighlighter1_0_60_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_0_60_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_0_60_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000">&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;格式化文章信息，保持文章的格式（保存时用）&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;str&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000">&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_99_616_Open_Image" onclick="this.style.display='none'; Codehighlighter1_99_616_Open_Text.style.display='none'; Codehighlighter1_99_616_Closed_Image.style.display='inline'; Codehighlighter1_99_616_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_99_616_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_99_616_Closed_Text.style.display='none'; Codehighlighter1_99_616_Open_Image.style.display='inline'; Codehighlighter1_99_616_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;HTMLEncode(String&nbsp;str)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_99_616_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_99_616_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;str.replace(</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&amp;gt;</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;str.replace(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&amp;lt;</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;ch;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&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;</span><span style="color: #000000">32</span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;space&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;str.replace(String.valueOf(ch),&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&amp;nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&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;</span><span style="color: #000000">34</span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;''&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;str.replace(String.valueOf(ch),&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&amp;quot;</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&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;</span><span style="color: #000000">39</span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;'&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;str.replace(String.valueOf(ch),&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&amp;#39;</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&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;</span><span style="color: #000000">13</span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;carriage&nbsp;return&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;str.replace(String.valueOf(ch),&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&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;</span><span style="color: #000000">10</span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;new&nbsp;line&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;str.replace(String.valueOf(ch),&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;BR&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;str;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div><br /></span><img src ="http://www.blogjava.net/icewee/aggbug/353213.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2011-04-16 14:13 <a href="http://www.blogjava.net/icewee/archive/2011/04/16/353213.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>proxool数据源的配置方法</title><link>http://www.blogjava.net/icewee/archive/2011/04/16/353214.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Sat, 16 Apr 2011 06:11:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2011/04/16/353214.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/353214.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2011/04/16/353214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/353214.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/353214.html</trackback:ping><description><![CDATA[<span style="font-family: Tahoma; font-size: 12pt">以前都是用SSH框架，spring借助的是Tomcat的dbcp数据源，最近做网站也没用什么框架，直接Sservlet+JSP，依旧用的 Tomcat的dbcp做数据源，经常发现网络不好时连接就获取不到了，那是因为池子中的连接都已经无效了，Tomcat数据源的自动重连貌似配置较为复杂，很多人建议用proxool做数据源，下面是proxool的配置方法： </span>
<p><span style="font-family: Tahoma; font-size: 12pt">1.下载proxool，自己到网站<a href="http://proxool.sourceforge.net/download.html"><span style="font-family: Tahoma; font-size: 12pt">http://proxool.sourceforge.net/download.html</span></a></span><span style="font-family: Tahoma; font-size: 12pt">随便下载一个版本，解压后进入目录lib，会得到两个jar文件，分别为<span style="font-family: Tahoma; color: #0000ff; font-size: 12pt" color="#0000ff">proxool-0.9.1</span><span style="color: #000000" color="#000000"><span style="font-family: Tahoma; color: #0000ff; font-size: 12pt" color="#0000ff">.jar</span></span><span style="font-family: Tahoma; color: #000000; font-size: 12pt" color="#000000">(版本不同可能名称有所不同)和<span style="font-family: Tahoma; color: #0000ff; font-size: 12pt" color="#0000ff">proxool-cglib.jar</span></span><span style="font-family: Tahoma; color: #000000; font-size: 12pt" color="#000000">，将这两个jar文件拷贝到项目的WEB-INF/lib下<br /><br /></span></span></p>
<p><span style="font-family: Tahoma; font-size: 12pt">2.配置web.xml，需要配置proxool的Servlet，如下：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&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">proxoolServletConfigurator</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 align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&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">org.logicalcobwebs.proxool.configuration.ServletConfigurator<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&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"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">xmlFile</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">WEB-INF/proxool.xml</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">load-on-startup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">load-on-startup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></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 align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></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 align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&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">proxooladmin</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 align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&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">org.logicalcobwebs.proxool.admin.servlet.AdminServlet<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&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"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></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 align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></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 align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&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">proxooladmin</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 align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&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">/proxooladmin</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 align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span></div>
<p><br /></span><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">3.创建<span style="color: #ff0000; font-size: 12pt" color="#ff0000">proxool.xml</span></span><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">文件，将此文件放在与web.xml同级目录下，即WEB-INF下<span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt"></span></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">something-else-entirely</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">proxool</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">alias</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">testDB</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">alias</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">driver-url</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">jdbc:oracle:thin:@192.168.1.229:1521:orcl</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">driver-url</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">driver-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">oracle.jdbc.driver.OracleDriver</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">driver-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">driver-properties</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="user"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="test_user"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="password"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="password"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">driver-properties</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">maximum-connection-count</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">10</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">maximum-connection-count</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">minimum-connection-count</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">5</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">minimum-connection-count</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">prototype-count</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">5</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">prototype-count</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">test-before-use</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">true</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">test-before-use</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">house-keeping-sleep-time</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">180000</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">house-keeping-sleep-time</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">house-keeping-test-sql</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">select&nbsp;CURRENT_DATE&nbsp;from&nbsp;dual</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">house-keeping-test-sql</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">proxool</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">something-else-entirely</span><span style="color: #0000ff">&gt;</span></div>
<p></span><span style="font-family: tahoma,arial,helvetica,sans-serif">上面的<span style="color: #741b47" color="#741b47"><strong>&lt;test-before-use&gt;true&lt;/test-before-use&gt;</strong></span><span style="color: #000000" color="#000000">据说是用来自动重连的，也就是在网络错误或数据库重启等等原因导致与数据库断开，每次获取连接前都会检查，如果现在池子中的连接已经无效将会重新创建</span></span></p>
<p><span style="font-family: tahoma,arial,helvetica,sans-serif"><br />4.在java中获取数据库连接的代码</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">Connection&nbsp;con&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DriverManager.getConnection(</span><span style="color: #000000">"</span><span style="color: #000000">proxool.testDB</span><span style="color: #000000">"</span><span style="color: #000000">);</span></div>
<p><br /></span></p><img src ="http://www.blogjava.net/icewee/aggbug/353214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2011-04-16 14:11 <a href="http://www.blogjava.net/icewee/archive/2011/04/16/353214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jfreechart画图tooltip不显示的问题</title><link>http://www.blogjava.net/icewee/archive/2011/04/16/353218.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Sat, 16 Apr 2011 05:59:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2011/04/16/353218.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/353218.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2011/04/16/353218.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/353218.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/353218.html</trackback:ping><description><![CDATA[<span style="font-family: Tahoma; font-size: 12pt">最近项目中需要用到jfreechart，以前只是简单的玩玩而已，一直没有真正的应用到实际项目中，今天在画图的时候可把自己折磨惨了，就一个小小的tooltip死活不出来。<br /></span>
<p><span style="font-family: Tahoma; font-size: 12pt"><br />我用的Spring + Struts，有很多人用jfreechart都是写的Servlet，其实用Struts是一样的。<br /><br /></span></p>
<p><span style="font-family: Tahoma; font-size: 12pt">我起初在Struts的Action中使用</span><span style="font-family: Tahoma; font-size: 12pt"><strong>org.jfree.chart.ChartUtilities。</strong><a href="mk:@MSITStore:D:%20work%20jFreeChart.chm::/org/jfree/chart/ChartUtilities.html#writeChartAsPNG%28java.io.OutputStream,%20org.jfree.chart.JFreeChart,%20int,%20int%29"><span face="NSimsun"><strong>writeChartAsPNG</strong></span></a><span face="NSimsun">(java.io.OutputStream out, </span><a title="class in org.jfree.chart" href="mk:@MSITStore:D:%20work%20jFreeChart.chm::/org/jfree/chart/JFreeChart.html"><span face="NSimsun">JFreeChart</span></a><span face="NSimsun"> chart, int width, int height)</span> 方法，将生成的JFreeChart对象写到输出流中，return自然是null，这样做界面可以显示Action写过来的图片，但是没有 tooltip的出现。后来我发现很多人都不是直接把图片写到流中的，而是在JSP页面通过&lt;img&gt;标签来显示图片的。于是我也使用了主流方式显示图片，使用chartName = ServletUtilities.saveChartAsPNG(chart, width, height, </span><span style="font-family: Tahoma; font-size: 12pt">info, session);将图片文件名设置请求属性发给JSP页面，页面通过图片标签显示图片，结果图片依旧显示正常，但是tooltip还是没有出来，由于刚刚用这东西，一点都不了解，于是开以往项目中是如何写的，我发现别人的代码中有这样一行：ChartUtilities.writeImageMap(pw, chartName, info, false);这是将图片地图写到流中，而且页面的图片标签中也多了个usermap属性，我仿佛有点清醒了，于是效仿着做了一下，tooltip果真出现了。<br /><br /></span></p>
<p><span style="font-family: Tahoma; font-size: 12pt">JSP代码：<br /><br /></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_2_161_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2_161_Open_Text.style.display='none'; Codehighlighter1_2_161_Closed_Image.style.display='inline'; Codehighlighter1_2_161_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><span style="background-color: #ffff00; color: #000000">&lt;%</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_2_161_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_2_161_Open_Text"><span style="background-color: #f5f5f5; color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JFreeChart&nbsp;chart&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;(JFreeChart)request.getAttribute(</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">chart</span><span style="background-color: #f5f5f5; color: #000000">"</span><span style="background-color: #f5f5f5; color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff">String</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;chartName&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">=</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;Common.generateChart(chart,&nbsp;session,&nbsp;</span><span style="background-color: #f5f5f5; color: #0000ff">new</span><span style="background-color: #f5f5f5; color: #000000">&nbsp;PrintWriter(out),&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">760</span><span style="background-color: #f5f5f5; color: #000000">,&nbsp;</span><span style="background-color: #f5f5f5; color: #000000">410</span><span style="background-color: #f5f5f5; color: #000000">);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></span><span style="background-color: #ffff00; color: #000000">%&gt;</span></div>
<p><br /></span><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">Common的generateChart方法就是放回图片的文件名，并且将图片地图写入到当前的流中。</span></p>
<p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">Java代码：<span style="font-family: tahoma,arial,helvetica,sans-serif"><br /><br /></span></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><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;generateChart(JFreeChart&nbsp;chart,&nbsp;HttpSession&nbsp;session,<br /><img id="Codehighlighter1_116_504_Open_Image" onclick="this.style.display='none'; Codehighlighter1_116_504_Open_Text.style.display='none'; Codehighlighter1_116_504_Closed_Image.style.display='inline'; Codehighlighter1_116_504_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_116_504_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_116_504_Closed_Text.style.display='none'; Codehighlighter1_116_504_Open_Image.style.display='inline'; Codehighlighter1_116_504_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintWriter&nbsp;pw,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;width,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;height)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_116_504_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_116_504_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;chartName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br /><img id="Codehighlighter1_149_431_Open_Image" onclick="this.style.display='none'; Codehighlighter1_149_431_Open_Text.style.display='none'; Codehighlighter1_149_431_Closed_Image.style.display='inline'; Codehighlighter1_149_431_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_149_431_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_149_431_Closed_Text.style.display='none'; Codehighlighter1_149_431_Open_Image.style.display='inline'; Codehighlighter1_149_431_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_149_431_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_149_431_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ChartRenderingInfo&nbsp;info&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ChartRenderingInfo(<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StandardEntityCollection());<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chartName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ServletUtilities.saveChartAsPNG(chart,&nbsp;width,&nbsp;height,<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;info,&nbsp;session);<br /><img id="Codehighlighter1_335_351_Open_Image" onclick="this.style.display='none'; Codehighlighter1_335_351_Open_Text.style.display='none'; Codehighlighter1_335_351_Closed_Image.style.display='inline'; Codehighlighter1_335_351_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_335_351_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_335_351_Closed_Text.style.display='none'; Codehighlighter1_335_351_Open_Image.style.display='inline'; Codehighlighter1_335_351_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_335_351_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_335_351_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000">&nbsp;将图片地图写入PW中&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ChartUtilities.writeImageMap(pw,&nbsp;chartName,&nbsp;info,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pw.flush();<br /><img id="Codehighlighter1_453_481_Open_Image" onclick="this.style.display='none'; Codehighlighter1_453_481_Open_Text.style.display='none'; Codehighlighter1_453_481_Closed_Image.style.display='inline'; Codehighlighter1_453_481_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_453_481_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_453_481_Closed_Text.style.display='none'; Codehighlighter1_453_481_Open_Image.style.display='inline'; Codehighlighter1_453_481_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;e)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_453_481_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_453_481_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;chartName;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<p><br /></span><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">起初我并没有使用Common这个方法，而是直接将这个方法中的代码写在了Struts的Action中，发现无效，而且在pw.flush()一行出现了异常，流这里太烂！哎！提示刷新后就不能再return了。于是去掉这行后图片正常显示，但没有tooltip。我怀疑是Struts中用 response获取的PrintWriter并不是返回到JSP中用out封装的PrintWriter，根本就不是，还怀疑什么，这不是废话嘛！所以在当前流中并没有图片地图，自然不显示tooltip了。</span></p>
<p><span style="font-family: tahoma,arial,helvetica,sans-serif">显示图片的IMG标签<br /><br /></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">img&nbsp;</span><span style="color: #ff0000">src</span><span style="color: #0000ff">="&lt;%=request.getContextPath()%&gt;/&lt;%=chartName%&gt;"</span><span style="color: #ff0000">&nbsp;height</span><span style="color: #0000ff">="100%"</span><span style="color: #ff0000">&nbsp;border</span><span style="color: #0000ff">=0&nbsp;</span><span style="color: #ff0000">usemap</span><span style="color: #0000ff">="#&lt;%=chartName%&gt;"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">&gt;</span></div>
<p><br /></span></p>
<p><span style="font-family: tahoma,arial,helvetica,sans-serif"><br /></span></p><img src ="http://www.blogjava.net/icewee/aggbug/353218.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2011-04-16 13:59 <a href="http://www.blogjava.net/icewee/archive/2011/04/16/353218.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>仿腾讯随机验证图片</title><link>http://www.blogjava.net/icewee/archive/2011/04/16/353220.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Sat, 16 Apr 2011 05:49:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2011/04/16/353220.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/353220.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2011/04/16/353220.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/353220.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/353220.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 仿照腾讯的Token写的验证码生成程序Java类代码：Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->package&nbsp;icewee.image;import&nbsp;java.awt.BasicStroke;import&nbsp;ja...&nbsp;&nbsp;<a href='http://www.blogjava.net/icewee/archive/2011/04/16/353220.html'>阅读全文</a><img src ="http://www.blogjava.net/icewee/aggbug/353220.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2011-04-16 13:49 <a href="http://www.blogjava.net/icewee/archive/2011/04/16/353220.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat的数据源配置</title><link>http://www.blogjava.net/icewee/archive/2011/04/16/353227.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Sat, 16 Apr 2011 05:19:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2011/04/16/353227.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/353227.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2011/04/16/353227.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/353227.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/353227.html</trackback:ping><description><![CDATA[<span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">Tomcat本身并不具备提供数据源的能力，它需要借助其他的开源数据源（如DBCP）类实现。通过Tomcat提供的数据源，我们的程序中可以通过JNDI来访问数据源。</span> 
<div id="blog_text" class="cnt">
<p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">下面以DBCP为例，简介数据源的配置。</span></p>
<p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">数据源的配置也有两种方式，一种是通过修改Tomcat系统文件来配置全局数据源，一种是通过增加用户的web部署文件来配置局部数据源。全局数据源的意义是所有部署在Tomcat内的web应用只要遵循规定都可以访问的数据源，不建议此方式，可能会导致混乱。相对而言，增加用户自己的web部署文件就比较合适一些，因为该数据源只针对某个web应用生效，其他web应用无法访问该数据源，安全一些，也没全局数据源那么混乱。</span></p>
<p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">配置数据源需要数据源的jar文件，如DBCP数据源就需要在Tomcat的common/lib下增加一个commons-dbcp.jar文件，还需要commons-poo.jar和commons-collections.jar的支持，一般在Tomcat里都会有这三个jar文件，最好还是检查一下。</span></p>
<p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">在Tomcat的conf\localhost下创建自己的web部署配置文件，仿佛见《<a href="http://hi.baidu.com/icewee/blog/item/4398b0c3b1e4ea1d0ff4776a.html" target="_blank"><span style="font-size: 12pt">Tomcat中部署web应用的方式</span></a></span><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">》，在Context元素下增加子元素，以Oracle数据库为例，如：</span></p>
<p><span style="font-family: tahoma,arial,helvetica,sans-serif; color: rgb(0,0,128); font-size: 14px" color="#000080"></p>
<div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(128,0,0)">Resource&nbsp;</span><span style="color: rgb(255,0,0)">name</span><span style="color: rgb(0,0,255)">="jdbc/dataSource"</span><span style="color: rgb(255,0,0)">&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;auth</span><span style="color: rgb(0,0,255)">="Container"</span><span style="color: rgb(255,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;description</span><span style="color: rgb(0,0,255)">="DB&nbsp;Connection"</span><span style="color: rgb(255,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span><span style="color: rgb(0,0,255)">="javax.sql.DataSource"</span><span style="color: rgb(255,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username</span><span style="color: rgb(0,0,255)">="username"</span><span style="color: rgb(255,0,0)">&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password</span><span style="color: rgb(0,0,255)">="password"</span><span style="color: rgb(255,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;driverClassName</span><span style="color: rgb(0,0,255)">="oracle.jdbc.driver.OracleDriver"</span><span style="color: rgb(255,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url</span><span style="color: rgb(0,0,255)">="jdbc:oracle:thin:@192.168.0.10:1521:db"</span><span style="color: rgb(255,0,0)">&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxActive</span><span style="color: rgb(0,0,255)">="5"</span><span style="color: rgb(255,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">/&gt;</span></div>
<p></span><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">程序中访问此数据源的代码：</p>
<div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">&nbsp;初始化</span><span style="color: rgb(0,128,0)"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: rgb(0,0,0)">ContextContext&nbsp;ctx&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;</span><span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)">&nbsp;InitialContext();<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">&nbsp;获取数据源，其中java:comp/env是Tomcat规定的，Tomcat提供的JNDI绑定都必须加该前缀</span><span style="color: rgb(0,128,0)"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: rgb(0,0,0)">DataSource&nbsp;ds&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;(DataSource)ctx.lookup(</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">java:comp/env/jdbc/dataSource</span><span style="color: rgb(0,0,0)">"</span><span style="color: rgb(0,0,0)">);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">&nbsp;获取数据库链接</span><span style="color: rgb(0,128,0)"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: rgb(0,0,0)">Connection&nbsp;conn&nbsp;</span><span style="color: rgb(0,0,0)">=</span><span style="color: rgb(0,0,0)">&nbsp;ds.getConnection();<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)">&nbsp;一系列数据库操作</span><span style="color: rgb(0,128,0)"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />... ...</span><span style="color: rgb(0,0,0)"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></div>
<p></span><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">上面介绍了局部数据源的配置方法，全局数据源的配置和这差不多，只不过要是将Resource标签放在server.xml的&lt;GlobalNamingResources&gt;元素里。</span></p></div><img src ="http://www.blogjava.net/icewee/aggbug/353227.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2011-04-16 13:19 <a href="http://www.blogjava.net/icewee/archive/2011/04/16/353227.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】ThreadLocal 解决SimpleDateFormat非线程安全</title><link>http://www.blogjava.net/icewee/archive/2011/04/16/353237.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Fri, 15 Apr 2011 18:34:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2011/04/16/353237.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/353237.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2011/04/16/353237.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/353237.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/353237.html</trackback:ping><description><![CDATA[<span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">大致意思：Tim Cull碰到一个SimpleDateFormat带来的严重的性能问题，该问题主要有SimpleDateFormat引发，创建一个 SimpleDateFormat实例的开销比较昂贵，解析字符串时间时频繁创建生命周期短暂的实例导致性能低下。即使将 SimpleDateFormat定义为静态类变量，貌似能解决这个问题，但是SimpleDateFormat是非线程安全的，同样存在问题，如果用 &#8216;synchronized&#8217;线程同步同样面临问题，同步导致性能下降（线程之间序列化的获取SimpleDateFormat实例）。</span> 
<div id="blog_text" class="cnt">
<p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">Tim Cull使用Threadlocal解决了此问题，对于每个线程SimpleDateFormat不存在影响他们之间协作的状态，为每个线程创建一个SimpleDateFormat变量的拷贝或者叫做副本，代码如下：<span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 14px"></span></p>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.text.DateFormat;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.text.ParseException;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.text.SimpleDateFormat;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Date;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img id="Codehighlighter1_121_177_Open_Image" onclick="this.style.display='none'; Codehighlighter1_121_177_Open_Text.style.display='none'; Codehighlighter1_121_177_Closed_Image.style.display='inline'; Codehighlighter1_121_177_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"></span><span id="Codehighlighter1_121_177_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000">&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;使用ThreadLocal以空间换时间解决SimpleDateFormat线程安全问题。&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_201_666_Open_Image" onclick="this.style.display='none'; Codehighlighter1_201_666_Open_Text.style.display='none'; Codehighlighter1_201_666_Closed_Image.style.display='inline'; Codehighlighter1_201_666_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_201_666_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_201_666_Closed_Text.style.display='none'; Codehighlighter1_201_666_Open_Image.style.display='inline'; Codehighlighter1_201_666_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;DateUtil&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_201_666_Closed_Text"></span><span id="Codehighlighter1_201_666_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;String&nbsp;DATE_FORMAT&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">yyyy-MM-dd&nbsp;HH:mm:ss</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@SuppressWarnings(</span><span style="color: #000000">"</span><span style="color: #000000">rawtypes</span><span style="color: #000000">"</span><span style="color: #000000">)<br /><img id="Codehighlighter1_360_461_Open_Image" onclick="this.style.display='none'; Codehighlighter1_360_461_Open_Text.style.display='none'; Codehighlighter1_360_461_Closed_Image.style.display='inline'; Codehighlighter1_360_461_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_360_461_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_360_461_Closed_Text.style.display='none'; Codehighlighter1_360_461_Open_Image.style.display='inline'; Codehighlighter1_360_461_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;ThreadLocal&nbsp;threadLocal&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ThreadLocal()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_360_461_Closed_Text"></span><span id="Codehighlighter1_360_461_Open_Text"><span style="color: #000000">{<br /><img id="Codehighlighter1_409_458_Open_Image" onclick="this.style.display='none'; Codehighlighter1_409_458_Open_Text.style.display='none'; Codehighlighter1_409_458_Closed_Image.style.display='inline'; Codehighlighter1_409_458_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_409_458_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_409_458_Closed_Text.style.display='none'; Codehighlighter1_409_458_Open_Image.style.display='inline'; Codehighlighter1_409_458_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">synchronized</span><span style="color: #000000">&nbsp;Object&nbsp;initialValue()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_409_458_Closed_Text"></span><span id="Codehighlighter1_409_458_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SimpleDateFormat(DATE_FORMAT);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img id="Codehighlighter1_507_551_Open_Image" onclick="this.style.display='none'; Codehighlighter1_507_551_Open_Text.style.display='none'; Codehighlighter1_507_551_Closed_Image.style.display='inline'; Codehighlighter1_507_551_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_507_551_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_507_551_Closed_Text.style.display='none'; Codehighlighter1_507_551_Open_Image.style.display='inline'; Codehighlighter1_507_551_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&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;DateFormat&nbsp;getDateFormat()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_507_551_Closed_Text"></span><span id="Codehighlighter1_507_551_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(DateFormat)&nbsp;threadLocal.get();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img id="Codehighlighter1_619_664_Open_Image" onclick="this.style.display='none'; Codehighlighter1_619_664_Open_Text.style.display='none'; Codehighlighter1_619_664_Closed_Image.style.display='inline'; Codehighlighter1_619_664_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_619_664_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_619_664_Closed_Text.style.display='none'; Codehighlighter1_619_664_Open_Image.style.display='inline'; Codehighlighter1_619_664_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&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;Date&nbsp;parse(String&nbsp;textDate)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;ParseException&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_619_664_Closed_Text"></span><span id="Codehighlighter1_619_664_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;getDateFormat().parse(textDate);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div>
<p><br /></span><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">创建一个ThreadLocal类变量，这里创建时用了一个匿名类，覆盖了initialValue方法，主要作用是创建时初始化实例。也可以采用下面方式创建；<span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 14px"></span></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.text.DateFormat;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.text.SimpleDateFormat;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img id="Codehighlighter1_65_119_Open_Image" onclick="this.style.display='none'; Codehighlighter1_65_119_Open_Text.style.display='none'; Codehighlighter1_65_119_Closed_Image.style.display='inline'; Codehighlighter1_65_119_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"></span><span id="Codehighlighter1_65_119_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000">&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;使用ThreadLocal以空间换时间解决SimpleDateFormat线程安全问题<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_143_592_Open_Image" onclick="this.style.display='none'; Codehighlighter1_143_592_Open_Text.style.display='none'; Codehighlighter1_143_592_Closed_Image.style.display='inline'; Codehighlighter1_143_592_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_143_592_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_143_592_Closed_Text.style.display='none'; Codehighlighter1_143_592_Open_Image.style.display='inline'; Codehighlighter1_143_592_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;DateUtil&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_143_592_Closed_Text"></span><span id="Codehighlighter1_143_592_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;String&nbsp;DATE_FORMAT&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">yyyy-MM-dd&nbsp;HH:mm:ss</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;ThreadLocal&nbsp;threadLocal&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ThreadLocal();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;第一次调用get将返回null<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;获取线程的变量副本，如果不覆盖initialValue，第一次get返回null，<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;故需要初始化一个SimpleDateFormat，并set到threadLocal中</span><span style="color: #008000"><br /><img id="Codehighlighter1_431_590_Open_Image" onclick="this.style.display='none'; Codehighlighter1_431_590_Open_Text.style.display='none'; Codehighlighter1_431_590_Closed_Image.style.display='inline'; Codehighlighter1_431_590_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_431_590_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_431_590_Closed_Text.style.display='none'; Codehighlighter1_431_590_Open_Image.style.display='inline'; Codehighlighter1_431_590_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;DateFormat&nbsp;getDateFormat()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_431_590_Closed_Text"></span><span id="Codehighlighter1_431_590_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateFormat&nbsp;df&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(DateFormat)&nbsp;threadLocal.get();<br /><img id="Codehighlighter1_501_574_Open_Image" onclick="this.style.display='none'; Codehighlighter1_501_574_Open_Text.style.display='none'; Codehighlighter1_501_574_Closed_Image.style.display='inline'; Codehighlighter1_501_574_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_501_574_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_501_574_Closed_Text.style.display='none'; Codehighlighter1_501_574_Open_Image.style.display='inline'; Codehighlighter1_501_574_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(df&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_501_574_Closed_Text"></span><span id="Codehighlighter1_501_574_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;df&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SimpleDateFormat(DATE_FORMAT);&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;threadLocal.set(df);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;df;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div>
<p><br /><br /></span></p>
<p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">我们看下我们覆盖的initialValue方法：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_27_55_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_55_Open_Text.style.display='none'; Codehighlighter1_27_55_Closed_Image.style.display='inline'; Codehighlighter1_27_55_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_27_55_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_27_55_Closed_Text.style.display='none'; Codehighlighter1_27_55_Open_Image.style.display='inline'; Codehighlighter1_27_55_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;T&nbsp;initialValue()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_27_55_Closed_Text"></span><span id="Codehighlighter1_27_55_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;直接返回null</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" /></span><span style="color: #000000">}</span></span></div>
<p><br /><br /></span></p>
<p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt"><strong>当然也可以使用：</strong></span><br /><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt">apache commons-lang包的DateFormatUtils或者FastDateFormat实现，apache保证是线程安全的，并且更高效。<br /><br /></span></p></div><img src ="http://www.blogjava.net/icewee/aggbug/353237.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2011-04-16 02:34 <a href="http://www.blogjava.net/icewee/archive/2011/04/16/353237.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中局部内部类可以访问它所在方法中定义的final修饰的局部变量的合理解释</title><link>http://www.blogjava.net/icewee/archive/2007/12/22/169530.html</link><dc:creator>IceWee</dc:creator><author>IceWee</author><pubDate>Sat, 22 Dec 2007 03:45:00 GMT</pubDate><guid>http://www.blogjava.net/icewee/archive/2007/12/22/169530.html</guid><wfw:comment>http://www.blogjava.net/icewee/comments/169530.html</wfw:comment><comments>http://www.blogjava.net/icewee/archive/2007/12/22/169530.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/icewee/comments/commentRss/169530.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/icewee/services/trackbacks/169530.html</trackback:ping><description><![CDATA[<div id="postmessage_14218" class="t_msgfont">标题有点长，可能有点语病，先别管那么多！<br />首先看下面的这段代码：
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_32_289_Open_Image" onclick="this.style.display='none'; Codehighlighter1_32_289_Open_Text.style.display='none'; Codehighlighter1_32_289_Closed_Image.style.display='inline'; Codehighlighter1_32_289_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_32_289_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_32_289_Closed_Text.style.display='none'; Codehighlighter1_32_289_Open_Image.style.display='inline'; Codehighlighter1_32_289_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;LocalInnerClassTest</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_32_289_Closed_Text"></span><span id="Codehighlighter1_32_289_Open_Text"><span style="color: #000000">{<br /><img id="Codehighlighter1_78_287_Open_Image" onclick="this.style.display='none'; Codehighlighter1_78_287_Open_Text.style.display='none'; Codehighlighter1_78_287_Closed_Image.style.display='inline'; Codehighlighter1_78_287_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_78_287_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_78_287_Closed_Text.style.display='none'; Codehighlighter1_78_287_Open_Image.style.display='inline'; Codehighlighter1_78_287_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&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)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_78_287_Closed_Text"></span><span id="Codehighlighter1_78_287_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Outer&nbsp;obj</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Outer();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">生成一个外部类对象</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SuperInner&nbsp;si</span><span style="color: #000000">=</span><span style="color: #000000">obj.outer();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">调用外部类中的outer()方法，返回一个SuperInner类型对象赋值给si</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;si.m1();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">调用被覆盖的方法m1(),输出：Inner's&nbsp;m1()&nbsp;20</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /></span><span id="Codehighlighter1_292_336_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />*定义一个接口SuperInner，内部定义一个抽象方法m1(),无返回类型<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" /></span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_358_383_Open_Image" onclick="this.style.display='none'; Codehighlighter1_358_383_Open_Text.style.display='none'; Codehighlighter1_358_383_Closed_Image.style.display='inline'; Codehighlighter1_358_383_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_358_383_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_358_383_Closed_Text.style.display='none'; Codehighlighter1_358_383_Open_Image.style.display='inline'; Codehighlighter1_358_383_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;SuperInner</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_358_383_Closed_Text"></span><span id="Codehighlighter1_358_383_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&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;m1();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /></span><span id="Codehighlighter1_386_436_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />*定义一个类Outer，内部只定义一个方法outer()，返回类型为SuperInner<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" /></span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_449_963_Open_Image" onclick="this.style.display='none'; Codehighlighter1_449_963_Open_Text.style.display='none'; Codehighlighter1_449_963_Closed_Image.style.display='inline'; Codehighlighter1_449_963_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_449_963_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_449_963_Closed_Text.style.display='none'; Codehighlighter1_449_963_Open_Image.style.display='inline'; Codehighlighter1_449_963_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Outer</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_449_963_Closed_Text"></span><span id="Codehighlighter1_449_963_Open_Text"><span style="color: #000000">{<br /><img id="Codehighlighter1_481_961_Open_Image" onclick="this.style.display='none'; Codehighlighter1_481_961_Open_Text.style.display='none'; Codehighlighter1_481_961_Closed_Image.style.display='inline'; Codehighlighter1_481_961_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_481_961_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_481_961_Closed_Text.style.display='none'; Codehighlighter1_481_961_Open_Image.style.display='inline'; Codehighlighter1_481_961_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;SuperInner&nbsp;outer()</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_481_961_Closed_Text"></span><span id="Codehighlighter1_481_961_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;a</span><span style="color: #000000">=</span><span style="color: #000000">10</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">方法中定义一个局部变量a，并赋值为10</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;b</span><span style="color: #000000">=</span><span style="color: #000000">20</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">再定义一个final局部变量b，初始化为20</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000"><br /><img id="Codehighlighter1_641_926_Open_Image" onclick="this.style.display='none'; Codehighlighter1_641_926_Open_Text.style.display='none'; Codehighlighter1_641_926_Closed_Image.style.display='inline'; Codehighlighter1_641_926_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_641_926_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_641_926_Closed_Text.style.display='none'; Codehighlighter1_641_926_Open_Image.style.display='inline'; Codehighlighter1_641_926_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Inner&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;SuperInner</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_641_926_Closed_Text"></span><span id="Codehighlighter1_641_926_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">在outer()方法中定义一个局部内部类Inner,实现接口SuperInner</span><span style="color: #008000"><br /><img id="Codehighlighter1_726_916_Open_Image" onclick="this.style.display='none'; Codehighlighter1_726_916_Open_Text.style.display='none'; Codehighlighter1_726_916_Closed_Image.style.display='inline'; Codehighlighter1_726_916_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_726_916_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_726_916_Closed_Text.style.display='none'; Codehighlighter1_726_916_Open_Image.style.display='inline'; Codehighlighter1_726_916_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;m1()</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_726_916_Closed_Text"></span><span id="Codehighlighter1_726_916_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">类中只有一个覆盖接口SuperInner的方法m1()</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Inner's&nbsp;m1()</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">a);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">编译报错</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Inner's&nbsp;m1()&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">b);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">编译通过，输出：Inner's&nbsp;m1()&nbsp;20</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; font-size: 12pt">&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; font-size: 12pt">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff; font-size: 12pt">new</span><span style="color: #000000; font-size: 12pt">&nbsp;Inner();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" /></span><span style="color: #000000; font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" /></span><span style="color: #000000; font-size: 12pt">}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br /><br /><span style="font-size: 12pt">我们先从主方法开始看代码的执行顺序，先生成一个Outer类对象obj，obj调用本类中方法outer()；程序开始跳到outer()方法内执行程序语句，先后生成局部变量a和b,再定义一个局部内部类Inner，返回一个SuperInner类型的对象。将返回的SuperInner类型对象地址传给SuperInner类型对象si。si再调用m1()方法，因为已经在局部内部类中覆盖了接口中的m1()方法，所以将调用局部内部类中的m1()方法，程序跳到局部内部类中m1()方法内执行程序语句，先输出一段字符串和a，结果编译报错，先 将这条程序语句隐藏，执行下面的语句，你会发现编译通过而且输出Inner's m1() 20！</span><br /><br /><span style="font-size: 12pt">为什么会这样呢？大家都知道局部变量仅仅在一个范围内有效，在方法调用完就被内存释放，在Outer类对象obj调用outer()方法时，a和b才产生，调用结束后被内存释放，那么b这个值也就不复存在了，为什么还会输出20呢？难道局部变量被final修饰就不会被内存释放而保留？</span><br /><br /><span style="font-size: 12pt">其实有部分操作对于程序员是透明的，那是JAVA语言开发者的小把戏，在定义a和b 时JVM(JAVA虚拟机)做了程序员看不到的操作，他将b拷贝了一份给局部内部类，也就是说JVM在局部内部类中定义了一个final int b=20；这个操作程序员是不知道的！当调用m1()方法时输出的20并不是原来outer()方法中定义的b，而仅仅是JVM拷贝的一个副本。那么为什么a没被打印出呢？那是因为JVM并没有拷贝它，因为没有final修饰，说明它可以被修改，如果把a 改为 a++</span>，此时JVM就不知道拷贝a还是a++了，所以对于无final修饰的局部变量JVM是不会拷贝传给局部内部类的，自然无法打输出！<br /><br /></div><img src ="http://www.blogjava.net/icewee/aggbug/169530.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/icewee/" target="_blank">IceWee</a> 2007-12-22 11:45 <a href="http://www.blogjava.net/icewee/archive/2007/12/22/169530.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>