﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-普通人的奇迹-随笔分类-java</title><link>http://www.blogjava.net/leekiang/category/21757.html</link><description>MDA/MDD/TDD/DDD/DDDDDDD</description><language>zh-cn</language><lastBuildDate>Sun, 11 May 2008 18:01:36 GMT</lastBuildDate><pubDate>Sun, 11 May 2008 18:01:36 GMT</pubDate><ttl>60</ttl><item><title>用utf-8还是GBK</title><link>http://www.blogjava.net/leekiang/archive/2008/05/11/199896.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Sun, 11 May 2008 14:38:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/05/11/199896.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/199896.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/05/11/199896.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/199896.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/199896.html</trackback:ping><description><![CDATA[
		<span id="r_c_q_p0">编码只是表示字符一种方式，字符还是那个字符，只不过其数值表示的不一样而已。字体、样式和用什么编码表示字符没有任何关系。不可能存在UTF-8达不到的效果。除非你处理字符串的方式有问题，例如后台程序写死了一个中文等于两个字节。或者你的css文件编码有问题。例如html用了UTF-8编码，而css文件用了GB编码，又没有用charset指定css的编码等等。而对于前台HTML来说，无论页面什么编码，JavaScript内建的字符串类型是UTF-16编码的，不存在任何问题。 UTF-8的编码是变长的，从1字节（兼容ASCII）到4字节不等。用UTF-8的好处是它能表示任意Unicode字符，而GBK/GB2312做不到，除了不能表示一些外国文字外，一些古老的中文（如康熙字典里的一些字）也不能表示，但在Unicode里就有。后来发展出的GB18030可以表示任意Unicode字符，也是变长编码，兼容GBK，最长4个字节。编码问题是很麻烦的事情，尤其是同一个系统中存在多种编码的情况。由于每种编码表示的字符范围有限，所以转码过程中有可能丢失字符信息。因此，如果你的程序着眼于全球市场，而不仅仅局限于中文用户，或者未来发展有这方面的需求，那么就应该坚持程序内部都使用同一种Unicode编码，如UTF-8，这样以后程序在国际化时就不会存在什么编码问题。<br />来源: <a href="http://news.csdn.net/n/20080509/115815.html">http://news.csdn.net/n/20080509/115815.html</a></span>
