﻿<?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-@OverWrite BlogJava-随笔分类-Java</title><link>http://www.blogjava.net/vesung/category/28848.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 12 Jan 2015 22:57:58 GMT</lastBuildDate><pubDate>Mon, 12 Jan 2015 22:57:58 GMT</pubDate><ttl>60</ttl><item><title>HttpClient简介</title><link>http://www.blogjava.net/vesung/archive/2012/08/12/385316.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Sun, 12 Aug 2012 09:50:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2012/08/12/385316.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/385316.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2012/08/12/385316.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/385316.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/385316.html</trackback:ping><description><![CDATA[<span style="font-family: arial, 宋体, sans-serif; line-height: 22.727272033691406px; background-color: #ffffff; ">httpclient已停止维护，其替代产品为</span>
<span style="font-family: Verdana, Helvetica, Arial, sans-serif; font-size: small; line-height: 16.363636016845703px; background-color: #ffffff; ">Apache HttpComponents</span>&nbsp;。 官方声明如下（<a href="http://hc.apache.org/httpclient-3.x/">详细信息点击这里</a>）：<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 />-->The&nbsp;Commons&nbsp;HttpClient&nbsp;project&nbsp;is&nbsp;now&nbsp;end&nbsp;of&nbsp;life,&nbsp;and&nbsp;is&nbsp;no&nbsp;longer&nbsp;being&nbsp;developed.&nbsp;It&nbsp;has&nbsp;been&nbsp;replaced&nbsp;by&nbsp;the&nbsp;Apache&nbsp;HttpComponents&nbsp;project&nbsp;in&nbsp;its&nbsp;HttpClient&nbsp;and&nbsp;HttpCore&nbsp;modules,&nbsp;which&nbsp;offer&nbsp;better&nbsp;performance&nbsp;and&nbsp;more&nbsp;flexibility.</div><span style="font-family: arial, 宋体, sans-serif; line-height: 22.727272033691406px; background-color: #ffffff; "><br />HttpClient 是 Apache Jakarta Common 下的子项目，可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的</span><font color="#136ec2" face="arial, 宋体, sans-serif"><span style="line-height: 22.727272033691406px; background-color: #ffffff; ">客户端</span></font><span style="font-family: arial, 宋体, sans-serif; line-height: 22.727272033691406px; background-color: #ffffff; ">编</span><span style="font-family: arial, 宋体, sans-serif; line-height: 22.727272033691406px; background-color: #ffffff; ">程工具包，并且它支持 HTTP 协议最新的版本和建议。本文首先介绍 HTTPClient，然后根据作者实际工作经验给出了一些常见问题的解决方法。</span>&nbsp;<br /><br />所以打算用HttpClient的朋友，可以考虑使用<span style="font-family: Verdana, Helvetica, Arial, sans-serif; font-size: small; line-height: 16.363636016845703px; background-color: #ffffff; ">HttpComponents</span>&nbsp;了。<br /><span style="font-family: Verdana, Helvetica, Arial, sans-serif; font-size: small; line-height: 16.363636016845703px; background-color: #ffffff; ">HttpComponents</span>&nbsp;入门，笔者认为 iteye上的一篇文章写的不错，大家可以参考 <a href="http://ahopedog2.iteye.com/blog/1154378">《HttpComponents入门解析》</a><img src ="http://www.blogjava.net/vesung/aggbug/385316.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2012-08-12 17:50 <a href="http://www.blogjava.net/vesung/archive/2012/08/12/385316.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何调整eclipse字体大小</title><link>http://www.blogjava.net/vesung/archive/2012/07/26/384065.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Thu, 26 Jul 2012 06:46:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2012/07/26/384065.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/384065.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2012/07/26/384065.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/384065.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/384065.html</trackback:ping><description><![CDATA[现在本本屏幕越来越小， 在上面运行eclipse就会显得字体小， 那么如何调整字体大小那？<br />方法一：<br />&nbsp; &nbsp; 打开菜单 window-&gt;preferences-&gt;general-&gt;appearance-&gt;colors and fonts<br />打开basec里面的text font 进行编辑会弹出一个字体编辑的窗口， 在里面调整字体即可。<br /><br />方法二：<br />&nbsp; &nbsp; 因为eclipse版本众多，所以菜单路径也会有所差异。 还有一种方法可以不用担心不同版本的差异：<br />&nbsp; &nbsp; 开始先打开菜单&nbsp;window-&gt;preferences &nbsp; 在左上角数据font 回车， eclipse就会自动搜索出可以设置字体的地方了。 接下来打开basec里面的text font 进行编辑会弹出一个字体编辑的窗口， 在里面调整字体即可。&nbsp;<br /><br /><br />一点小技巧希望对大家能有所帮助。<br /><img src ="http://www.blogjava.net/vesung/aggbug/384065.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2012-07-26 14:46 <a href="http://www.blogjava.net/vesung/archive/2012/07/26/384065.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>你属于那个版本的程序员？</title><link>http://www.blogjava.net/vesung/archive/2008/06/29/211554.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Sun, 29 Jun 2008 15:28:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2008/06/29/211554.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/211554.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2008/06/29/211554.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/211554.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/211554.html</trackback:ping><description><![CDATA[<p>国外开发者博客中有一篇有趣的文章，将程序员按水平像软件版本号那样划分为不同的版本。相对于在招聘时分为初级，中级，高级程序员，直接表明需要某种语言N版本的程序员或许更方便直接。根据作者的观点，可将WEB开发者大致分为以下几个版本：</p>
<p>Alpha：阅读过一些专业书籍，大多数能用Dreamweaver或者FrontPage帮朋友制作一些Web页面。但在他们熟练掌握HTML代码以前，你大概不会雇佣他们成为职业的WEB制作人员。</p>
<p>Beta：已经比较擅长整合站点页面了，在HTML技巧方面也有一定造诣，但还是用Tables来制作页面，不了解CSS，在面对动态页面或数据库连接时还是底气不足。</p>
<p>Pre Version 1 (0.1)：比Beta版的开发者水平要高。熟悉HTML，开始了解CSS是如何运作的，懂一点JavaScript，但还是基于业余水准，逐步开始关心动态站点搭建和数据库连接的知识。这个版本的WEB开发人员还远不能成为雇主眼中的香饽饽。</p>
<p>1.0: 能够基本把控整个站点开发，针对每个问题尽可能的找到最直接的解决办法。但对可测性，可扩展性以及在不同(层)框架下如何选择最合适的WEB设计工具尚无概念。这个版本的WEB开发者有良好的技术基础，需要有进一步的帮助和指导。</p>
<p>&nbsp;</p>
<p>2.0：懂面向对象的编程语言，理解分层开发的必要性，关注代码分离，对问题寻找更完美的解决方法，偶然也会考虑设计模式的问题，但对此仍然概念不清。属于优秀的初级开发者，能完成较松散的代码开发(相对大型严谨的站点开发而言)，在面对较复杂问题寻找解决办法时需要周边人的帮助。</p>
<p>3.0：开始较为深入的理解面向对象编程和设计模式，了解他们的用途，当看到好的设计模式时能看透其本质，逐步关注分层的架构解决办法和可测试性。理解不同的开发语言并能说出他们的异同(例如各自的优势)。属于优秀的中级别开发者，雇主也确信他们最终能找到问题的解决办法，这个版本的人可以给1.0和2.0的开发者以指导。但他们对架构的理解仍然不够清晰，值得一提的是，只要给予一些指导，他们能很快理解并熟记做出的决定，以及选定方案的优势所在。</p>
<p>4.0：理解模式，重视用户的反馈。着手研究方法论，架构设计和软件开发的最佳入口。头脑中已经形成了超越开发语言，技术架构的整体方案，可根据需求解构程序。能从理论的角度，不同模式如何融合成最佳形态，将多种X-驱动的模式应用到不同的方案中。是精通多语言的高手，理解不同系统和方法论的细微差别，属于高级程序员。这个级别的人能够轻易的辅导2.0和3.0的程序员，将他们推向更高的级别。</p>
<p>5.0：从系统的角度考虑问题。对各种系统结构有深入研究，能对整个代码架构中的问题进行改进。在团队粘合性以及代码安全性方面有杰出贡献。对1.0到4.0版本的开发人员出现的问题能及时察觉，让整个团队保持积极性且保持兴奋的状态创建软件解决办法。举例来说，他们总是对新的技术和信息保持饥渴状态，试图用最简便的方案解决开发任务。在整个IT团队中获得信任，属于高级程序员和架构师。</p>
<p>那么，您属于哪个版本的程序员呢？</p>
<img src ="http://www.blogjava.net/vesung/aggbug/211554.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2008-06-29 23:28 <a href="http://www.blogjava.net/vesung/archive/2008/06/29/211554.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ajax级联菜单实例</title><link>http://www.blogjava.net/vesung/archive/2008/06/12/207290.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Thu, 12 Jun 2008 01:44:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2008/06/12/207290.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/207290.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2008/06/12/207290.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/207290.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/207290.html</trackback:ping><description><![CDATA[不说废话了，直接看代码：<br />
页面：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">='text/javascript'&nbsp;</span><span style="color: #ff0000">src</span><span style="color: #0000ff">='jquery.js'</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img id="Codehighlighter1_102_842_Open_Image" onclick="this.style.display='none'; Codehighlighter1_102_842_Open_Text.style.display='none'; Codehighlighter1_102_842_Closed_Image.style.display='inline'; Codehighlighter1_102_842_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_102_842_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_102_842_Closed_Text.style.display='none'; Codehighlighter1_102_842_Open_Image.style.display='inline'; Codehighlighter1_102_842_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">='text/javascript'</span><span style="color: #0000ff">&gt;</span><span id="Codehighlighter1_102_842_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_102_842_Open_Text"><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000; background-color: #f5f5f5">//</span><span style="color: #008000; background-color: #f5f5f5">js代码1</span><span style="color: #008000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">script</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">body</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">table</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">tr</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">td</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5">级联菜单</span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">td</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">td</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">select&nbsp;name</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">'city'&nbsp;class</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">'amenu'</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">option&nbsp;value</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">''</span><span style="color: #000000; background-color: #f5f5f5">&gt;-</span><span style="color: #000000; background-color: #f5f5f5">市局全部</span><span style="color: #000000; background-color: #f5f5f5">-&lt;/</span><span style="color: #000000; background-color: #f5f5f5">option</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">option&nbsp;value</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">1</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5">a市</span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">option</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">option&nbsp;value</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">2</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5">b市</span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">option</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">option&nbsp;value</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">3</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5">c市</span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">option</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">select</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">td</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">td</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">select&nbsp;name</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">'country'&nbsp;class</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">'amenu'</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">option&nbsp;value</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">''</span><span style="color: #000000; background-color: #f5f5f5">&gt;-</span><span style="color: #000000; background-color: #f5f5f5">县局全部</span><span style="color: #000000; background-color: #f5f5f5">-&lt;/</span><span style="color: #000000; background-color: #f5f5f5">option</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">option&nbsp;value</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">1</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5">test</span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">option</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">select</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">td</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">td</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">select&nbsp;name</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">'taxOffice'&nbsp;class</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">'amenu'</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">option&nbsp;value</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">''</span><span style="color: #000000; background-color: #f5f5f5">&gt;-</span><span style="color: #000000; background-color: #f5f5f5">所全部</span><span style="color: #000000; background-color: #f5f5f5">-&lt;/</span><span style="color: #000000; background-color: #f5f5f5">option</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">option&nbsp;value</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">1</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5">test</span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">option</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">select</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">td</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">td</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">select&nbsp;name</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">'taxOffical'&nbsp;class</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">'amenu'</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">option&nbsp;value</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">''</span><span style="color: #000000; background-color: #f5f5f5">&gt;-</span><span style="color: #000000; background-color: #f5f5f5">职员全部</span><span style="color: #000000; background-color: #f5f5f5">-&lt;/</span><span style="color: #000000; background-color: #f5f5f5">option</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">option&nbsp;value</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">1</span><span style="color: #000000; background-color: #f5f5f5">'</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5">test</span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">option</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">select</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">td</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">tr</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">table</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000; background-color: #f5f5f5">&lt;/</span><span style="color: #000000; background-color: #f5f5f5">body</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span></div>
<br />
对应的js代码：<br />
js代码1：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">本菜单是4级级联菜单，采用jquery框架来实现</span><span style="color: #008000"><br />
<img id="Codehighlighter1_55_1149_Open_Image" onclick="this.style.display='none'; Codehighlighter1_55_1149_Open_Text.style.display='none'; Codehighlighter1_55_1149_Closed_Image.style.display='inline'; Codehighlighter1_55_1149_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_55_1149_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_55_1149_Closed_Text.style.display='none'; Codehighlighter1_55_1149_Open_Image.style.display='inline'; Codehighlighter1_55_1149_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #000000">$(document).ready(</span><span style="color: #0000ff">function</span><span style="color: #000000">()</span><span id="Codehighlighter1_55_1149_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_55_1149_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">为所有class为amenu的元素绑定onchange事件</span><span style="color: #008000"><br />
<img id="Codehighlighter1_120_1145_Open_Image" onclick="this.style.display='none'; Codehighlighter1_120_1145_Open_Text.style.display='none'; Codehighlighter1_120_1145_Closed_Image.style.display='inline'; Codehighlighter1_120_1145_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_120_1145_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_120_1145_Closed_Text.style.display='none'; Codehighlighter1_120_1145_Open_Image.style.display='inline'; Codehighlighter1_120_1145_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;$('.amenu').change(</span><span style="color: #0000ff">function</span><span style="color: #000000">()</span><span id="Codehighlighter1_120_1145_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_120_1145_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">记录本级菜单标志</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;orgLevel&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">下级菜单</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;nextMenu&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;$(</span><span style="color: #0000ff">this</span><span style="color: #000000">).parents().next().children[</span><span style="color: #000000">0</span><span style="color: #000000">];<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">ajax动作提交的对象（后台采用java程序）</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;postUrl&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;'pubOrgAjax.</span><span style="color: #0000ff">do</span><span style="color: #000000">';<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">如果本菜单是最后一级菜单的话则不做任何动作</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(orgLevel</span><span style="color: #000000">==</span><span style="color: #000000">'taxOffical')&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">本级菜单选择为全部选项，则下级菜单也置为全部</span><span style="color: #008000"><br />
<img id="Codehighlighter1_406_527_Open_Image" onclick="this.style.display='none'; Codehighlighter1_406_527_Open_Text.style.display='none'; Codehighlighter1_406_527_Closed_Image.style.display='inline'; Codehighlighter1_406_527_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_406_527_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_406_527_Closed_Text.style.display='none'; Codehighlighter1_406_527_Open_Image.style.display='inline'; Codehighlighter1_406_527_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #0000ff">this</span><span style="color: #000000">.value&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;'')</span><span id="Codehighlighter1_406_527_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_406_527_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;firstOption&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;nextMenu.option[</span><span style="color: #000000">0</span><span style="color: #000000">];<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;nextMenu.length</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;nextMenu.options.add(firstOption);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">ajax动作</span><span style="color: #008000"><br />
<img id="Codehighlighter1_558_594_Open_Image" onclick="this.style.display='none'; Codehighlighter1_558_594_Open_Text.style.display='none'; Codehighlighter1_558_594_Closed_Image.style.display='inline'; Codehighlighter1_558_594_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_558_594_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_558_594_Closed_Text.style.display='none'; Codehighlighter1_558_594_Open_Image.style.display='inline'; Codehighlighter1_558_594_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;$.post(postUrl,</span><span id="Codehighlighter1_558_594_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_558_594_Open_Text"><span style="color: #000000">{orgFlag:orgLevel,orgCode:</span><span style="color: #0000ff">this</span><span style="color: #000000">.value}</span></span><span style="color: #000000">,</span><span style="color: #0000ff">function</span><span style="color: #000000">(xml)</span><span id="Codehighlighter1_609_1137_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_609_1137_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;dicts&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;$('dict',xml);<br />
<img id="Codehighlighter1_664_700_Open_Image" onclick="this.style.display='none'; Codehighlighter1_664_700_Open_Text.style.display='none'; Codehighlighter1_664_700_Closed_Image.style.display='inline'; Codehighlighter1_664_700_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_664_700_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_664_700_Closed_Text.style.display='none'; Codehighlighter1_664_700_Open_Image.style.display='inline'; Codehighlighter1_664_700_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(dicts.length</span><span style="color: #000000">&lt;</span><span style="color: #000000">1</span><span style="color: #000000">)</span><span id="Codehighlighter1_664_700_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_664_700_Open_Text"><span style="color: #000000">{alert('返回数据错误，请重新登陆');</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">清空nextMenu</span><span style="color: #008000"><br />
<img id="Codehighlighter1_758_897_Open_Image" onclick="this.style.display='none'; Codehighlighter1_758_897_Open_Text.style.display='none'; Codehighlighter1_758_897_Closed_Image.style.display='inline'; Codehighlighter1_758_897_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_758_897_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_758_897_Closed_Text.style.display='none'; Codehighlighter1_758_897_Open_Image.style.display='inline'; Codehighlighter1_758_897_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(nextMenu.options[</span><span style="color: #000000">0</span><span style="color: #000000">].value&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;'')</span><span id="Codehighlighter1_758_897_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_758_897_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;firstOption&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;nextMenu.options[</span><span style="color: #000000">0</span><span style="color: #000000">].text;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nextMenu.length&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nextMenu.options.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Option(firstOption,''));<br />
<img id="Codehighlighter1_902_935_Open_Image" onclick="this.style.display='none'; Codehighlighter1_902_935_Open_Text.style.display='none'; Codehighlighter1_902_935_Closed_Image.style.display='inline'; Codehighlighter1_902_935_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_902_935_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_902_935_Closed_Text.style.display='none'; Codehighlighter1_902_935_Open_Image.style.display='inline'; Codehighlighter1_902_935_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #0000ff">else</span><span id="Codehighlighter1_902_935_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_902_935_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nextMenu.length&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">为清空后的nextMenu填充新值</span><span style="color: #008000"><br />
<img id="Codehighlighter1_996_1128_Open_Image" onclick="this.style.display='none'; Codehighlighter1_996_1128_Open_Text.style.display='none'; Codehighlighter1_996_1128_Closed_Image.style.display='inline'; Codehighlighter1_996_1128_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_996_1128_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_996_1128_Closed_Text.style.display='none'; Codehighlighter1_996_1128_Open_Image.style.display='inline'; Codehighlighter1_996_1128_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">dicts.length;i</span><span style="color: #000000">++</span><span style="color: #000000">)</span><span id="Codehighlighter1_996_1128_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_996_1128_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;newOption&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Option($('name',dicts[i]).text(),$('code',dicts[i]).text());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nextMenu.options.add(newOption);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">);</span></div>
<br />
后台返回的数据格式：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;cencodeing="gbk"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ajax-response</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">response</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">dict</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">code</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">code</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">市局1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">dict</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">dict</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">dict</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">response</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ajax-respnse</span><span style="color: #0000ff">&gt;</span></div>
<br />
</span>
<img src ="http://www.blogjava.net/vesung/aggbug/207290.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2008-06-12 09:44 <a href="http://www.blogjava.net/vesung/archive/2008/06/12/207290.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于java递归调用内存泄露</title><link>http://www.blogjava.net/vesung/archive/2008/06/03/205474.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Tue, 03 Jun 2008 01:14:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2008/06/03/205474.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/205474.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2008/06/03/205474.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/205474.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/205474.html</trackback:ping><description><![CDATA[看两段代码：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.ArrayList;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.List;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;<br />
<img id="Codehighlighter1_91_414_Open_Image" onclick="this.style.display='none'; Codehighlighter1_91_414_Open_Text.style.display='none'; Codehighlighter1_91_414_Closed_Image.style.display='inline'; Codehighlighter1_91_414_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_91_414_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_91_414_Closed_Text.style.display='none'; Codehighlighter1_91_414_Open_Image.style.display='inline'; Codehighlighter1_91_414_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TailRecursionTest&nbsp;</span><span id="Codehighlighter1_91_414_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_91_414_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_139_272_Open_Image" onclick="this.style.display='none'; Codehighlighter1_139_272_Open_Text.style.display='none'; Codehighlighter1_139_272_Closed_Image.style.display='inline'; Codehighlighter1_139_272_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_139_272_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_139_272_Closed_Text.style.display='none'; Codehighlighter1_139_272_Open_Image.style.display='inline'; Codehighlighter1_139_272_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_139_272_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_139_272_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TailRecursionTest&nbsp;t&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TailRecursionTest();&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">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;</span><span style="color: #000000">10000</span><span style="color: #000000">;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.a(</span><span style="color: #000000">0</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;<br />
<img id="Codehighlighter1_305_409_Open_Image" onclick="this.style.display='none'; Codehighlighter1_305_409_Open_Text.style.display='none'; Codehighlighter1_305_409_Closed_Image.style.display='inline'; Codehighlighter1_305_409_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_305_409_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_305_409_Closed_Text.style.display='none'; Codehighlighter1_305_409_Open_Image.style.display='inline'; Codehighlighter1_305_409_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;a(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j)&nbsp;</span><span id="Codehighlighter1_305_409_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_305_409_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="color: #000000">++</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">Integer</span><span style="color: #000000">&gt;</span><span style="color: #000000">(</span><span style="color: #000000">100000</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;对list进行处理&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
没啥特殊的，仅仅是为了测试，我们将a方法调用10000次，a方法创建一个有100000个元素的list的局部变量。<br />
第二个程序：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.ArrayList;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.List;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;<br />
<img id="Codehighlighter1_92_471_Open_Image" onclick="this.style.display='none'; Codehighlighter1_92_471_Open_Text.style.display='none'; Codehighlighter1_92_471_Closed_Image.style.display='inline'; Codehighlighter1_92_471_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_92_471_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_92_471_Closed_Text.style.display='none'; Codehighlighter1_92_471_Open_Image.style.display='inline'; Codehighlighter1_92_471_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TailRecursionTest2&nbsp;</span><span id="Codehighlighter1_92_471_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_92_471_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_140_228_Open_Image" onclick="this.style.display='none'; Codehighlighter1_140_228_Open_Text.style.display='none'; Codehighlighter1_140_228_Closed_Image.style.display='inline'; Codehighlighter1_140_228_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_140_228_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_140_228_Closed_Text.style.display='none'; Codehighlighter1_140_228_Open_Image.style.display='inline'; Codehighlighter1_140_228_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_140_228_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_140_228_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TailRecursionTest2&nbsp;t&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TailRecursionTest2();&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.a(</span><span style="color: #000000">0</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;<br />
<img id="Codehighlighter1_261_466_Open_Image" onclick="this.style.display='none'; Codehighlighter1_261_466_Open_Text.style.display='none'; Codehighlighter1_261_466_Closed_Image.style.display='inline'; Codehighlighter1_261_466_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_261_466_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_261_466_Closed_Text.style.display='none'; Codehighlighter1_261_466_Open_Image.style.display='inline'; Codehighlighter1_261_466_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;a(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j)&nbsp;</span><span id="Codehighlighter1_261_466_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_261_466_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(j);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="color: #000000">++</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(j&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">10000</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">Integer</span><span style="color: #000000">&gt;</span><span style="color: #000000">(</span><span style="color: #000000">100000</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;对list进行处理&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<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;a(j);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;&nbsp;</span></div>
<br />
也没啥特殊的，就是将循环换成了递归，a方法做的事情没变。两个都跑一下，程序1顺利结束，程序2出问题了，啥问题？如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">161</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">162</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">163</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">164</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">165</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />Exception&nbsp;in&nbsp;thread&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">main</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;java.lang.OutOfMemoryError:&nbsp;Java&nbsp;heap&nbsp;space&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.util.ArrayList.</span><span style="color: #000000">&lt;</span><span style="color: #000000">init</span><span style="color: #000000">&gt;</span><span style="color: #000000">(Unknown&nbsp;Source)&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;TailRecursionTest2.a(TailRecursionTest2.java:</span><span style="color: #000000">17</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;TailRecursionTest2.a(TailRecursionTest2.java:</span><span style="color: #000000">20</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;TailRecursionTest2.a(TailRecursionTest2.java:</span><span style="color: #000000">20</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;TailRecursionTest2.a(TailRecursionTest2.java:</span><span style="color: #000000">20</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;TailRecursionTest2.a(TailRecursionTest2.java:</span><span style="color: #000000">20</span><span style="color: #000000">)&nbsp;</span></div>
<br />
我倒，才运行166次了，heap就满了。问题在哪呢？oh,yep，你肯定想到了，是不是重复创建list这个大集合引起的呢？它不是局部变量吗？怎么也会溢出？是的，list是局部变量，在a的方法栈里引用着，指向heap上的大对象，更关键的问题在于，java是没有尾递归优化的，递归方法是不会使用同一个栈帧，每一次递归调用，都将压入新的栈帧，并且这个栈帧上又new了一个list变量，引用着heap上新的一个大集合。随着栈深度的增加， jvm里维持着一条长长的方法调用轨迹以便你能回来，在方法没有返回之前，这些list变量一直被各自的栈帧引用着，不能被GC，你说，能不OOM吗？
<p>&nbsp;&nbsp;&nbsp; 也许，你想到了个补救方法来挽救程序2，就是每次在处理完list后，我把它设置为null，不让栈帧继续引用着它，咱编写对gc友好的代码，这不就行了，试试：</p>
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.ArrayList;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.List;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;<br />
<img id="Codehighlighter1_92_503_Open_Image" onclick="this.style.display='none'; Codehighlighter1_92_503_Open_Text.style.display='none'; Codehighlighter1_92_503_Closed_Image.style.display='inline'; Codehighlighter1_92_503_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_92_503_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_92_503_Closed_Text.style.display='none'; Codehighlighter1_92_503_Open_Image.style.display='inline'; Codehighlighter1_92_503_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TailRecursionTest2&nbsp;</span><span id="Codehighlighter1_92_503_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_92_503_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_140_228_Open_Image" onclick="this.style.display='none'; Codehighlighter1_140_228_Open_Text.style.display='none'; Codehighlighter1_140_228_Closed_Image.style.display='inline'; Codehighlighter1_140_228_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_140_228_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_140_228_Closed_Text.style.display='none'; Codehighlighter1_140_228_Open_Image.style.display='inline'; Codehighlighter1_140_228_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_140_228_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_140_228_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TailRecursionTest2&nbsp;t&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TailRecursionTest2();&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.a(</span><span style="color: #000000">0</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;<br />
<img id="Codehighlighter1_261_498_Open_Image" onclick="this.style.display='none'; Codehighlighter1_261_498_Open_Text.style.display='none'; Codehighlighter1_261_498_Closed_Image.style.display='inline'; Codehighlighter1_261_498_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_261_498_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_261_498_Closed_Text.style.display='none'; Codehighlighter1_261_498_Open_Image.style.display='inline'; Codehighlighter1_261_498_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;a(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j)&nbsp;</span><span id="Codehighlighter1_261_498_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_261_498_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(j);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="color: #000000">++</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(j&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">10000</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">Integer</span><span style="color: #000000">&gt;</span><span style="color: #000000">(</span><span style="color: #000000">100000</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;对list进行处理&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<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;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">gc友好&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<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;a(j);&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;</span></div>
<br />
得意洋洋，我跑一下看看，这次跑到4000多次，但是：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">4289</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">4290</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">4291</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">4292</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.lang.StackOverflowError&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.nio.cs.ext.DoubleByteEncoder.encodeArrayLoop(Unknown&nbsp;Source)&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.nio.cs.ext.DoubleByteEncoder.encodeLoop(Unknown&nbsp;Source)&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.nio.charset.CharsetEncoder.encode(Unknown&nbsp;Source)&nbsp;</span></div>
<br />
总结：在java里，递归最好咱还是别用，老老实实地while、for；就算递归了，最好递归方法不要new太大的对象，除非你能确定递归的深度不是那么大，否则OOM和堆栈溢出的阴影将笼罩着你。
<img src ="http://www.blogjava.net/vesung/aggbug/205474.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2008-06-03 09:14 <a href="http://www.blogjava.net/vesung/archive/2008/06/03/205474.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java作用域描述符的区别</title><link>http://www.blogjava.net/vesung/archive/2008/06/02/205246.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Mon, 02 Jun 2008 01:12:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2008/06/02/205246.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/205246.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2008/06/02/205246.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/205246.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/205246.html</trackback:ping><description><![CDATA[先看下面表格：<br />
<br />
<table style="width: 500px; height: 147px" cellspacing="1" cellpadding="1" summary="" border="1">
    <tbody>
        <tr>
            <td>作用域 <br />
            </td>
            <td>当前类</td>
            <td>同一package</td>
            <td>子孙类 <br />
            </td>
            <td>其他package </td>
        </tr>
        <tr>
            <td>public</td>
            <td>&#8730;&nbsp;&nbsp;&nbsp; <br />
            </td>
            <td>&#8730;&nbsp;&nbsp;&nbsp; <br />
            </td>
            <td>&#8730;&nbsp;&nbsp;&nbsp; <br />
            </td>
            <td>&#8730;&nbsp;&nbsp;&nbsp; <br />
            </td>
        </tr>
        <tr>
            <td>protected <br />
            </td>
            <td>&#8730;&nbsp;&nbsp;&nbsp; <br />
            </td>
            <td>&#8730;&nbsp;&nbsp;&nbsp; <br />
            </td>
            <td>&#8730;&nbsp;&nbsp;&nbsp; <br />
            </td>
            <td>&nbsp; &#215;&nbsp; <br />
            </td>
        </tr>
        <tr>
            <td>default</td>
            <td>&#8730;&nbsp;&nbsp;&nbsp; <br />
            </td>
            <td>&#8730;&nbsp;&nbsp;&nbsp; <br />
            </td>
            <td>&nbsp; &#215;&nbsp; <br />
            </td>
            <td>&nbsp; &#215;&nbsp; </td>
        </tr>
        <tr>
            <td>private </td>
            <td>&#8730;&nbsp;&nbsp;&nbsp; <br />
            </td>
            <td>&nbsp; &#215;&nbsp; <br />
            </td>
            <td>&nbsp; &#215;&nbsp; <br />
            </td>
            <td>&nbsp; &#215;&nbsp; <br />
            </td>
        </tr>
    </tbody>
</table>
<br />
不写时默认为default<br />
<br />
我们先看类：<br />
<br />
public class&nbsp; Test 可以在任何地方访问，无论是否为当前package<br />
class Test 只允许当前的package使用，不允许其它package使用<br />
class 不与许prirvate和protected ，所以不讨论了<br />
<br />
我们再看方法<br />
private 的只允许类自己使用，子类都不可见。但允许inner类调用，因为inner类属于他自己。<br />
<br />
class Test 里面的方法<br />
&nbsp; public 和default和protected 方法，允许同包的访问，因为类是default的，所以方法不可能大于它<br />
<br />
public class Test 里面的方法<br />
&nbsp; private 只允许自己内部访问<br />
&nbsp;default 只允许同包的访问<br />
&nbsp; protected 只允许同包和子类访问<br />
&nbsp; public 可以任意访问<br />
<img src ="http://www.blogjava.net/vesung/aggbug/205246.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2008-06-02 09:12 <a href="http://www.blogjava.net/vesung/archive/2008/06/02/205246.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java序列化的控制  </title><link>http://www.blogjava.net/vesung/archive/2008/05/28/203447.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Wed, 28 May 2008 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2008/05/28/203447.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/203447.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2008/05/28/203447.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/203447.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/203447.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;默认的序列化机制并不难操纵。然而，假若有特殊要求又该怎么办呢？我们可能有特殊的安全问题，不希望对象的某一部分序列化；或者某一个子对象完全不必序列化，因为对象恢复以后，那一部分需要重新创建。此时，通过实现Externalizable接口，用它代替Serializable接口，便可控制序列化的具体过程。这个Externalizable接口扩展了Serializable，并增添了两个...&nbsp;&nbsp;<a href='http://www.blogjava.net/vesung/archive/2008/05/28/203447.html'>阅读全文</a><img src ="http://www.blogjava.net/vesung/aggbug/203447.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2008-05-28 12:00 <a href="http://www.blogjava.net/vesung/archive/2008/05/28/203447.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转摘：Tomcat中配置和使用JNDI </title><link>http://www.blogjava.net/vesung/archive/2008/04/25/195793.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Fri, 25 Apr 2008 01:02:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2008/04/25/195793.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/195793.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2008/04/25/195793.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/195793.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/195793.html</trackback:ping><description><![CDATA[<p>JNDI是J2EE中一个很重要的标准，通常我们是在EJB编程中用到，&nbsp; <br />
Tomcat4.0中提供了在JSP和Servelt中直接使用JNDI的方法，下面谈一下在Tomcat4.0中配置和使用JNDI的方法&nbsp; <br />
(以通过JNDI连接数据库为例)&nbsp; <br />
假设使用的数据库是mysql,实验例子在TOMCAT_HOME/webapps/DBTest目录中&nbsp; </p>
<p>A.将mysql的JDBC连接库mm.mysql-2.0.9-bin.jar放入TOMCAT_HOME/common/lib中&nbsp; </p>
<p>B.配置TOMCAT_HOME/conf/serer.xml文件在&lt;Service&gt;;段中加入一个Context:&nbsp; <br />
&lt;Context path="/DBTest" docBase="DBTest"&nbsp; <br />
debug="5" reloadable="true" crossContext="true"&gt;&nbsp; <br />
&lt;/Context&gt;&nbsp; <br />
这是DBTest的根路径，这是为了在DBTest中使用做准备.&nbsp; </p>
<p>C.在上面加入的&lt;Context&gt;;段加入&nbsp; <br />
&lt;Resource name="jdbc/TestDB"&nbsp; <br />
auth="Container"&nbsp; <br />
type="javax.sql.DataSource"/&gt;&nbsp; </p>
<p>&lt;ResourceParams name="jdbc/TestDB"&gt; <br />
&lt;parameter&gt;&nbsp; <br />
&lt;name&gt;;factory&lt;/name&gt;&nbsp; <br />
&lt;value&gt;;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;&nbsp; <br />
&lt;/parameter&gt;&nbsp; </p>
<p>&lt;!-- Maximum number of dB connections in pool. Make sure you&nbsp; <br />
configure your mysqld max_connections large enough to handle&nbsp; <br />
all of your db connections. Set to 0 for no limit.&nbsp; <br />
--&gt;&nbsp; <br />
&lt;parameter&gt;<br />
&lt;name&gt;;maxActive&lt;/name&gt;<br />
&lt;value&gt;;100&lt;/value&gt;<br />
&lt;/parameter&gt;</p>
<p>&lt;!-- Maximum number of idle dB connections to retain in pool.&nbsp; <br />
Set to 0 for no limit.&nbsp; <br />
--&gt;<br />
&lt;parameter&gt;&nbsp; <br />
&lt;name&gt;;maxIdle&lt;/name&gt;&nbsp; <br />
&lt;value&gt;;30&lt;/value&gt;&nbsp; <br />
&lt;/parameter&gt;&nbsp; </p>
<p>&lt;!-- Maximum time to wait for a dB connection to become available&nbsp; <br />
in ms, in this example 10 seconds. An Exception is thrown if&nbsp; <br />
this timeout is exceeded. Set to -1 to wait indefinitely.&nbsp; <br />
--&gt;&nbsp; <br />
&lt;parameter&gt;&nbsp; <br />
&lt;name&gt;;maxWait&lt;/name&gt;&nbsp; <br />
&lt;value&gt;;10000&lt;/value&gt;&nbsp; <br />
&lt;/parameter&gt;&nbsp; </p>
<p>&lt;!-- MySQL dB username and password for dB connections --&gt;&nbsp; <br />
&lt;parameter&gt;&nbsp; <br />
&lt;name&gt;;username&lt;/name&gt;;&nbsp; <br />
&lt;value&gt;;test&lt;/value&gt;&nbsp; <br />
&lt;/parameter&gt;&nbsp; <br />
&lt;parameter&gt;&nbsp; <br />
&lt;name&gt;;password&lt;/name&gt;&nbsp; <br />
&lt;value&gt;;test&lt;/value&gt;&nbsp; <br />
&lt;/parameter&gt;&nbsp; </p>
<p>&lt;!-- Class name for mm.mysql JDBC driver --&gt;;&nbsp; <br />
&lt;parameter&gt;;&nbsp; <br />
&lt;name&gt;;driverClassName&lt;/name&gt;;&nbsp; <br />
&lt;value&gt;;org.gjt.mm.mysql.Driver&lt;/value&gt;&nbsp; <br />
&lt;/parameter&gt;&nbsp; </p>
<p>&lt;!-- The JDBC connection url for connecting to your MySQL dB.--&gt;&nbsp; <br />
&lt;parameter&gt;&nbsp; <br />
&lt;name&gt;;url&lt;/name&gt;&nbsp; <br />
&lt;value&gt;;jdbc:mysql://localhost:3306/test&lt;/value&gt;&nbsp; <br />
&lt;/parameter&gt;&nbsp; <br />
&lt;/ResourceParams&gt;&nbsp; </p>
<p>这里每一个小段都有英文注解，是Tomcat提供的，我们可以将按照Sample加入,主要修改的是driverClassName,&nbsp; <br />
url,和用户帐号;需要强调的是"jdbc/TestDB"就是JDNI要查找的Name. </p>
<p>在web.xml中加入&nbsp; <br />
&lt;resource-ref&gt;&nbsp; <br />
&lt;description&gt;;DB Connection&lt;/description&gt;&nbsp; <br />
&lt;res-ref-name&gt;;jdbc/TestDB&lt;/res-ref-name&gt;&nbsp; <br />
&lt;res-type&gt;;javax.sql.DataSource&lt;/res-type&gt;&nbsp; <br />
&lt;res-auth&gt;;Container&lt;/res-auth&gt;&nbsp; <br />
&lt;/resource-ref&gt;&nbsp; <br />
这里的jdbc/TestDb要和C中Resource段的name匹配&nbsp; <br />
</p>
<img src ="http://www.blogjava.net/vesung/aggbug/195793.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2008-04-25 09:02 <a href="http://www.blogjava.net/vesung/archive/2008/04/25/195793.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DataSource接口，Connection pooling（连接池），分布式事务，RowSet介绍</title><link>http://www.blogjava.net/vesung/archive/2008/04/21/194425.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Mon, 21 Apr 2008 00:58:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2008/04/21/194425.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/194425.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2008/04/21/194425.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/194425.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/194425.html</trackback:ping><description><![CDATA[<strong>一、DataSource接口是一个更好的连接数据源的方法：</strong> <br />
　　JDBC1.0是原来是用DriverManager类来产生一个对数据源的连接。JDBC2.0用一种替代的方法，使用DataSource的实现，代码变的更小巧精致，也更容易控制。 <br />
　　一个DataSource对象代表了一个真正的数据源。根据DataSource的实现方法，数据源既可以是从关系数据库，也电子表格，还可以是一个表格形式的文件。当一个DataSource对象注册到名字服务中，应用程序就可以通过名字服务获得DataSource对象，并用它来产生一个与DataSource代表的数据源之间的连接。 <br />
　　关于数据源的信息和如何来定位数据源，例如数据库服务器的名字，在哪台机器上，端口号等等，都包含在DataSource对象的属性里面去了。这样，对应用程序的设计来说是更方便了，因为并不需要硬性的把驱动的名字写死到程序里面去。通常驱动名字中都包含了驱动提供商的名字，而在DriverManager类中通常是这么做的。如果数据源要移植到另一个数据库驱动中，代码也很容易做修改。所需要做的修改只是更改DataSource的相关的属性。而使用DataSource对象的代码不需要做任何改动。 <br />
　　由系统管理员或者有相应权限的人来配置DataSource对象。配置DataSource，包括设定DataSource的属性，然后将它注册到JNDI名字服务中去。在注册DataSource对象的的过程中，系统管理员需要把DataSource对象和一个逻辑名字关联起来。名字可以是任意的，通常取成能代表数据源并且容易记住的名字。在下面的例子中，名字起为：InventoryDB，按照惯例，逻辑名字通常都在jdbc的子上下文中。这样，逻辑名字的全名就是：jdbc/&nbsp;InventoryDB。 <br />
　　一旦配置好了数据源对象，应用程序设计者就可以用它来产生一个与数据源的连接。下面的代码片段示例了如何用JNDI上下文获得一个一个数据源对象，然后如何用数据源对象产生一个与数据源的连接。开始的两行用的是JNDI&nbsp;API，第三行用的才是JDBC的API： <br />
　　&nbsp;Context&nbsp;ctx&nbsp;=&nbsp;new&nbsp;InitialContext();&nbsp;DataSource&nbsp;ds&nbsp;=&nbsp;(DataSource)ctx.lookup("jdbc/InventoryDB");Connection&nbsp;con&nbsp;=&nbsp;ds.getConnection("myPassword",&nbsp;"myUserName"); <br />
　　在一个基本的DataSource实现中，DataSource.getConnection方法返回的Connection对象和用DriverManager.getConnection方法返回的Connection对象是一样的。因为DataSource提供的方便性，我们推荐使用DataSource对象来得到一个Connection对象。我们希望所以的基于JDBC2.0技术的数据库驱动都包含一个基本的DataSource的实现，这样就可以在应用程序中很容易的使用它。 <br />
　　对于普通的应用程序设计者，是否使用DataSource对象只是一个选择问题。但是，对于那些需要用的连接池或者分布式的事务的应用程序设计者来说，就必须使用DataSource对象来获得Connection，原因在下面我们会提到。 <br />
<strong>&nbsp;&nbsp;&nbsp;二、Connection&nbsp;pooling（连接池）：</strong> <br />
　　连接池是这么一种机制，当应用程序关闭一个Connection的时候，这个连接被回收，而不是被destroy，因为建立一个连接是一个很费资源的操作。如果能把回收的连接重新利用，会减少新创建连接的数目，显著的提高运行的性能。 <br />
　　假设应用程序需要建立到一个名字为EmpolyeeDB的DataSource的连接。使用连接池得到连接的代码如下： <br />
　　&nbsp;Context&nbsp;ctx&nbsp;=&nbsp;new&nbsp;InitialContext();&nbsp;DataSource&nbsp;ds&nbsp;=&nbsp;(DataSource)ctx.lookup("jdbc/EmployeeDB");Connection&nbsp;con&nbsp;=&nbsp;ds.getConnection("myPassword",&nbsp;"myUserName");除了逻辑名字以外，我们发现其代码和上面举的例子的代码是一样的。逻辑名字不同，就可以连接到不同的数据库。DataSource对象的getConnection方法返回的Connection是否是一个连接池中的连接完全取决于DataSource对象的实现方法。如果DataSource对象实现与一个支持连接池的中间层的服务器一起工作，DataSource对象就会自动的返回连接池中的连接，这个连接也是可以重复利用的。 <br />
　　是否使用连接池获得一个连接，在应用程序的代码上是看不出不同的。在使用这个Connection连接上也没有什么不一样的地方，唯一的不同是在java的finally语句块中来关闭一个连接。在finally中关闭连接是一个好的编程习惯。这样，即使方法抛出异常，Connection也会被关闭并回收到连接池中去。代码应该如下所示： <br />
　　try{&#8230; <br />
　　}catch（）{&#8230; <br />
　　}finally{&nbsp;if（con!=null）con.close();} <br />
<strong>　　三、分布式事务：</strong> <br />
　　获得一个用来支持分布式事务的连接与获得连接池中的连接是很相似的。同样，不同之处在于DataSource的实现上的不同，而不是在应用程序中获得连接的方式上有什么不同。假设DataSource的实现可以与支持分布式事务中间层服务器一起工作，得到连接的代码还是如下所示： <br />
　　&nbsp;Context&nbsp;ctx&nbsp;=&nbsp;new&nbsp;InitialContext();&nbsp;DataSource&nbsp;ds&nbsp;=&nbsp;(DataSource)ctx.lookup("jdbc/EmployeeDB");&nbsp;Connection&nbsp;con&nbsp;=&nbsp;ds.getConnection("myPassword",&nbsp;"myUserName");由于性能上的原因，如果一个DataSource能够支持分布式的事务，它同样也可以支持连接池管理。 <br />
　　从应用程序设计者的观点来看。是否支持分布式的事务的连接对它来说没什么不同，唯一的不同是在事务的边界上（开始一个事务的地方和结束一个事务的地方），开始一个事务或者结束一个事务都是由事务服务器来控制的。应用程序不应该做任何可能妨碍服务的事情。应用程序不能够直接调用事务提交commit或者回滚rollback操作，也不能够使用事务的自动提交模式auto-commit&nbsp;mode（在数据库操作完成的时候自动的调用commit或者rollback）。&nbsp; <br />
&nbsp; <br />
在一个连接参与了分布式事务的时候，下面的代码是你不能做的（con表示支持分布式事务的连接Connection）。 <br />
　　con.commit();或者con.rollback();或者con.setAutoCommit(true);对于通常的Connection来说，缺省的是auto-commit模式。而对于支持分布式事务的Connection来说，缺省不是auto-commit模式。注意，即使Connection是支持事务的，它也可以用于没有事务的情况。关于事务边界的限制只是是对分布式事务的情况下才成立的。 <br />
　　配置支持连接池的DataSource的时候，涉及到配置ConnectionPoolDataSource对象，这个对象是三层体系结构中的中间层来管理连接池的。同样的，在配置支持分布式事务的时候，需要配置XADataSource，XADataSource是中间层用来管理分布式事物的对象。ConnectionPoolDataSource和XADataSource是由驱动提供商提供的，对应用程序的设计者来说是透明的。和基本的DataSource一样，系统管理员来配置ConnectionPoolDataSource和XADataSource对象。 <br />
<strong>　　四、结果集（RowSet接口）： <br />
</strong>　　结果集对象是一行行数据的容器。根据其目的，可以通过多种方法实现。RowSet及其相关的接口与JDBC2.0的标准扩展API有点不同，他们并不是驱动的一部分，RowSet是在驱动的上层实现的，可以由其它的任何人来实现他们。 <br />
　　任何类型的rowset都实现了RowSet接口，RowSet接口扩展了ResultSet接口。这样RowSet对象就有了ResultSet对象所有的功能。能够通过getXXX方法得到数据库中的某列值，通过updateXXX方法可以修改某列值，可以移动光标，是当前行变为另一行。 <br />
　　当然，我们更感兴趣的是RowSet接口提供的新的功能。作为一个JavaBean组件，RowSet对象可以增加或者删除一个listener（监听者），可以get或者set其属性值，这些属性中，有一个是字符串，表示一个对数据库Query请求，RowSet接口定义了设定参数的方法，也提供了执行这个请求的方法。这意味着RowSet对象能够执行查询请求，可以根据它产生的结果集进行计算。同样，RowSet也可以根据任何表格数据源进行计算，所以，它不局限于关系数据库。 <br />
　　从数据源得到数据之后，RowSet对象可以和数据源断开连接，rowset也可以被序列化。这样，RowSet就可以通过网络传递给瘦客户端。 <br />
　　RowSet可以被重新连接到数据源，这样，做的修改就可以存回到数据源中去。如果产生了一个listener，当RowSet的当前行移动，或者数据被修改的时候，监听者就会收到通知。例如，图形用户界面组件可以注册成为监听者，当RowSet更改的时候，图形用户界面接到通知，就可以修改界面，来符合它所表示的RowSet。 <br />
　　根据不同的需要，RowSet接口可以通过多种方法来实现。Java&nbsp;software已经写了一个CachedRowSet实现，从http://developer.java.sun.com/developer/earlyAccess/crs/index.html中可以得到这个实现。 <br />
　　与CachedRowSet类不样的是，JDBCRowSet类总是保持一个和数据源的连接。这样，在ResultSet外围简单到加了一层，是基于JDBC技术的驱动看起来象是一个简单的JavaBean组件一样。 <br />
<br />
　　总结：JDBC2.0标准扩展API通过见DataSource注册到JNDI名字服务上，将JDBC技术扩展为一个全新的概念。使应用程序的代码更加精巧，易于控制。新的API支持了连接池，支持分布式的事务。最后，还使java应用程序可以在网络上传播结果集，是不可以滚动的ResultSet变成了可以滚动的RowSet。<br />
<img src ="http://www.blogjava.net/vesung/aggbug/194425.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2008-04-21 08:58 <a href="http://www.blogjava.net/vesung/archive/2008/04/21/194425.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC 2.0概述</title><link>http://www.blogjava.net/vesung/archive/2008/04/10/191807.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Thu, 10 Apr 2008 03:29:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2008/04/10/191807.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/191807.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2008/04/10/191807.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/191807.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/191807.html</trackback:ping><description><![CDATA[JDBC&nbsp;2.0&nbsp;API被划分为两部分：JDBC&nbsp;2.0核心API和JDBC&nbsp;2.0标准扩展API。核心API在java.sql里面。这是原来的版本就实现了的基本的功能。标准扩展API在javax.sql里面。由JDBC2.0规范新规定的一些接口在这里面。当然，JDBC2.0也对原来版本的java.sql核心做了一些改动。不过不是很大。原来JDBC1.0的程序可以不加修改的在JDBC2.0上运行。这是Java的一贯的良好的作风。最新的JDBC包可以从sun公司的网站上下载。&nbsp; <br />
　　JDBC2.0的扩展API增加了一些数据访问和数据源访问的重大的功能。这中间有一些是主要用来做企业计算的。用JDBC2.0的新的扩展包，JDBC提供了一个从JAVA2平台的通用的数据访问的方法。 <br />
　　首先，我们来看看JDBC标准扩展的API怎样来和JDBC2.0结合在一起的。JDBC2.0包括两个包： <br />
　　1、&nbsp;java.sql包，个包里面是JDBC2.0的核心API。它包括了原来的JDBC&nbsp;API（JDBC&nbsp;1.0版本），再加上一些新的2.0版本的API。这个包在Java&nbsp;2&nbsp;Platform&nbsp;SDK里面有。 <br />
　　2、&nbsp;javax.sql包，这里面是JDBC2.0的标准扩展API。这个包是一个全新的，在Java&nbsp;2&nbsp;Platform&nbsp;SDK,&nbsp;Enterprise&nbsp;Edition里面单独提供。 <br />
　　JDBC2.0的核心API包括了JDBC1.0的API，并在此基础上增加了一些功能，对某些性能做了增强。使java语言在数据库计算的前端提供了统一的数据访问方法，效率也得到了提高。 <br />
　　JDBC是向后兼容的，JDBC1.0的程序可以不加修改的运行在JDBC2.0上。但是，假如程序中用到了JDBC2.0的新特性，就必须要运行在JDBC2.0版本上。 <br />
　　概括的来说，JDBC核心API的新特性在两个方面做了工作。一个是支持一些新的功能，另一个就是支持SQL3的数据类型。 <br />
　　1、&nbsp;在支持新功能方面：包括结果集可以向后滚动，批量的更新数据。另外，还提供了UNICODE字符集的字符流操作。 <br />
　　2、&nbsp;在支持SQL3的数据类型方面：包括新的SQL3数据类型，增加了对持久性对象的存贮。 <br />
　　为了对数据的存取，操作更加方便，JDBC的新特性是应用程序的设计更容易了。例如：数据块的操作能够显著的提高数据库访问的性能。新增加的BLOB,&nbsp;CLOB,和数组接口能够是应用程序操作大块的数据类型，而不必客户端在存贮之前进行其它的处理。这样，就显著的提高了内存的使用效率。 <br />
&nbsp;&nbsp;&nbsp;下面我们来介绍JDBC2.0的标准扩展API。标准扩展API分为如下几个方面： <br />
　　1、&nbsp;DataSource接口：和Java名字目录服务（JNDI）一起工作的数据源接口。它提供了对数&nbsp;吹囊恢指玫牧臃椒ā?br&gt;;　　2、&nbsp;Connection&nbsp;pooling（连接池）：可以重复使用连接，而不是对每个请求都使用一个新的连接。 <br />
　　3、&nbsp;Distrubute&nbsp;transaction（分布式的事务）：在一个事务中涉及到了多个数据库服务器。 <br />
　　4、&nbsp;Rowsets：JavaBean组件包含了结果集，主要用来将数据传给瘦客户，或者提供一个可以滚动的结果集。 <br />
<img src ="http://www.blogjava.net/vesung/aggbug/191807.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2008-04-10 11:29 <a href="http://www.blogjava.net/vesung/archive/2008/04/10/191807.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts工作流程</title><link>http://www.blogjava.net/vesung/archive/2008/03/11/185293.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Tue, 11 Mar 2008 03:22:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2008/03/11/185293.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/185293.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2008/03/11/185293.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/185293.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/185293.html</trackback:ping><description><![CDATA[<p align="left">struts响应用户请求的工作流程：<br />
<br />
</p>
<p align="center">
<table cellspacing="2" cellpadding="2" width="500" border="0">
    <tbody>
        <tr>
            <td>
            <div style="border-right: #666666 1px solid; border-top: #666666 1px solid; border-left: #666666 1px solid; border-bottom: #666666 1px solid" align="center">Request</div>
            <p align="center">|<br />
            V<br />
            </p>
            <div style="border-right: #666666 1px solid; border-top: #666666 1px solid; border-left: #666666 1px solid; border-bottom: #666666 1px solid" align="center">ActionServlet</div>
            <p align="center">|<br />
            V&nbsp;</p>
            <div style="border-right: #666666 1px solid; border-top: #666666 1px solid; border-left: #666666 1px solid; border-bottom: #666666 1px solid" align="center">如果不存在相应的Action则否则返回error，流程结束</div>
            <p align="center">|<br />
            V<br />
            </p>
            <div style="border-right: #666666 1px solid; border-top: #666666 1px solid; border-left: #666666 1px solid; border-bottom: #666666 1px solid" align="center">创建ActionForm</div>
            <p align="center">|<br />
            V&nbsp;</p>
            <div style="border-right: #666666 1px solid; border-top: #666666 1px solid; border-left: #666666 1px solid; border-bottom: #666666 1px solid" align="center">进行validatge校验，如果没有通过校验则返回error</div>
            <p align="center">|&nbsp; <br />
            V&nbsp;</p>
            <div style="border-right: #666666 1px solid; border-top: #666666 1px solid; border-left: #666666 1px solid; border-bottom: #666666 1px solid" align="center">创建Action</div>
            <p align="center">|<br />
            V<br />
            </p>
            <div style="border-right: #666666 1px solid; border-top: #666666 1px solid; border-left: #666666 1px solid; border-bottom: #666666 1px solid" align="center">执行Action的execute方法，并返回ActionForword对象</div>
            <p align="center">|<br />
            V</p>
            <div style="border-right: #666666 1px solid; border-top: #666666 1px solid; border-left: #666666 1px solid; border-bottom: #666666 1px solid" align="center">return respose<br />
            结束<br />
            </div>
            <p align="center">&nbsp;</p>
            <p>&nbsp;</p>
            </td>
        </tr>
    </tbody>
</table>
</p><img src ="http://www.blogjava.net/vesung/aggbug/185293.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2008-03-11 11:22 <a href="http://www.blogjava.net/vesung/archive/2008/03/11/185293.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java虚拟机常用参数详解</title><link>http://www.blogjava.net/vesung/archive/2008/03/05/184041.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Wed, 05 Mar 2008 08:39:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2008/03/05/184041.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/184041.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2008/03/05/184041.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/184041.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/184041.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: -Xms<size><br><br>设置虚拟机可用内存堆的初始大小，缺省单位为字节，该大小为1024的整数倍并且要大于1MB，可用k(K)或m(M)为单位来设置较大的内存数。初始堆大小为2MB。<br>例如：-Xms6400K，-Xms256M<br><br>-Xmx<size><br>设置虚拟机内存堆的最大可用大小，缺省单位为字节。该值必须为1024整数倍，并且要大于2MB。可用k(K)或m(M)为单位来设置较大的内存数。缺省堆最大值为64MB。<br>例如：-Xmx81920K，-Xmx80M<br><br>当应用程序申请了大内存运行时虚拟机抛<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/vesung/archive/2008/03/05/184041.html'>阅读全文</a><img src ="http://www.blogjava.net/vesung/aggbug/184041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2008-03-05 16:39 <a href="http://www.blogjava.net/vesung/archive/2008/03/05/184041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>轻松搭建resin开发平台--Resin配置详解</title><link>http://www.blogjava.net/vesung/archive/2008/03/05/184028.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Wed, 05 Mar 2008 08:12:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2008/03/05/184028.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/184028.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2008/03/05/184028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/184028.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/184028.html</trackback:ping><description><![CDATA[Caucho Resin提供了最快的jsp/servlets运行平台。它支持Servlet,XSL Filtering6并且具备XSLT和XPath1.0引擎。为方便开发人员能更方便的搭建一个易用的开发平台，将Resin的配置案例如下：<br />
<br />
本文resin采用版本为：<small>Resin 2.1.13</small><br />
本文所有代码均已测试通过<br />
<br />
我的工程目录结构如下：<br />
<br />
/(root)<br />
&nbsp;&nbsp; &nbsp;|--resin(resin根目录)<br />
&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--bin<br />
&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--conf<br />
&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--resin.conf（resin配置文件 今天的主角）<br />
&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |--lib<br />
&nbsp;&nbsp;&nbsp; |--src<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--java（用于放置java源文件）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--test（测试文件目录）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--webapp（web应用的根目录，将来doc-dir会指向这里）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|---WEB-INF<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|------classes<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|------lib<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|------web.xml（web配置文件）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|------applicationContext.xml（其他配置文件）<br />
<br />
<hr />
<br />
以下是resin.conf文件源码<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">caucho</span><span style="color: #ff0000">.com</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">log&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">='/logs'&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">='stderr:'&nbsp;</span><span style="color: #ff0000">timestamp</span><span style="color: #0000ff">='[%Y-%m-%d&nbsp;</span><span style="color: #ff0000">%H:%M:%S.%s]'</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">http-server&nbsp;</span><span style="color: #ff0000">error-log</span><span style="color: #0000ff">="logs/errors.log"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">doc-dir</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">../src/webapp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">doc-dir</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;the&nbsp;http&nbsp;port&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">http&nbsp;</span><span style="color: #ff0000">port</span><span style="color: #0000ff">='82'/&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #ff0000">&lt;host&nbsp;id</span><span style="color: #0000ff">=''&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">&lt;web-app&nbsp;id</span><span style="color: #0000ff">='/'&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">&lt;work-dir</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">../../build/work</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">work-dir</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">temp-dir</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">../../build/tmp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">temp-dir</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">cache-mapping&nbsp;</span><span style="color: #ff0000">url-pattern</span><span style="color: #0000ff">="/*"</span><span style="color: #ff0000">&nbsp;expires</span><span style="color: #0000ff">="2"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">class-update-interval</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;100000000<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">class-update-interval</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">jsp&nbsp;</span><span style="color: #ff0000">jsp-update-interval</span><span style="color: #0000ff">="1s"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">classpath&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">='WEB-INF/classes'/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">&lt;/web-app</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">host</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">http-server</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">caucho.com</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
web.xml源代码<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="ISO-8859-1"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;web-app&nbsp;PUBLIC&nbsp;"-//Sun&nbsp;Microsystems,&nbsp;Inc.//DTD&nbsp;Web&nbsp;Application&nbsp;2.3//EN"&nbsp;"http://java.sun.com/dtd/web-app_2_3.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">web-app</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">display-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Acme&nbsp;Corp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">display-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">webwork</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.opensymphony.webwork.dispatcher.FilterDispatcher</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">webwork</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/*</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.springframework.web.context.ContextLoaderListener</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">welcome-file-list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">welcome-file</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">index.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">welcome-file</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">welcome-file</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">default.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">welcome-file</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">welcome-file</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">index.html</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">welcome-file</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">welcome-file-list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;typically&nbsp;isn't&nbsp;required,&nbsp;as&nbsp;the&nbsp;taglib&nbsp;is&nbsp;included&nbsp;in&nbsp;webwork.jar.<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;you&nbsp;really&nbsp;need&nbsp;a&nbsp;taglib&nbsp;configuration&nbsp;within&nbsp;web.xml,&nbsp;copy&nbsp;webwork/src/java/META-INF/taglib.tld<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;to&nbsp;the&nbsp;WEB-INF&nbsp;directory&nbsp;as&nbsp;webwork.tld.<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">taglib&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib-uri&gt;webwork&lt;/taglib-uri&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib-location&gt;/WEB-INF/webwork.tld&lt;/taglib-location&gt;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/taglib</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">web-app</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
<img src ="http://www.blogjava.net/vesung/aggbug/184028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2008-03-05 16:12 <a href="http://www.blogjava.net/vesung/archive/2008/03/05/184028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单例模式</title><link>http://www.blogjava.net/vesung/archive/2008/02/29/182985.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Fri, 29 Feb 2008 08:52:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2008/02/29/182985.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/182985.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2008/02/29/182985.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/182985.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/182985.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;需求：一方面要求某类只能存在单一的对象实例（从概念上来说，就是一组静态方法和字段），另一方面又要求该实例的使用与普通对象一样，单例模式就是这两个要求之间的平衡。<br />
&nbsp;&nbsp;&nbsp;&nbsp;单例模式通过使用私有构造函数保证了一个类只能存在一个实例，类中的某个静态方法用于返回类的唯一实例。以下的Widget类就是一个单例：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_19_219_Open_Image" onclick="this.style.display='none'; Codehighlighter1_19_219_Open_Text.style.display='none'; Codehighlighter1_19_219_Closed_Image.style.display='inline'; Codehighlighter1_19_219_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_19_219_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_19_219_Closed_Text.style.display='none'; Codehighlighter1_19_219_Open_Image.style.display='inline'; Codehighlighter1_19_219_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Widget</span><span id="Codehighlighter1_19_219_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_19_219_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  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;Widget&nbsp;instance&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Widget();<br />
<img id="Codehighlighter1_110_140_Open_Image" onclick="this.style.display='none'; Codehighlighter1_110_140_Open_Text.style.display='none'; Codehighlighter1_110_140_Closed_Image.style.display='inline'; Codehighlighter1_110_140_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_110_140_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_110_140_Closed_Text.style.display='none'; Codehighlighter1_110_140_Open_Image.style.display='inline'; Codehighlighter1_110_140_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Widget&nbsp;getInstance()</span><span id="Codehighlighter1_110_140_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_110_140_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;instance;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_162_163_Open_Image" onclick="this.style.display='none'; Codehighlighter1_162_163_Open_Text.style.display='none'; Codehighlighter1_162_163_Closed_Image.style.display='inline'; Codehighlighter1_162_163_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_162_163_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_162_163_Closed_Text.style.display='none'; Codehighlighter1_162_163_Open_Image.style.display='inline'; Codehighlighter1_162_163_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Widget()</span><span id="Codehighlighter1_162_163_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_162_163_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_193_217_Open_Image" onclick="this.style.display='none'; Codehighlighter1_193_217_Open_Text.style.display='none'; Codehighlighter1_193_217_Closed_Image.style.display='inline'; Codehighlighter1_193_217_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_193_217_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_193_217_Closed_Text.style.display='none'; Codehighlighter1_193_217_Open_Image.style.display='inline'; Codehighlighter1_193_217_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;doSomething()</span><span id="Codehighlighter1_193_217_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_193_217_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
&nbsp; Widget的构造函数是私有的，这以为着只有静态方法getInstance（）能够创建Widget对象。由于instance字段是静态的，所以它被定义为唯一的实例。第一次调用getInstance（）方法创建一个新的Widget对象实例，而后续所有的调用都将会返回这唯一的对象实例。<br />
&nbsp; 单例模式可以去掉不必要的对象创建过程。
 <img src ="http://www.blogjava.net/vesung/aggbug/182985.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2008-02-29 16:52 <a href="http://www.blogjava.net/vesung/archive/2008/02/29/182985.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个不错的log4j.properties例子</title><link>http://www.blogjava.net/vesung/archive/2008/01/22/177059.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Tue, 22 Jan 2008 07:28:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2008/01/22/177059.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/177059.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2008/01/22/177059.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/177059.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/177059.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #008000">#</span><span style="color: #008000">&nbsp;Set&nbsp;root&nbsp;logger&nbsp;level&nbsp;to&nbsp;WARN&nbsp;and&nbsp;append&nbsp;to&nbsp;stdout</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">log4j</span><span style="color: #000000">.</span><span style="color: #000000">rootLogger</span><span style="color: #000000">=</span><span style="color: #0000ff">WARN</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;stdout</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;error<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">#</span><span style="color: #008000">WARN为log输出级别，stdout，error为该log的别名，下面将用到</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">stdout</span><span style="color: #000000">=</span><span style="color: #000000">org</span><span style="color: #000000">.</span><span style="color: #000000">apache</span><span style="color: #000000">.</span><span style="color: #000000">log4j</span><span style="color: #000000">.</span><span style="color: #000000">ConsoleAppender<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">stdout</span><span style="color: #000000">.</span><span style="color: #000000">layout</span><span style="color: #000000">=</span><span style="color: #000000">org</span><span style="color: #000000">.</span><span style="color: #000000">apache</span><span style="color: #000000">.</span><span style="color: #000000">log4j</span><span style="color: #000000">.</span><span style="color: #000000">PatternLayout<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">#</span><span style="color: #008000">&nbsp;Pattern&nbsp;to&nbsp;output&nbsp;the&nbsp;caller's&nbsp;file&nbsp;name&nbsp;and&nbsp;line&nbsp;number.</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">stdout</span><span style="color: #000000">.</span><span style="color: #000000">layout</span><span style="color: #000000">.</span><span style="color: #000000">ConversionPattern</span><span style="color: #000000">=</span><span style="color: #800080">%d</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">%</span><span style="color: #000000">5p&nbsp;(</span><span style="color: #800080">%c</span><span style="color: #000000">:</span><span style="color: #800080">%L</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">%m%n</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">#</span><span style="color: #008000">&nbsp;Print&nbsp;only&nbsp;messages&nbsp;of&nbsp;level&nbsp;ERROR&nbsp;or&nbsp;above&nbsp;in&nbsp;the&nbsp;package&nbsp;noModule.</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">log4j</span><span style="color: #000000">.</span><span style="color: #000000">logger</span><span style="color: #000000">.</span><span style="color: #000000">noModule</span><span style="color: #000000">=</span><span style="color: #000000">FATAL<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">#</span><span style="color: #008000">&nbsp;OpenSymphony&nbsp;Stuff</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">log4j</span><span style="color: #000000">.</span><span style="color: #000000">logger</span><span style="color: #000000">.</span><span style="color: #000000">com</span><span style="color: #000000">.</span><span style="color: #000000">opensymphony</span><span style="color: #000000">=</span><span style="color: #000000">INFO<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />log4j</span><span style="color: #000000">.</span><span style="color: #000000">logger</span><span style="color: #000000">.</span><span style="color: #000000">com</span><span style="color: #000000">.</span><span style="color: #000000">opensymphony</span><span style="color: #000000">.</span><span style="color: #000000">webwork</span><span style="color: #000000">=</span><span style="color: #000000">DEBUG<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">#</span><span style="color: #008000">&nbsp;Spring&nbsp;Stuff</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">log4j</span><span style="color: #000000">.</span><span style="color: #000000">logger</span><span style="color: #000000">.</span><span style="color: #000000">org</span><span style="color: #000000">.</span><span style="color: #000000">springframework</span><span style="color: #000000">=</span><span style="color: #000000">INFO<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">#</span><span style="color: #008000">################################<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;错误信息&nbsp;#<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#################################</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">error</span><span style="color: #000000">=</span><span style="color: #000000">org</span><span style="color: #000000">.</span><span style="color: #000000">apache</span><span style="color: #000000">.</span><span style="color: #000000">log4j</span><span style="color: #000000">.</span><span style="color: #000000">DailyRollingFileAppender<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">error</span><span style="color: #000000">.</span><span style="color: #000000">File</span><span style="color: #000000">=</span><span style="color: #000000">E</span><span style="color: #000000">:/</span><span style="color: #000000">MyDoc</span><span style="color: #000000">/</span><span style="color: #000000">WorkSpace</span><span style="color: #000000">/</span><span style="color: #000000">webworkroot</span><span style="color: #000000">/</span><span style="color: #000000">logs</span><span style="color: #000000">/</span><span style="color: #000000">errors</span><span style="color: #000000">.</span><span style="color: #0000ff">log</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">error</span><span style="color: #000000">.</span><span style="color: #000000">layout</span><span style="color: #000000">=</span><span style="color: #000000">org</span><span style="color: #000000">.</span><span style="color: #000000">apache</span><span style="color: #000000">.</span><span style="color: #000000">log4j</span><span style="color: #000000">.</span><span style="color: #000000">PatternLayout<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">error</span><span style="color: #000000">.</span><span style="color: #000000">layout</span><span style="color: #000000">.</span><span style="color: #000000">ConversionPattern</span><span style="color: #000000">=</span><span style="color: #000000">[</span><span style="color: #800080">%d</span><span style="color: #000000">]</span><span style="color: #000000">-%-</span><span style="color: #000000">5p&nbsp;(</span><span style="color: #800080">%F</span><span style="color: #000000">:</span><span style="color: #800080">%L</span><span style="color: #000000">)</span><span style="color: #000000">|</span><span style="color: #800080">%m%n</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">error</span><span style="color: #000000">.</span><span style="color: #000000">DatePattern</span><span style="color: #000000">=</span><span style="font-weight: bold; color: #000000">'</span><span style="font-weight: bold; color: #000000">.</span><span style="font-weight: bold; color: #000000">'</span><span style="color: #000000">yyyy</span><span style="color: #000000">-</span><span style="color: #000000">MM</span><span style="color: #000000">-</span><span style="color: #000000">dd<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">error</span><span style="color: #000000">.</span><span style="color: #000000">Threshold</span><span style="color: #000000">=</span><span style="color: #000000">ERROR<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">#</span><span style="color: #008000">##################################<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CONSOLE&nbsp;#<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#################################</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">console</span><span style="color: #000000">=</span><span style="color: #000000">org</span><span style="color: #000000">.</span><span style="color: #000000">apache</span><span style="color: #000000">.</span><span style="color: #000000">log4j</span><span style="color: #000000">.</span><span style="color: #000000">ConsoleAppender<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">console</span><span style="color: #000000">.</span><span style="color: #000000">layout</span><span style="color: #000000">=</span><span style="color: #000000">org</span><span style="color: #000000">.</span><span style="color: #000000">apache</span><span style="color: #000000">.</span><span style="color: #000000">log4j</span><span style="color: #000000">.</span><span style="color: #000000">PatternLayout<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">console</span><span style="color: #000000">.</span><span style="color: #000000">layout</span><span style="color: #000000">.</span><span style="color: #000000">ConversionPattern</span><span style="color: #000000">=</span><span style="color: #000000">(</span><span style="color: #800080">%F</span><span style="color: #000000">:</span><span style="color: #800080">%L</span><span style="color: #000000">)</span><span style="color: #000000">|</span><span style="color: #800080">%m%n</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">errorcsle</span><span style="color: #000000">=</span><span style="color: #000000">org</span><span style="color: #000000">.</span><span style="color: #000000">apache</span><span style="color: #000000">.</span><span style="color: #000000">log4j</span><span style="color: #000000">.</span><span style="color: #000000">ConsoleAppender<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">errorcsle</span><span style="color: #000000">.</span><span style="color: #000000">layout</span><span style="color: #000000">=</span><span style="color: #000000">org</span><span style="color: #000000">.</span><span style="color: #000000">apache</span><span style="color: #000000">.</span><span style="color: #000000">log4j</span><span style="color: #000000">.</span><span style="color: #000000">PatternLayout<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">errorcsle</span><span style="color: #000000">.</span><span style="color: #000000">layout</span><span style="color: #000000">.</span><span style="color: #000000">ConversionPattern</span><span style="color: #000000">=%-</span><span style="color: #000000">5p&nbsp;(</span><span style="color: #800080">%F</span><span style="color: #000000">:</span><span style="color: #800080">%L</span><span style="color: #000000">)</span><span style="color: #000000">|</span><span style="color: #800080">%m%n</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">errorcsle</span><span style="color: #000000">.</span><span style="color: #000000">Threshold</span><span style="color: #000000">=</span><span style="color: #000000">ERROR<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">#</span><span style="color: #008000">#################################<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;业务系统&nbsp;#<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#################################</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">log4j</span><span style="color: #000000">.</span><span style="color: #000000">logger</span><span style="color: #000000">.</span><span style="color: #000000">cn</span><span style="color: #000000">.</span><span style="color: #000000">vesung</span><span style="color: #000000">=</span><span style="color: #000000">DEBUG</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;logic<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">logic</span><span style="color: #000000">=</span><span style="color: #000000">org</span><span style="color: #000000">.</span><span style="color: #000000">apache</span><span style="color: #000000">.</span><span style="color: #000000">log4j</span><span style="color: #000000">.</span><span style="color: #000000">DailyRollingFileAppender<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">logic</span><span style="color: #000000">.</span><span style="color: #000000">File</span><span style="color: #000000">=</span><span style="color: #000000">E</span><span style="color: #000000">:/</span><span style="color: #000000">MyDoc</span><span style="color: #000000">/</span><span style="color: #000000">WorkSpace</span><span style="color: #000000">/</span><span style="color: #000000">webworkroot</span><span style="color: #000000">/</span><span style="color: #000000">logs</span><span style="color: #000000">/</span><span style="color: #000000">logic</span><span style="color: #000000">.</span><span style="color: #0000ff">log</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">logic</span><span style="color: #000000">.</span><span style="color: #000000">layout</span><span style="color: #000000">=</span><span style="color: #000000">org</span><span style="color: #000000">.</span><span style="color: #000000">apache</span><span style="color: #000000">.</span><span style="color: #000000">log4j</span><span style="color: #000000">.</span><span style="color: #000000">PatternLayout<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">logic</span><span style="color: #000000">.</span><span style="color: #000000">layout</span><span style="color: #000000">.</span><span style="color: #000000">ConversionPattern</span><span style="color: #000000">=</span><span style="color: #000000">[</span><span style="color: #800080">%d</span><span style="color: #000000">]</span><span style="color: #000000">-%-</span><span style="color: #000000">5p&nbsp;(</span><span style="color: #800080">%F</span><span style="color: #000000">:</span><span style="color: #800080">%L</span><span style="color: #000000">)</span><span style="color: #000000">|</span><span style="color: #800080">%m%n</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />log4j</span><span style="color: #000000">.</span><span style="color: #000000">appender</span><span style="color: #000000">.</span><span style="color: #000000">logic</span><span style="color: #000000">.</span><span style="color: #000000">DatePattern</span><span style="color: #000000">=</span><span style="font-weight: bold; color: #000000">'</span><span style="font-weight: bold; color: #000000">.</span><span style="font-weight: bold; color: #000000">'</span><span style="color: #000000">yyyy</span><span style="color: #000000">-</span><span style="color: #000000">MM</span><span style="color: #000000">-</span><span style="color: #000000">dd</span></div>
<br />
其实业务系统和错误信息的输出定义对开发人员来说是最重要的。<img src ="http://www.blogjava.net/vesung/aggbug/177059.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2008-01-22 15:28 <a href="http://www.blogjava.net/vesung/archive/2008/01/22/177059.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate相关jar包功能详解</title><link>http://www.blogjava.net/vesung/archive/2008/01/17/175841.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Thu, 17 Jan 2008 01:58:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2008/01/17/175841.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/175841.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2008/01/17/175841.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/175841.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/175841.html</trackback:ping><description><![CDATA[hibernate2.jar:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hibernate的库，没有什么可说的，必须使用的jar包&nbsp;<br />
cglib-asm.jar:&nbsp;<br />
　　CGLIB库，Hibernate用它来实现PO字节码的动态生成，非常核心的库，必须使用的jar包&nbsp;<br />
dom4j.jar:&nbsp;<br />
　　dom4j是一个Java的XML&nbsp;API，类似于jdom，用来读写XML文件的。dom4j是一个非常非常优秀的Java&nbsp;XML&nbsp;API，具有性能优异、功能强大和极端易用使用的特点，同时它也是一个开放源代码的软件，可以在SourceForge上找到它。在IBM&nbsp;developerWorks上面可以找到一篇文章，对主流的Java&nbsp;XML&nbsp;API进行的性能、功能和易用性的评测，dom4j无论在那个方面都是非常出色的。我早在将近两年之前就开始使用dom4j，直到现在。如今你可以看到越来越多的Java软件都在使用dom4j来读写XML，特别值得一提的是连Sun的JAXM也在用dom4j。这是必须使用的jar包，Hibernate用它来读写配置文件。&nbsp;<br />
odmg.jar:<br />
　　ODMG是一个ORM的规范，Hibernate实现了ODMG规范，这是一个核心的库，必须使用的jar包。&nbsp;<br />
commons-collections.jar：&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Apache&nbsp;Commons包中的一个，包含了一些Apache开发的集合类，功能比java.util.*强大。必须使用的jar包。&nbsp;<br />
commons-beanutils.jar：<br />
　　Apache&nbsp;Commons包中的一个，包含了一些Bean工具类类。必须使用的jar包。&nbsp;<br />
commons-lang.jar:&nbsp;<br />
　　Apache&nbsp;Commons包中的一个，包含了一些数据类型工具类，是java.lang.*的扩展。必须使用的jar包。&nbsp;<br />
commons-logging.jar:&nbsp;<br />
　　Apache&nbsp;Commons包中的一个，包含了日志功能，必须使用的jar包。这个包本身包含了一个Simple&nbsp;Logger，但是功能很弱。在运行的时候它会先在CLASSPATH找log4j，如果有，就使用log4j，如果没有，就找JDK1.4带的java.util.logging，如果也找不到就用Simple&nbsp;Logger。commons-logging.jar的出现是一个历史的的遗留的遗憾，当初Apache极力游说Sun把log4j加入JDK1.4，然而JDK1.4项目小组已经接近发布JDK1.4产品的时间了，因此拒绝了Apache的要求，使用自己的java.util.logging，这个包的功能比log4j差的很远，性能也一般。<br />
　　后来Apache就开发出来了commons-logging.jar用来兼容两个logger。因此用commons-logging.jar写的log程序，底层的Logger是可以切换的，你可以选择log4j，java.util.logging或者它自带的Simple&nbsp;Logger。不过我仍然强烈建议使用log4j，因为log4j性能很高，log输出信息时间几乎等于System.out，而处理一条log平均只需要5us。你可以在Hibernate的src目录下找到Hibernate已经为你准备好了的log4j的配置文件，你只需要到Apache&nbsp;网站去下载log4j就可以了。commons-logging.jar也是必须的jar包。<br />
　　使用Hibernate必须的jar包就是以上的这几个，剩下的都是可选的。&nbsp;<br />
ant.jar:&nbsp;<br />
　　Ant编译工具的jar包，用来编译Hibernate源代码的。如果你不准备修改和编译Hibernate源代码，那么就没有什么用，可选的jar包&nbsp;<br />
optional.jar：<br />
　　Ant的一个辅助包。&nbsp;<br />
c3p0.jar：&nbsp;<br />
　　C3PO是一个数据库连接池，Hibernate可以配置为使用C3PO连接池。如果你准备用这个连接池，就需要这个jar包。&nbsp;<br />
proxool.jar：<br />
　　也是一个连接池，同上。&nbsp;<br />
commons-pool.jar,&nbsp;commons-dbcp.jar:&nbsp;<br />
　　DBCP数据库连接池，Apache的Jakarta组织开发的，Tomcat4的连接池也是DBCP。&nbsp;<br />
<br />
　　实际上Hibernate自己也实现了一个非常非常简单的数据库连接池，加上上面3个，你实际上可以在Hibernate上选择4种不同的数据库连接池，选择哪一个看个人的偏好，不过DBCP可能更通用一些。另外强调一点，如果在EJB中使用Hibernate，一定要用App&nbsp;Server的连接池，不要用以上4种连接池，否则容器管理事务不起作用。&nbsp;<br />
<br />
　　connector.jar:&nbsp;<br />
<br />
　　JCA&nbsp;规范，如果你在App&nbsp;Server上把Hibernate配置为Connector的话，就需要这个jar。不过实际上一般App&nbsp;Server肯定会带上这个包，所以实际上是多余的包。&nbsp;<br />
<br />
　　jaas.jar:&nbsp;<br />
<br />
　　JAAS是用来进行权限验证的，已经包含在JDK1.4里面了。所以实际上是多余的包。&nbsp;<br />
<br />
　　jcs.jar：&nbsp;<br />
<br />
　　如果你准备在Hibernate中使用JCS的话，那么必须包括它，否则就不用。&nbsp;<br />
<br />
　　jdbc2_0-stdext.jar:&nbsp;<br />
<br />
　　JDBC2.0的扩展包，一般来说数据库连接池会用上它。不过App&nbsp;Server都会带上，所以也是多余的。&nbsp;<br />
<br />
　　jta.jar：&nbsp;<br />
<br />
　　JTA规范，当Hibernate使用JTA的时候需要，不过App&nbsp;Server都会带上，所以也是多余的。&nbsp;<br />
<br />
　　junit.jar:&nbsp;<br />
<br />
　　Junit包，当你运行Hibernate自带的测试代码的时候需要，否则就不用。&nbsp;<br />
<br />
　　xalan.jar,&nbsp;xerces.jar,&nbsp;xml-apis.jar:&nbsp;<br />
<br />
　　Xerces是XML解析器，Xalan是格式化器，xml-apis实际上是JAXP。一般App&nbsp;Server都会带上，JDK1.4也包含了解析器，不过不是Xerces，是Crimson，效率比较差，不过Hibernate用XML只不过是读取配置文件，性能没什么紧要的，所以也是多余的。
<img src ="http://www.blogjava.net/vesung/aggbug/175841.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2008-01-17 09:58 <a href="http://www.blogjava.net/vesung/archive/2008/01/17/175841.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebWork2.2+DOJO(续)</title><link>http://www.blogjava.net/vesung/archive/2008/01/16/175525.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Wed, 16 Jan 2008 00:46:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2008/01/16/175525.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/175525.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2008/01/16/175525.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/175525.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/175525.html</trackback:ping><description><![CDATA[<h5>Remote Div Tag <br />
</h5>
<p>wiki上的文档翻译: <br />
Remote DIV 标签和普通的Html的DIV标签工作方式是一样的,但是它可以通过标签内指定的一个网址来装载它的内容.<br />
<strong>属性</strong></p>
<table style="border-right: #333333; padding-right: 1px; border-top: #333333; padding-left: 1px; padding-bottom: 1px; border-left: #333333; padding-top: 1px; border-bottom: #333333" bordercolor="#333333" cellspacing="0" cellpadding="1" rules="all" width="500" border="1">
    <tbody>
        <tr>
            <td>名称</td>
            <td>描述</td>
        </tr>
        <tr>
            <td>id (必有):</td>
            <td>DIV的ID </td>
        </tr>
        <tr>
            <td>href (必有): </td>
            <td>用来获取内容的网址</td>
        </tr>
        <tr>
            <td>delay: </td>
            <td>第一次装载内容需要延迟多长时间 (毫秒) </td>
        </tr>
        <tr>
            <td>updateFreq: </td>
            <td>多长时间重新取一次内容 (毫秒)</td>
        </tr>
        <tr>
            <td>loadingText:</td>
            <td>装载内容中对用户显示的文字 (特别是取内容的时候要花费很长的时间 </td>
        </tr>
        <tr>
            <td>errorText: </td>
            <td>如果取内容时发生了错误,向用户显示的提示</td>
        </tr>
        <tr>
            <td>showErrorTransportText: true/false </td>
            <td>当获取内容有问题的时候,是否把错误信息当作内容显示</td>
        </tr>
        <tr>
            <td>listenTopics: </td>
            <td>监听的Topic名称(多个逗号分割), 将会导致此DIV重新获取内容</td>
        </tr>
        <tr>
            <td>afterLoading: </td>
            <td>获取内容后要执行的Javascript代码</td>
        </tr>
    </tbody>
</table>
<br />
<strong>其他功能</strong> <br />
使用javascript代码我们还可以刷新内容,停止或者开始刷新组件.例如一个id是"remotediv1"的div组件: <br />
开始刷新的javascript代码: remotediv1.start(); <br />
停止刷新的javascript代码remotediv1.stop(); <br />
刷新内容的javascript代码:remotediv1.bind(); <br />
Remote DIV标签<strong>最值得关注的特性</strong>: <br />
可以自己重新装载自己的内容<br />
可以监听Topic,也就是别的动作可以引发更新内容的行为 <br />
JavaScript代码可以控制它的行为<br />
来看Remote Div标签的最简单的一个例子example1.jsp: <br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #000000; background-color: #ffff00">&lt;%</span><span style="color: #000000; background-color: #f5f5f5">@&nbsp;page&nbsp;contentType</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">text/html;charset=UTF-8</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;language</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">java</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000; background-color: #ffff00">&lt;%</span><span style="color: #000000; background-color: #f5f5f5">@&nbsp;taglib&nbsp;prefix</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">ww</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;uri</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">/webwork</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Ajax&nbsp;Examples</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #0000ff">&lt;</span><span style="color: #800000">jsp:include&nbsp;</span><span style="color: #ff0000">page</span><span style="color: #0000ff">="../commonInclude.jsp"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #0000ff">&lt;</span><span style="color: #800000">ww:div&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="once"</span><span style="color: #ff0000">&nbsp;theme</span><span style="color: #0000ff">="ajax"</span><span style="color: #ff0000">&nbsp;cssStyle</span><span style="color: #0000ff">="border:&nbsp;1px&nbsp;solid&nbsp;yellow;"</span><span style="color: #ff0000">&nbsp;<br />
</span><span style="color: #008080">10</span>&nbsp;<span style="color: #ff0000">href</span><span style="color: #0000ff">="/AjaxTest.action"</span><span style="color: #ff0000">&nbsp;delay</span><span style="color: #0000ff">="5000"</span><span style="color: #ff0000">&nbsp;loadingText</span><span style="color: #0000ff">="loading<img alt="" src="http://www.blogjava.net/Images/dot.gif" />"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Initial&nbsp;Content</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ww:div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">11</span>&nbsp;<span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">12</span>&nbsp;</div>
这个文件,内容非常简单,使用了一个ww:div标签,设置了一个id,使用的是ajax这个模板(如果你想定义自己的模板,请务必参考ajax模板的编写方法),设置读取内容的url为"/AjaxTest.action",设置延迟5000毫秒后读取内容,装载内容时显示的文本设置为"loading...",div显示时的初始内容时"Initial Content". <br />
<br />
很简单,在打开网页5秒后,标签会自动去访问"/AjaxTest.action",并把获取的内容设置为Div的内容. <br />
<br />
再来看一个<strong>定时自动刷新</strong>的例子: <br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">ww:div&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="twoseconds"</span><span style="color: #ff0000">&nbsp;cssStyle</span><span style="color: #0000ff">="border:&nbsp;1px&nbsp;solid&nbsp;yellow;"</span><span style="color: #ff0000">&nbsp;href</span><span style="color: #0000ff">="/AjaxTest.action"</span><span style="color: #ff0000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />theme</span><span style="color: #0000ff">="ajax"</span><span style="color: #ff0000">&nbsp;delay</span><span style="color: #0000ff">="2000"</span><span style="color: #ff0000">&nbsp;updateFreq</span><span style="color: #0000ff">="3000"</span><span style="color: #ff0000">&nbsp;errorText</span><span style="color: #0000ff">="There&nbsp;was&nbsp;an&nbsp;error"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Initial&nbsp;Content</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ww:div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;</span></div>
<br />
这个标签产生的结果每3秒钟刷新一次DIV的内容,和上面的差不多,只是多了一个<strong>updateFreq</strong>设置. <br />
<br />
此标签还有一个<strong>afterLoading</strong>属性,使用方法如下: <br />
&lt;ww:div ...... afterLoading='alert("done")'&gt;Initial Content&lt;/ww:div&gt;<br />
&lt;ww:div ...... afterLoading="alert(\"done\")"&gt;Initial Content&lt;/ww:div&gt; <br />
<br />
<img src ="http://www.blogjava.net/vesung/aggbug/175525.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2008-01-16 08:46 <a href="http://www.blogjava.net/vesung/archive/2008/01/16/175525.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebWork2.2+DOJO</title><link>http://www.blogjava.net/vesung/archive/2008/01/15/175518.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Tue, 15 Jan 2008 10:03:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2008/01/15/175518.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/175518.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2008/01/15/175518.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/175518.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/175518.html</trackback:ping><description><![CDATA[在WebWork2.2中,引入了Dojo ( http://dojotoolkit.org ) 和DWR ( http://getahead.ltd.uk/dwr/ ) 两个新的类库来支持AJAX功能.<br />
其中主要增加的特性包括: <br />
1.<strong>Remote Div Tag</strong> -- 远程区域块标签,通过异步调用获取内容,来动态更新Div.可以循环更新. <br />
2.<strong>Remote A Tag </strong>--远程链接标签,点击链接时进行一个远程异步调用,可以动态更新Div的内容. <br />
3.<strong>Tabbed Panelds</strong> --选项卡页面,和普通程序中的选项卡一样,可以有多个选项页面,每个页面的内容都可以设置(本地或者从远程获取),点击一个选项页,切换页面. <br />
4.<strong>Remote Form</strong> --远程表单,也就是提交但不刷新的表单,点击提交按钮,页面不刷新,通过远程异步调用,更新目标区域的内容. <br />
5.<strong>Form Validation</strong> --表单校验,在表单中的每个控件输入数据都可以进行即时的校验,主要使用的是DWR.<br />
<br />
<h4>先了解一下Dojo的工作原理:</h4>
清除缓存的代码: <br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span>&nbsp;<span style="color: #000000">response.setHeader(</span><span style="color: #000000">"</span><span style="color: #000000">Pragma</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">no-cache</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
</span><span style="color: #008080">2</span>&nbsp;<span style="color: #000000">response.setHeader(</span><span style="color: #000000">"</span><span style="color: #000000">Cache-Control</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">no-cache</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
</span><span style="color: #008080">3</span>&nbsp;<span style="color: #000000">response.setDateHeader(</span><span style="color: #000000">"</span><span style="color: #000000">Expires</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">);&nbsp;</span></div>
或者用html的meta来试试,不过那就包含在内容里了.<br />
为了使用WebWork的AJAX组件,我们需要在页面里面根据Dojo的做法包含一些代码,例如ajax例子里面的<strong>commonInclude.jsp</strong>文件:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #000000; background-color: #ffff00">&lt;%</span><span style="color: #000000; background-color: #f5f5f5">@&nbsp;taglib&nbsp;prefix</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">ww</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;uri</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">/webwork</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #008000">&lt;!--</span><span style="color: #008000">//&nbsp;START&nbsp;SNIPPET:&nbsp;common-include</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #0000ff">&lt;</span><span style="color: #800000">script&nbsp;</span><span style="color: #ff0000">language</span><span style="color: #0000ff">="JavaScript"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="text/javascript"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #008000; background-color: #f5f5f5">//</span><span style="color: #008000; background-color: #f5f5f5">&nbsp;Dojo&nbsp;configuration&nbsp;</span><span style="color: #008000; background-color: #f5f5f5"><br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000; background-color: #f5f5f5">djConfig&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;{&nbsp;<br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000; background-color: #f5f5f5">baseRelativePath:&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&lt;ww:url&nbsp;includeParams=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">none</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;value=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">/</span><span style="color: #000000; background-color: #f5f5f5">webwork</span><span style="color: #000000; background-color: #f5f5f5">/</span><span style="color: #000000; background-color: #f5f5f5">dojo</span><span style="color: #000000; background-color: #f5f5f5">/</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">/&gt;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">,&nbsp;<br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000; background-color: #f5f5f5">isDebug:&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">false</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;<br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000; background-color: #f5f5f5">};&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #0000ff">&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">11</span>&nbsp;<span style="color: #0000ff">&lt;</span><span style="color: #800000">script&nbsp;</span><span style="color: #ff0000">language</span><span style="color: #0000ff">="JavaScript"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="text/javascript"</span><span style="color: #ff0000">&nbsp;<br />
</span><span style="color: #008080">12</span>&nbsp;<span style="color: #ff0000">src</span><span style="color: #0000ff">="&lt;ww:url&nbsp;includeParams="</span><span style="color: #ff0000">none"&nbsp;value</span><span style="color: #0000ff">="/webwork/dojo/dojo.js"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&gt;&lt;/script&gt;&nbsp;<br />
</span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000; background-color: #f5f5f5">&lt;script&nbsp;language=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">JavaScript</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;type=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">text</span><span style="color: #000000; background-color: #f5f5f5">/</span><span style="color: #000000; background-color: #f5f5f5">javascript</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;<br />
</span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000; background-color: #f5f5f5">src=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">ww:url&nbsp;includeParams</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">none</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;value</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">/webwork/CommonFunctions.js</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">/&gt;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&gt;&lt;/script&gt;&nbsp;<br />
</span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000; background-color: #f5f5f5"><br />
</span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000; background-color: #f5f5f5">&lt;script&nbsp;language=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">JavaScript</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;type=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">text</span><span style="color: #000000; background-color: #f5f5f5">/</span><span style="color: #000000; background-color: #f5f5f5">javascript</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&gt;&nbsp;<br />
</span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000; background-color: #f5f5f5">dojo.require(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">dojo.io.BrowserIO</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);&nbsp;<br />
</span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000; background-color: #f5f5f5">dojo.require(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">dojo.event.topic</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);&nbsp;<br />
</span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000; background-color: #f5f5f5">dojo.require(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">webwork.widgets.Bind</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);&nbsp;<br />
</span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000; background-color: #f5f5f5">dojo.require(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">webwork.widgets.BindDiv</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);&nbsp;<br />
</span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000; background-color: #f5f5f5">dojo.require(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">webwork.widgets.BindButton</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);&nbsp;<br />
</span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000; background-color: #f5f5f5">dojo.require(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">webwork.widgets.BindAnchor</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);&nbsp;<br />
</span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000; background-color: #f5f5f5">&lt;/script&gt;&nbsp;<br />
</span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000; background-color: #f5f5f5">&lt;!--//&nbsp;END&nbsp;SNIPPET:&nbsp;common-include--&gt;&nbsp;<br />
</span><span style="color: #008080">25</span>&nbsp;</div>
这个文件里面对Dojo进行了设置,包含dojo.js,并且引入了webwork实现的这几个装饰件的代码,在后面的每个例子中,都要包含这个文件,因为后面的介绍中将省略这个文件的介绍,要想了解更多信息,可以参考Dojo的文档. <br />
<br />
<strong>提示：</strong>其实在webwork框架下面引入dojo最容易了只需在页面加入下面一行即可：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">ww:head&nbsp;</span><span style="color: #ff0000">theme</span><span style="color: #0000ff">="ajax"</span><span style="color: #ff0000">&nbsp;debug</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span></div>
<br />
--待续-- 
<img src ="http://www.blogjava.net/vesung/aggbug/175518.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2008-01-15 18:03 <a href="http://www.blogjava.net/vesung/archive/2008/01/15/175518.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>你是如何处理捕获的异常的？</title><link>http://www.blogjava.net/vesung/archive/2008/01/09/174002.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Wed, 09 Jan 2008 06:46:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2008/01/09/174002.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/174002.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2008/01/09/174002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/174002.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/174002.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;捕获了异常却不作任何处理，可以算得上Java编程中的杀手。从问题出现的频繁程度和祸害程度来看，它也许可以和C/C++程序的一个恶名远播的问题相提并论??不检查缓冲区是否已满。如果你看到了这种丢弃（而不是抛出）异常的情况，可以百分之九十九地肯定代码存在问题。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;错误在于，异常总是意味着某些事情不对劲了，或者说至少发生了某些不寻常的事情，我们不应该对程序发出的求救信号保持沉默和无动于衷。调用一下printStackTrace算不上&#8220;处理异常&#8221;。不错，调用printStackTrace对调试程序有帮助，但程序调试阶段结束之后，printStackTrace就不应再在异常处理模块中担负主要责任了。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那么，应该怎样改正呢？主要有四个选择： <br />
<br />
　　1、处理异常。针对该异常采取一些行动，例如修正问题、提醒某个人或进行其他一些处理，要根据具体的情形确定应该采取的动作。再次说明，调用printStackTrace算不上已经&#8220;处理好了异常&#8221;。 <br />
<br />
　　2、重新抛出异常。处理异常的代码在分析异常之后，认为自己不能处理它，重新抛出异常也不失为一种选择。 <br />
<br />
　　3、把该异常转换成另一种异常。大多数情况下，这是指把一个低级的异常转换成应用级的异常（其含义更容易被用户了解的异常）。 <br />
<br />
　　4、不要捕获异常。 <br />
<br />
　　结论一：既然捕获了异常，就要对它进行适当的处理。不要捕获异常之后又把它丢弃，不予理睬。
<img src ="http://www.blogjava.net/vesung/aggbug/174002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2008-01-09 14:46 <a href="http://www.blogjava.net/vesung/archive/2008/01/09/174002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat 的缓存机制</title><link>http://www.blogjava.net/vesung/archive/2008/01/09/173995.html</link><dc:creator>vesung</dc:creator><author>vesung</author><pubDate>Wed, 09 Jan 2008 06:22:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2008/01/09/173995.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/173995.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2008/01/09/173995.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/173995.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/173995.html</trackback:ping><description><![CDATA[事出做项目时一个jsp页面修改后一直没有读出来，后来仔细研究了下tomcat才发现<br />
当请求jsp页面时，Tomcat会分派给JspServlet来处理，在jspServlet的方法 service()中有一句 <br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;precompile&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;preCompile(request);&nbsp;</span><br />
它会判断你请求jsp页面时有没有带?jsp_precompile查询字符串，如果带了就会重新编译<br />
然后再由<span style="color: #000000">serviceJspFile(request,&nbsp;response,&nbsp;jspUri,&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">,&nbsp;precompile)</span>进一步判断是否要进行编译jsp文件，下面是JspServletWraper service方法<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(options.getDevelopment()&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;firstTime&nbsp;)&nbsp;{&nbsp;<br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #0000ff">synchronized</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">this</span><span style="color: #000000">)&nbsp;{&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(firstTime)&nbsp;{&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000">firstTime&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;&nbsp;<br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000">}&nbsp;<br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #008000">//</span><span style="color: #008000">&nbsp;The&nbsp;following&nbsp;sets&nbsp;reload&nbsp;to&nbsp;true,&nbsp;if&nbsp;necessary&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000">ctxt.compile();&nbsp;<br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">}&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000">}&nbsp;<br />
</span><span style="color: #008080">10</span>&nbsp;</div>
关键就在Compiler的isOutDated(boolean checkClass) 的判断上 。<br />
判断标准是，如果 jsp最后修改时间大于目标文件的最后修改时间要重新编译。还有一种情况就是即使jsp的最后修改时间晚于目标文件的最后修改时间，但只要jsp中用了 <br />
include指令包含的某个文件的最后修改时间早于对应目标文件的修改时间的话，也是需要重新编译主jsp文件的<br />
<img src ="http://www.blogjava.net/vesung/aggbug/173995.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">vesung</a> 2008-01-09 14:22 <a href="http://www.blogjava.net/vesung/archive/2008/01/09/173995.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>