<img src ="http://www.blogjava.net/leekiang/aggbug/199896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-05-11 22:38 <a href="http://www.blogjava.net/leekiang/archive/2008/05/11/199896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取天气预报服务</title><link>http://www.blogjava.net/leekiang/archive/2008/04/08/191423.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Tue, 08 Apr 2008 03:54:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/04/08/191423.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/191423.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/04/08/191423.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/191423.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/191423.html</trackback:ping><description><![CDATA[
		<a href="http://weather.news.qq.com/inc/ss125.htm">http://weather.news.qq.com/inc/ss125.htm</a>
		<br />
		<a href="http://news.sina.com.cn/iframe/weather/310100.html">http://news.sina.com.cn/iframe/weather/310100.html</a>
		<br />http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?op=getWeatherbyCityName<br /><a href="http://www.javaeye.com/post/394802?page=1">http://www.javaeye.com/post/394802?page=1</a><br /><a href="http://www.cma.gov.cn/tqyb/weatherdetail/54161.html">http://www.cma.gov.cn/tqyb/weatherdetail/54161.html</a><br /><a href="http://www.pcjx.com/Java/WebServices/39183.html">http://www.pcjx.com/Java/WebServices/39183.html</a><br /><a href="http://blog.csdn.net/wfront/archive/2006/11/13/1382128.aspx">http://blog.csdn.net/wfront/archive/2006/11/13/1382128.aspx</a><br /><img src ="http://www.blogjava.net/leekiang/aggbug/191423.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-04-08 11:54 <a href="http://www.blogjava.net/leekiang/archive/2008/04/08/191423.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java IO</title><link>http://www.blogjava.net/leekiang/archive/2008/03/27/189073.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Thu, 27 Mar 2008 09:26:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/03/27/189073.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/189073.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/03/27/189073.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/189073.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/189073.html</trackback:ping><description><![CDATA[1,oracle的blob的InputStream读过一次后，再执行reset时就会报错。而上传的附件的inputstream就不会。<br />java.io.IOException: Mark invalid or stream not marked.<br />    at oracle.jdbc.driver.OracleBlobInputStream.reset(OracleBlobInputStream.java:267)<br />2,<br />InputStream s = new BufferedInputStream(new FileInputStream("c:\\test"));<br />BufferedInputSream是可以使用mark及reset方法，使用上述的嵌套方法间接的使其它的stream也支持这些方法了。<br />3,以下代码有漏洞<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> Object readObject(File file)<br />    {<br />        Object o </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);">;<br />        </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (file.exists())<br />        {<br />            FileInputStream fis </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);">;<br />            ObjectInputStream ois </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);">;<br />            </span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);"><br />            {<br />                fis </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(file);<br />                ois </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);"> ObjectInputStream(fis);<br />                o </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> ois.readObject();<br />            }<br />            </span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);"> (Throwable e)<br />            {<br />                e.printStackTrace();<br />            }<br />            </span><span style="color: rgb(0, 0, 255);">finally</span><span style="color: rgb(0, 0, 0);"><br />            {<br />                </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (fis </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);">)<br />                {<br />                    </span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);"><br />                    {<br />                        fis.close();<br />                    }<br />                    </span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);"> (IOException e)<br />                    {<br />                        e.printStackTrace();<br />                    }<br />                }<br />            }            <br />        }<br />        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> o;<br />    }</span></div><br /><a target="_blank" href="/mooninwell/archive/2006/03/24/37277.html">在IO的编程中一定要保存基本流的引用</a><br /><img src ="http://www.blogjava.net/leekiang/aggbug/189073.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-03-27 17:26 <a href="http://www.blogjava.net/leekiang/archive/2008/03/27/189073.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java备忘</title><link>http://www.blogjava.net/leekiang/archive/2008/03/15/186411.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Fri, 14 Mar 2008 18:43:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/03/15/186411.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/186411.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/03/15/186411.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/186411.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/186411.html</trackback:ping><description><![CDATA[
		<font size="-1">1,ImageMagick一个优秀的图像处理软件,<font color="#c60a00">JMagick</font>是对ImageMagick的JAVA面向对象化包装<br />2,  * </font>@see       #create(int, int, int, int)<br />
   * @see       Component#getGraphics()<br />3,Process Monitor 查看IO操作<br />http://technet.microsoft.com/zh-cn/sysinternals/bb896645(en-us).aspx<br />http://www.blogjava.net/tacy/archive/2007/09/20/146771.html<br />4,<br />做项目时碰到要查询和统计海量数据，所以想到了Hadoop，但同事反映Hadoop的性能不稳定，处理离线数据还行，处理实时数据就不保险了。又看了看其它的分布式文件系统，比如mogilefs、lustre等，它们只能分布式存储文件，不能分布式计算，换句话说：它们只能分摊IO，不能分摊CPU。最后决定离线数据还是用Hadoop。<a target="_blank" href="http://donghao.org/2007/09/oehadoopiea.html">原文</a><br />
   
<img src ="http://www.blogjava.net/leekiang/aggbug/186411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-03-15 02:43 <a href="http://www.blogjava.net/leekiang/archive/2008/03/15/186411.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java基础笔记</title><link>http://www.blogjava.net/leekiang/archive/2008/03/07/184405.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Fri, 07 Mar 2008 01:44:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/03/07/184405.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/184405.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/03/07/184405.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/184405.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/184405.html</trackback:ping><description><![CDATA[1<br />      //这是properties在同一文件夹下。<br />      InputStream in = this.getClass.getResourceAsStream("jdbc.properties");<br />      //这是properties在所在文件的根目录下<br />      InputStream in = this.getClass.getResourceAsStream("/jdbc.properties");<img src ="http://www.blogjava.net/leekiang/aggbug/184405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-03-07 09:44 <a href="http://www.blogjava.net/leekiang/archive/2008/03/07/184405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.lang.NoSuchMethodError的一种可能</title><link>http://www.blogjava.net/leekiang/archive/2008/02/26/182114.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Mon, 25 Feb 2008 20:53:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/02/26/182114.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/182114.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/02/26/182114.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/182114.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/182114.html</trackback:ping><description><![CDATA[    新老版本并存，<span id="_ctl2_lblPermalink">而老版本的jar包路径还在classpath中，并且在新版本的前面，程序调用新方法，编译没问题，但运行时会先去找旧的classes，而旧的classes中不含此方法，故报NoSuchMethodError错误，而且这个还不是异常，捕获不了，不好找原因。<br />    另外新旧版本并存，老版本在前，运行时调用的方法名相同，但内容变了，这时就不是报Error了,而是可能报各种稀奇古怪的异常。<br />    使用poi-3.0.2时，如果旧的poi还在classpath,则以上两种情况都可能发生。<br /></span><img src ="http://www.blogjava.net/leekiang/aggbug/182114.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-02-26 04:53 <a href="http://www.blogjava.net/leekiang/archive/2008/02/26/182114.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java定时任务</title><link>http://www.blogjava.net/leekiang/archive/2008/02/16/180147.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Fri, 15 Feb 2008 20:04:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/02/16/180147.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/180147.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/02/16/180147.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/180147.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/180147.html</trackback:ping><description><![CDATA[<p>通过监听器（Listener）和定时器（Timer）定时执行某个任务（Task）。</p> <h3><strong><em>(1)Listener</em> </strong></h3> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 58.69%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; height: 298px; background-color: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0,0,255)">import</span> <span style="color: rgb(0,0,0)"> java.util.Timer;<br></span><span style="color: rgb(0,0,255)">import</span> <span style="color: rgb(0,0,0)"> javax.servlet.ServletContextEvent;<br></span><span style="color: rgb(0,0,255)">import</span> <span style="color: rgb(0,0,0)"> javax.servlet.ServletContextListener;<br><br></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)"> MyListener </span> <span style="color: rgb(0,0,255)">implements</span> <span style="color: rgb(0,0,0)"> ServletContextListener {<br>&nbsp; </span> <span style="color: rgb(0,0,255)">private</span> <span style="color: rgb(0,0,0)"> Timer timer </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)">;<br><br>&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)"> contextInitialized(ServletContextEvent event) {<br>&nbsp;&nbsp;&nbsp; timer </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)"> Timer(</span> <span style="color: rgb(0,0,255)">true</span> <span style="color: rgb(0,0,0)">);<br>&nbsp;&nbsp;&nbsp; timer.schedule(</span> <span style="color: rgb(0,0,255)">new</span> <span style="color: rgb(0,0,0)"> MyTask(), </span> <span style="color: rgb(0,0,0)">0</span> <span style="color: rgb(0,0,0)">, </span> <span style="color: rgb(0,0,0)">86400000</span> <span style="color: rgb(0,0,0)">);</span> <span style="color: rgb(0,128,0)">//</span> <span style="color: rgb(0,128,0)"> milliseconds</span> <span style="color: rgb(0,128,0)"><br></span><span style="color: rgb(0,0,0)">&nbsp; }<br><br>&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)"> contextDestroyed(ServletContextEvent event) {<br>&nbsp;&nbsp;&nbsp; timer.cancel();<br>&nbsp; }<br>} </span> </div><br> <h3><strong><em>(2)Task</em> </strong></h3> <p></p> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0,0,255)">import</span> <span style="color: rgb(0,0,0)"> java.util.TimerTask;<br></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)"> MyTask </span> <span style="color: rgb(0,0,255)">extends</span> <span style="color: rgb(0,0,0)"> TimerTask {<br></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)"> run() {<br>System.out.println((</span> <span style="color: rgb(0,0,255)">new</span> <span style="color: rgb(0,0,0)"> Date()));<br>&nbsp; }<br>}</span> </div><br> <h3><strong><em>(3)web.xml配置</em> </strong></h3> <p></p> <div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0,0,0)">&lt;</span> <span style="color: rgb(0,0,0)">listener</span> <span style="color: rgb(0,0,0)">&gt;</span> <span style="color: rgb(0,0,0)"><br></span><span style="color: rgb(0,0,0)">&lt;</span> <span style="color: rgb(0,0,0)">listener</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)">&gt;</span> <span style="color: rgb(0,0,0)">com.fastunit.samples.listener.MyListener</span> <span style="color: rgb(0,0,0)">&lt;/</span> <span style="color: rgb(0,0,0)">listener</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)">&gt;</span> <span style="color: rgb(0,0,0)"><br></span><span style="color: rgb(0,0,0)">&lt;/</span> <span style="color: rgb(0,0,0)">listener</span> <span style="color: rgb(0,0,0)">&gt;</span> </div><img src ="http://www.blogjava.net/leekiang/aggbug/180147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-02-16 04:04 <a href="http://www.blogjava.net/leekiang/archive/2008/02/16/180147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ConcurrentModificationException</title><link>http://www.blogjava.net/leekiang/archive/2008/01/28/178254.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Mon, 28 Jan 2008 12:31:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/01/28/178254.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/178254.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/01/28/178254.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/178254.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/178254.html</trackback:ping><description><![CDATA[遍历List时删掉某个元素，结果报ConcurrentModificationException<br />解决办法:把list.remove(obj)改为iterator.remove()<img src ="http://www.blogjava.net/leekiang/aggbug/178254.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-01-28 20:31 <a href="http://www.blogjava.net/leekiang/archive/2008/01/28/178254.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>getHeader("Referer")取不到值</title><link>http://www.blogjava.net/leekiang/archive/2008/01/28/178248.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Mon, 28 Jan 2008 12:21:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/01/28/178248.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/178248.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/01/28/178248.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/178248.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/178248.html</trackback:ping><description><![CDATA[getHeader("Referer")要走http协议时才有值，也就是说要通过&lt;a   href="url"&gt;sss&lt;/a&gt;标记才能获得那个值   <br />  而通过改变location或是&lt;a   href="javascript:location='url'"&gt;sss&lt;/a&gt;都是得不到那个值的。<br />有无解决办法?<br />另外据说Referer可以伪造，如何伪造？<img src ="http://www.blogjava.net/leekiang/aggbug/178248.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-01-28 20:21 <a href="http://www.blogjava.net/leekiang/archive/2008/01/28/178248.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在action中或servlet中得到pageContext</title><link>http://www.blogjava.net/leekiang/archive/2007/12/05/165680.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Wed, 05 Dec 2007 15:03:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/12/05/165680.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/165680.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/12/05/165680.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/165680.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/165680.html</trackback:ping><description><![CDATA[PageContext pageContext = JspFactory.getDefaultFactory()<br />     .getPageContext(this.servlet, request, response, null,<br />       true, 8192, true);<br />如果是servlet,把this.servlet改为this<img src ="http://www.blogjava.net/leekiang/aggbug/165680.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-12-05 23:03 <a href="http://www.blogjava.net/leekiang/archive/2007/12/05/165680.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>double转string</title><link>http://www.blogjava.net/leekiang/archive/2007/09/16/145651.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Sun, 16 Sep 2007 15:25:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/09/16/145651.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/145651.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/09/16/145651.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/145651.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/145651.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img id="Codehighlighter1_51_524_Open_Image" onclick="this.style.display='none'; Codehighlighter1_51_524_Open_Text.style.display='none'; Codehighlighter1_51_524_Closed_Image.style.display='inline'; Codehighlighter1_51_524_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_51_524_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_51_524_Closed_Text.style.display='none'; Codehighlighter1_51_524_Open_Image.style.display='inline'; Codehighlighter1_51_524_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;double2String(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;d,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;fNumber)&nbsp;</span><span id="Codehighlighter1_51_524_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_51_524_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(fNumber&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fNumber&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;pattern&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img id="Codehighlighter1_133_383_Open_Image" onclick="this.style.display='none'; Codehighlighter1_133_383_Open_Text.style.display='none'; Codehighlighter1_133_383_Closed_Image.style.display='inline'; Codehighlighter1_133_383_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_133_383_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_133_383_Closed_Text.style.display='none'; Codehighlighter1_133_383_Open_Image.style.display='inline'; Codehighlighter1_133_383_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">switch</span><span style="color: #000000">&nbsp;(fNumber)&nbsp;</span><span id="Codehighlighter1_133_383_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_133_383_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">case</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">:<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">#0</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">$NON-NLS-1$</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">:<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">#0.</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">$NON-NLS-1$</span><span style="color: #008000"><br />
</span><span style="color: #008080">12</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringBuffer(pattern);<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img id="Codehighlighter1_317_341_Open_Image" onclick="this.style.display='none'; Codehighlighter1_317_341_Open_Text.style.display='none'; Codehighlighter1_317_341_Closed_Image.style.display='inline'; Codehighlighter1_317_341_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_317_341_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_317_341_Closed_Text.style.display='none'; Codehighlighter1_317_341_Open_Image.style.display='inline'; Codehighlighter1_317_341_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;fNumber;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_317_341_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_317_341_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.append(</span><span style="color: #000000">'</span><span style="color: #000000">#</span><span style="color: #000000">'</span><span style="color: #000000">);<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;b.toString();<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DecimalFormat&nbsp;formatter&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DecimalFormat();<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formatter.applyPattern(pattern);<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;formatter.format(d);<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;value;<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
double直接输出时,如果小数点后位数太长会出现字母e,采用本方法转换为string再输出
<img src ="http://www.blogjava.net/leekiang/aggbug/145651.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-09-16 23:25 <a href="http://www.blogjava.net/leekiang/archive/2007/09/16/145651.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>原来BufferedReader不能和InputStream交替使用(转)</title><link>http://www.blogjava.net/leekiang/archive/2007/08/03/134140.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Thu, 02 Aug 2007 17:23:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/08/03/134140.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/134140.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/08/03/134140.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/134140.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/134140.html</trackback:ping><description><![CDATA[
		<div class="bvMsg" id="msgcns!87AF3B24336DF461!180">最近写代码时发现用BufferedReader把InputStream包装后,使用BufferedReader读取后,然后再使用 InputStream读取时总是发现问题,好像总是丢数据,由于我在流里面同时混了二进制数据与字符串,所以很不好调度,然后专门写了下面的代码去测试发现原来是. BufferedReader读取数据时会把数据从流里面取出一部分缓存,如果你再转向去用InputStream去读取的话,BufferedReader缓存里面的数据InputStream是读取不到的 .<br /><br /><br />package bytearray;<br /><br />import java.io.BufferedReader;<br />import java.io.ByteArrayInputStream;<br />import java.io.DataInputStream;<br />import java.io.IOException;<br />import java.io.InputStream;<br />import java.io.InputStreamReader;<br /><br />public class TestByteArray {<br /><br />public byte[] generateByte() {<br />// 构造一个测试流,这样就不用从文件里面读取了,在这个流里面使用了大量的回车换行("\r\n"),这样方便过会的测试<br />// 过会,我会通过把字符串转换成byte数组,然后通过ByteArrayInputStream来构造一个数据流<br />return "a\r\nbc\r\ndef\r\nghi\r\nj\r\nklmn\r\nopqr\r\ns\r\ntuvwxyz "<br />.getBytes();<br /><br />}<br /><br />public static void main(String[] args) throws IOException {<br />// TODO Auto-generated method stub<br />TestByteArray self = new TestByteArray();<br />byte[] be = self.generateByte();<br />InputStream in = new ByteArrayInputStream(be);<br />BufferedReader bufferReader = new BufferedReader(new InputStreamReader(<br />in));<br />// 使用DataInputStream而不直接使用Inputstream是因为这样方便,因为他提供了读取行<br />// 不过听说他读取行时把字节转变为字符时会有问题,所以不推荐使用,不过我们在这只做测试就没关系了<br />DataInputStream dataInputStream = new DataInputStream(in);<br /><br />// 先读取流里面的一行数据<br />System.out.println("bufferReader=" + bufferReader.readLine());<br />// 回过头来使用dataInputStream读取数据,会发现什么也读取不到<br />System.out.println("dataInputStream=" + dataInputStream.readLine());<br />// 回过头来使用inputstream读取数据,会发现什么也读取不到<br />System.out.println("in=" + in.read());<br />// InputStream读取不到数据,然后再使用原来的BufferedReader来读取数据,发现是接着原来读取的.<br />System.out.println("bufferReader=" + bufferReader.readLine());<br /><br />//我们上面的字符串比较小,我想如果字符串,大到缓存装不下的时候,使用inputstream回头去读取数据,肯定是能读取到的<br />//这个我就不测试了<br /><br />}<br /><br />}<br />转自 <a href="http://itspy.spaces.live.com/blog/cns!87AF3B24336DF461!180.entry">http://itspy.spaces.live.com/blog/cns!87AF3B24336DF461!180.entry</a><br /></div>
<img src ="http://www.blogjava.net/leekiang/aggbug/134140.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-08-03 01:23 <a href="http://www.blogjava.net/leekiang/archive/2007/08/03/134140.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]java.lang.OutOfMemoryError: PermGen space及其解决方法</title><link>http://www.blogjava.net/leekiang/archive/2007/05/19/118489.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Fri, 18 May 2007 17:23:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/05/19/118489.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/118489.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/05/19/118489.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/118489.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/118489.html</trackback:ping><description><![CDATA[<div class=entry-content>
<div class=entry-body>
<div class=postText>
<p>今天tomcat出现了
<div class=code_title>java 代码</div>
<div class=dp-highlighter>
<ol class=dp-j>
    <li class=alt><span><span>Exception&nbsp;in&nbsp;thread&nbsp;</span><span class=string>"DefaultQuartzScheduler_Worker-3"</span><span>&nbsp;java.lang.OutOfMemoryError:&nbsp;PermGen&nbsp;space&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
那是发布了grails的应用以后出现的，经google以后，发现本文，在此以此作为备份，全部版权归真正作者所有
<p>&#160;</p>
http://www.wujianrong.com/archives/2006/12/javalangoutofmemoryerror_permg.html(google的原文地址)
<p>1、<br></p>
<p>PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出，解决方法也一定是加大内存。说说为什么会内存益出：这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域，它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理，所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。</p>
改正方法：-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m </div>
</div>
<div class=entry-more id=more>
<p>2、</p>
<p>在tomcat中redeploy时出现outofmemory的错误.</p>
<p>可以有以下几个方面的原因:</p>
<p>１,使用了<u><font color=#800080>proxool,因为proxool内部包含了一个老版本的cglib.</font></u></p>
<p><u><font color=#800080>2, log4j,最好不用,只用common-logging</font></u></p>
<p><u><font color=#800080>3, 老版本的cglib,快点更新到最新版。</font></u></p>
<p><u><font color=#800080>４，更新到最新的hibernate3.2</font></u><br></p>
3、<br><br>这里以tomcat环境为例，其它WEB服务器如jboss,weblogic等是同一个道理。<br>一、java.lang.OutOfMemoryError: PermGen space
<p>PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,<br>这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,<br>它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对<br>PermGen space进行清理，所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,<br>这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小<br>超过了jvm默认的大小(4M)那么就会产生此错误信息了。<br>解决方法： 手动设置MaxPermSize大小</p>
<p>修改TOMCAT_HOME/bin/catalina.sh<br>在&#8220;echo "Using CATALINA_BASE:&nbsp;&nbsp; $CATALINA_BASE"&#8221;上面加入以下行：<br>JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m<br>建议：将相同的第三方jar文件移置到tomcat/shared/lib目录下，这样可以达到减少jar 文档重复占用内存的目的。</p>
<p>二、java.lang.OutOfMemoryError: Java heap space<br>Heap size 设置<br>JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值，<br>其初始空间(即-Xms)是物理内存的1/64，最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可<br>进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。<br>提示：在JVM中如果98％的时间是用于GC且可用的Heap size 不足2％的时候将抛出此异常信息。<br>提示：Heap Size 最大不要超过可用物理内存的80％，一般的要将-Xms和-Xmx选项设置为相同，而-Xmn为1/4的-Xmx值。 <br>解决方法：手动设置Heap size<br>修改TOMCAT_HOME/bin/catalina.sh<br>在&#8220;echo "Using CATALINA_BASE:&nbsp;&nbsp; $CATALINA_BASE"&#8221;上面加入以下行：<br>JAVA_OPTS="-server -Xms800m -Xmx800m&nbsp;&nbsp; -XX:MaxNewSize=256m"</p>
<p>三、实例，以下给出1G内存环境下java jvm 的参数设置参考：</p>
<p>JAVA_OPTS="-server -Xms800m -Xmx800m&nbsp; -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "</p>
<p><br>三、相关资料</p>
<p><a href="http://www.tot.name/show/3/7/20061112220131.htm"><font color=#0000ff><u>/show/3/7/20061112220131.htm</u></font></a></p>
<p><a href="http://www.tot.name/show/3/7/20061112220054.htm"><u><font color=#0000ff>/show/3/7/20061112220054.htm</font></u></a></p>
<p><a href="http://www.tot.name/show/3/7/20061112220201.htm"><u><font color=#0000ff>/show/3/7/20061112220201.htm</font></u></a></p>
题外话：经常看到网友抱怨tomcat的性能不如...，不稳定等，其实根据笔者几年的经验，从"互联星空&#8220;到现在的房产门户网，我们<br>均使用tomcat作为WEB服务器，每天访问量百万多，tomcat仍然运行良好。建议大家有问题多从自己程序入手，多看看java的DOC文档<br>并详细了解JVM的知识。这样开发的程序才会健壮。<br><br><font size=4><span style="COLOR: rgb(153,204,0)">延伸阅读：</span></font>
<h3 class=entry-header><a href="http://www.wujianrong.com/archives/2007/02/jvm_1.html#more"><font color=#0000ff><u>JVM 性能调整的一些基本概念</u></font></a></h3>
<h2 class=r><font color=#0000ff><u></u></font></h2>
<h2 class=r><a href="http://www.wujianrong.com/archives/2006/11/apachetomcat.html"><span class=l><font color=#0000ff><u>apache+Tomcat负载平衡设置详解[转]</u></font></span></a></h2>
<h1><font color=#0000ff size=3><a href="http://java.sun.com/j2se/1.3/docs/tooldocs/linux/java.html"><u>java - the Java application launcher</u></a></font><br></h1>
<h3 class=entry-header><a href="http://www.wujianrong.com/archives/2006/11/jvm.html"><u><font color=#0000ff>JVM调优[转]</font></u></a></h3>
</div>
</div>
<img src ="http://www.blogjava.net/leekiang/aggbug/118489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-05-19 01:23 <a href="http://www.blogjava.net/leekiang/archive/2007/05/19/118489.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ClassNotFoundException和NoClassDefError之间的区别</title><link>http://www.blogjava.net/leekiang/archive/2007/04/26/113810.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Thu, 26 Apr 2007 07:55:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/04/26/113810.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/113810.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/04/26/113810.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/113810.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/113810.html</trackback:ping><description><![CDATA[<p>ClassNotFoundException发生在装入阶段。 <br>当应用程序试图通过类的字符串名称，使用常规的三种方法装入类，但却找不到指定名称的类定义时就抛出该异常。</p>
<p>NoClassDefFoundError： 当目前执行的类已经编译，但是找不到它的定义时</p>
<p>也就是说你如果编译了一个类B，在类A中调用，编译完成以后，你又删除掉B，运行A的时候那么就会出现这个错误<br><br>加载时从外存储器找不到需要的class就出现ClassNotFoundException <br>连接时从内存找不到需要的class就出现NoClassDefFoundError<br><br></p>
<p>大概这样的吧,JDK API里面的解释 <br>1.NoClassDefFoundError <br>当 Java 虚拟机或 ClassLoader 实例试图在类的定义中加载（作为通常方法调用的一部分或者作为使用 new 表达式创建的新实例的一部分），但无法找到该类的定义时，抛出此异常。 <br>当前执行的类被编译时，所搜索的类定义存在，但无法再找到该定义。 </p>
<p>2.ClassNotFoundException <br>当应用程序试图使用以下方法通过字符串名加载类时，抛出该异常： <br>* Class 类中的 forName 方法。 <br>* ClassLoader 类中的 findSystemClass 方法。 <br>* ClassLoader 类中的 loadClass 方法。 <br>但是没有找到具有指定名称的类的定义。从 1.4 版本开始，此异常已经更新，以符合通用的异常链机制。在构造时提供并通过 getException() 方法访问的&#8220;加载类时引发的可选异常&#8221;，现在被称为原因，它可以通过 Throwable.getCause() 方法以及与上面提到的&#8220;遗留方法&#8221;来访问。<br><br>见<a href="http://www.javaeye.com/topic/21141?page=1">http://www.javaeye.com/topic/21141?page=1</a></p>
<img src ="http://www.blogjava.net/leekiang/aggbug/113810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-04-26 15:55 <a href="http://www.blogjava.net/leekiang/archive/2007/04/26/113810.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>