﻿<?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-zhyiwww -随笔分类-j2ee</title><link>http://www.blogjava.net/zhyiwww/category/8511.html</link><description>用平实的笔，记录编程路上的点点滴滴………</description><language>zh-cn</language><lastBuildDate>Fri, 17 Oct 2014 05:45:48 GMT</lastBuildDate><pubDate>Fri, 17 Oct 2014 05:45:48 GMT</pubDate><ttl>60</ttl><item><title>spring framework 各版本源码下载地址</title><link>http://www.blogjava.net/zhyiwww/archive/2014/10/17/418809.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Fri, 17 Oct 2014 01:04:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2014/10/17/418809.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/418809.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2014/10/17/418809.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/418809.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/418809.html</trackback:ping><description><![CDATA[<br />现在spring的源码下载地址真是不好找，这次终于找到了。记录一下，以帮助需要的朋友。<br /><br /><a href="https://github.com/spring-projects/spring-framework/tags">https://github.com/spring-projects/spring-framework/tags</a><br />可以选择需要的版本进行下载。<br />
<p class="username"><br />感谢网友 <a href="http://my.csdn.net/xiyuan1999" rel="nofollow" target="_blank">xiyuan1999</a> 在csdn上提供的此下载地址。</p><img src ="http://www.blogjava.net/zhyiwww/aggbug/418809.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2014-10-17 09:04 <a href="http://www.blogjava.net/zhyiwww/archive/2014/10/17/418809.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA中的日期转化和格式化</title><link>http://www.blogjava.net/zhyiwww/archive/2014/02/19/410058.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Wed, 19 Feb 2014 10:20:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2014/02/19/410058.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/410058.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2014/02/19/410058.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/410058.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/410058.html</trackback:ping><description><![CDATA[&nbsp; 
<p style="margin: 0in 0in 0in 0.375in; font-family: 宋体; font-size: 12pt">&nbsp;</p>
<p style="margin: 0in 0in 0in 0.375in; font-family: 宋体; font-size: 12pt">转换：</p>
<div style="direction: ltr">
<table style="border-bottom: #a3a3a3 1pt solid; border-left: #a3a3a3 1pt solid; border-collapse: collapse; direction: ltr; border-top: #a3a3a3 1pt solid; border-right: #a3a3a3 1pt solid" border="1" cellspacing="0" cellpadding="0" valign="top">
<tbody>
<tr>
<td style="border-bottom: #a3a3a3 1pt solid; border-left: #a3a3a3 1pt solid; padding-bottom: 4pt; padding-left: 4pt; width: 1.59in; padding-right: 4pt; vertical-align: top; border-top: #a3a3a3 1pt solid; border-right: #a3a3a3 1pt solid; padding-top: 4pt">
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">从Date到String</p></td>
<td style="border-bottom: #a3a3a3 1pt solid; border-left: #a3a3a3 1pt solid; padding-bottom: 4pt; padding-left: 4pt; width: 4.429in; padding-right: 4pt; vertical-align: top; border-top: #a3a3a3 1pt solid; border-right: #a3a3a3 1pt solid; padding-top: 4pt">
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">DateFormat&nbsp;df = new SimpleDateFormat("yyyy-MM-dd");</p>
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">Date d = new Date();</p>
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">String&nbsp;dstr = Df.format(d);</p></td></tr>
<tr>
<td style="border-bottom: #a3a3a3 1pt solid; border-left: #a3a3a3 1pt solid; padding-bottom: 4pt; padding-left: 4pt; width: 1.59in; padding-right: 4pt; vertical-align: top; border-top: #a3a3a3 1pt solid; border-right: #a3a3a3 1pt solid; padding-top: 4pt">
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">从String到日期</p></td>
<td style="border-bottom: #a3a3a3 1pt solid; border-left: #a3a3a3 1pt solid; padding-bottom: 4pt; padding-left: 4pt; width: 4.429in; padding-right: 4pt; vertical-align: top; border-top: #a3a3a3 1pt solid; border-right: #a3a3a3 1pt solid; padding-top: 4pt">
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">DateFormat&nbsp;df = new SimpleDateFormat("yyyy-MM-dd");</p>
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">Date&nbsp;d = df.parse("2014-02-19");</p>
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">&nbsp;</p></td></tr>
<tr>
<td style="border-bottom: #a3a3a3 1pt solid; border-left: #a3a3a3 1pt solid; padding-bottom: 4pt; padding-left: 4pt; width: 1.59in; padding-right: 4pt; vertical-align: top; border-top: #a3a3a3 1pt solid; border-right: #a3a3a3 1pt solid; padding-top: 4pt">
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">从date到calendar</p></td>
<td style="border-bottom: #a3a3a3 1pt solid; border-left: #a3a3a3 1pt solid; padding-bottom: 4pt; padding-left: 4pt; width: 4.429in; padding-right: 4pt; vertical-align: top; border-top: #a3a3a3 1pt solid; border-right: #a3a3a3 1pt solid; padding-top: 4pt">
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">Calendar cd1 = Calendar.getInstance();</p>
<p style="margin: 0in 0in 0in 0.375in; font-family: 宋体; font-size: 12pt">Date sd1 = df.parse(startDate);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p style="margin: 0in 0in 0in 0.375in; font-family: 宋体; font-size: 12pt">cd1.setTime(sd1);</p>
<p style="margin: 0in 0in 0in 0.375in; font-family: 宋体; font-size: 12pt">如：</p>
<p style="margin: 0in 0in 0in 0.375in; font-family: 宋体; font-size: 12pt">startDate="2014-02-19";</p></td></tr>
<tr>
<td style="border-bottom: #a3a3a3 1pt solid; border-left: #a3a3a3 1pt solid; padding-bottom: 4pt; padding-left: 4pt; width: 1.59in; padding-right: 4pt; vertical-align: top; border-top: #a3a3a3 1pt solid; border-right: #a3a3a3 1pt solid; padding-top: 4pt">
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">从calender到Date</p></td>
<td style="border-bottom: #a3a3a3 1pt solid; border-left: #a3a3a3 1pt solid; padding-bottom: 4pt; padding-left: 4pt; width: 4.429in; padding-right: 4pt; vertical-align: top; border-top: #a3a3a3 1pt solid; border-right: #a3a3a3 1pt solid; padding-top: 4pt">
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">Calendar cd1 = Calendar.getInstance();</p>
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">Date&nbsp;d = cd1.getTime();</p>
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">&nbsp;</p></td></tr></tbody></table></div>
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">&nbsp;</p>
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">格式化：</p>
<div style="direction: ltr">
<table style="border-bottom: #a3a3a3 1pt solid; border-left: #a3a3a3 1pt solid; border-collapse: collapse; direction: ltr; border-top: #a3a3a3 1pt solid; border-right: #a3a3a3 1pt solid" border="1" cellspacing="0" cellpadding="0" valign="top">
<tbody>
<tr>
<td style="border-bottom: #a3a3a3 1pt solid; border-left: #a3a3a3 1pt solid; padding-bottom: 4pt; padding-left: 4pt; width: 1.594in; padding-right: 4pt; vertical-align: top; border-top: #a3a3a3 1pt solid; border-right: #a3a3a3 1pt solid; padding-top: 4pt">
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">格式化Date</p></td>
<td style="border-bottom: #a3a3a3 1pt solid; border-left: #a3a3a3 1pt solid; padding-bottom: 4pt; padding-left: 4pt; width: 4.154in; padding-right: 4pt; vertical-align: top; border-top: #a3a3a3 1pt solid; border-right: #a3a3a3 1pt solid; padding-top: 4pt">
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">DateFormat&nbsp;df = new SimpleDateFormat("yyyy-MM-dd");</p>
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">String dstr = df.format(new Date());</p></td></tr>
<tr>
<td style="border-bottom: #a3a3a3 1pt solid; border-left: #a3a3a3 1pt solid; padding-bottom: 4pt; padding-left: 4pt; width: 1.594in; padding-right: 4pt; vertical-align: top; border-top: #a3a3a3 1pt solid; border-right: #a3a3a3 1pt solid; padding-top: 4pt">
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">格式化Calendar</p></td>
<td style="border-bottom: #a3a3a3 1pt solid; border-left: #a3a3a3 1pt solid; padding-bottom: 4pt; padding-left: 4pt; width: 4.154in; padding-right: 4pt; vertical-align: top; border-top: #a3a3a3 1pt solid; border-right: #a3a3a3 1pt solid; padding-top: 4pt">
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">DateFormat&nbsp;df = new SimpleDateFormat("yyyy-MM-dd");</p>
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">Calendar cd1 = Calendar.getInstance();</p>
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">String dstr = df.format(cd1.getTime());</p></td></tr>
<tr>
<td style="border-bottom: #a3a3a3 1pt solid; border-left: #a3a3a3 1pt solid; padding-bottom: 4pt; padding-left: 4pt; width: 1.594in; padding-right: 4pt; vertical-align: top; border-top: #a3a3a3 1pt solid; border-right: #a3a3a3 1pt solid; padding-top: 4pt">
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">格式化日期字符串</p></td>
<td style="border-bottom: #a3a3a3 1pt solid; border-left: #a3a3a3 1pt solid; padding-bottom: 4pt; padding-left: 4pt; width: 4.154in; padding-right: 4pt; vertical-align: top; border-top: #a3a3a3 1pt solid; border-right: #a3a3a3 1pt solid; padding-top: 4pt">
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">DateFormat&nbsp;df = new SimpleDateFormat("yyyy-MM-dd");</p>
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">Date&nbsp;d = df.parse("2014-02-19");</p>
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">DateFormat&nbsp;df1 = new SimpleDateFormat("MM-dd");</p>
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">String dstr2 = df1.format(d);</p></td></tr>
<tr>
<td style="border-bottom: #a3a3a3 1pt solid; border-left: #a3a3a3 1pt solid; padding-bottom: 4pt; padding-left: 4pt; width: 1.594in; padding-right: 4pt; vertical-align: top; border-top: #a3a3a3 1pt solid; border-right: #a3a3a3 1pt solid; padding-top: 4pt">
<p style="margin: 0in; font-family: 宋体; font-size: 12pt">&nbsp;</p></td>
<td style="border-bottom: #a3a3a3 1pt solid; border-left: #a3a3a3 1pt solid; padding-bottom: 4pt; padding-left: 4pt; width: 4.154in; padding-right: 4pt; vertical-align: top; border-top: #a3a3a3 1pt solid; border-right: #a3a3a3 1pt solid; padding-top: 4pt">
<p style="margin: 0in; font-family: SimSun; font-size: 10pt">&nbsp;</p></td></tr></tbody></table></div><img src ="http://www.blogjava.net/zhyiwww/aggbug/410058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2014-02-19 18:20 <a href="http://www.blogjava.net/zhyiwww/archive/2014/02/19/410058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ant中depends调用任务和antcall调用任务的区别</title><link>http://www.blogjava.net/zhyiwww/archive/2012/04/10/373674.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Tue, 10 Apr 2012 01:27:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2012/04/10/373674.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/373674.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2012/04/10/373674.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/373674.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/373674.html</trackback:ping><description><![CDATA[在使用ant的时候，有时用<br /><div>&nbsp; &lt;target name="war.import" depends="svn.task,<strong><span style="color: red;">war.name</span></strong>"&gt;<br />&nbsp;&nbsp;&nbsp; &lt;echo&gt;A: ${war.name}&lt;/echo&gt;<br />&nbsp; &lt;/target&gt;<br /><br />有时用<br /><div>&nbsp; &lt;target name="war.import" depends="svn.task"&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <strong style="color: #0000ff;">&lt;antcall target="war.name"/&gt;</strong><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;echo&gt;B: ${war.name}&lt;/echo&gt;<br style="color: #0000ff;" />&nbsp; &lt;/target&gt;</div></div>两种方法有什么不同呢?<br /><br />通常来看，感觉没什么不同，其实是有不同的。只不过差异在一些不太明显的地方。<br /><br />如果单纯的是两个过程调用，就是没有区别的。区别在于，用depends的方式调用，那么war.name任务中的设置或者修改的属性值可以在后面的任务中使用，而用antcall的调用就不可以。<br /><br />如：如war.name任务如下:<br /><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;target name="war.name"&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; task war.name need to pass 4 parameters:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; project.name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; release.version<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deploy.type<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/echo&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="war.name" value="${project.name}-${release.version}_${deploy.type}-${today}-${build.number}.war"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="war.file" value="${bin.dir}/${war.name}"/&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="war.md5.name" value="${war.name}.MD5"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="war.md5.file" value="${bin.dir}/${war.md5.name}"/&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-------------------------------------------------------------------------------|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; war.name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : ${war.name}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; war.file&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : ${war.file}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; war.md5.name&nbsp;&nbsp;&nbsp; : ${war.md5.name}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; war.md5.file&nbsp;&nbsp;&nbsp; : ${war.md5.file}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |-------------------------------------------------------------------------------|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/echo&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/target&gt;<br /><br />那么第一种调用方法，就能正确取得war.name属性的值，而第二种调用就不能。所以建议尽可能的使用depends进行任务调用。<br /><br />区别在细微的地方，不过也值得注意。<br /></div><img src ="http://www.blogjava.net/zhyiwww/aggbug/373674.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2012-04-10 09:27 <a href="http://www.blogjava.net/zhyiwww/archive/2012/04/10/373674.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat restart shell scripts</title><link>http://www.blogjava.net/zhyiwww/archive/2012/03/16/372056.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Fri, 16 Mar 2012 09:19:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2012/03/16/372056.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/372056.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2012/03/16/372056.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/372056.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/372056.html</trackback:ping><description><![CDATA[<br /><br />linux重启tomcat脚本：<br /><br /><div><br />tomcat_home=/opt/apache-tomcat-6.0.32<br /><br />ps -ef |grep tomcat&nbsp; |awk {'print $2'} | sed -e "s/^/kill -9 /g" | sh -<br /><br />rm&nbsp; $tomcat_home/logs/* -rf<br />rm&nbsp; $tomcat_home/work/* -rf<br /><br /><br />$tomcat_home/bin/startup.sh <br /><br />tail -f $tomcat_home/logs/catalina.out<br /><br />保存为restart.sh<br />执行就可以了。<br /><br /><br /></div><br /><img src ="http://www.blogjava.net/zhyiwww/aggbug/372056.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2012-03-16 17:19 <a href="http://www.blogjava.net/zhyiwww/archive/2012/03/16/372056.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ubuntu下ICE-3.4.2的安装</title><link>http://www.blogjava.net/zhyiwww/archive/2011/10/20/361661.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Thu, 20 Oct 2011 08:47:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2011/10/20/361661.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/361661.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2011/10/20/361661.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/361661.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/361661.html</trackback:ping><description><![CDATA[本来要说安装应该是挺容易的，不过这次在Ubuntu下的安装确实费了些周折。因为ICE的官方系统支持中有windows、RHA、SUSE。没有ubunt的支持。不过ICE应该是可以支持的，需要从源码编译安装。 所以安装过程终包的依赖是需要解决的最大障碍。<br />【1】先安装QT-4.3.5<br />请参见<br />安装到 /opt/qt-x11-4.3.5<br /><br />【2】创建链接 <br />ln -s /opt/qt-x11-4.3.5 /opt/qt<br /><br />【3】安装berkeley_db_5.2.36<br />安装到/opt/berkeley_db_5.2.36<br /><br />【4】创建链接<br />ln -s /opt/berkeley_db_5.2.36 /opt/db<br /><br />【5】安装其他依赖包<br /><div>aptitude install build-dep build-depqt4-qmake bzip2 expat g++ libavahi-gobject-dev libbz2-dev libcurl4-openssl-dev libexpat-dev libfontconfig-dev libfreetype6-dev libjgoodies-animation-java libjgoodies-binding-java libjgoodies-uiflite-java libjgoodies-binding-java libjgoodies-forms-java libjgoodies-looks-java libmcpp-dev libsm-dev libssl-dev libx11-dev libxext-dev libxrender-dev libxtst-dev openssl qt4-qmake -y<br />我整理的。<br />从http://download.csdn.net/download/moliqin/3693452下载jgoodies-common包，解压。<br />cp jgoodies-common-1.2.1.jar /usr/share/java/<br />ln -s /usr/share/java/jgoodies-common-1.2.1.jar&nbsp; /usr/share/java/jgoogies-common.jar<br /><br /><br />【6】cpp编译<br /><br />修改ICE编译配置<br />cd /tmp/ICE-3.4.2/cpp<br />vim config/Make.rules<br />修改如下配置项内容：<br /><div>&nbsp;40 LP64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ?= yes<br />&nbsp;76 DB_HOME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ?= /opt/db<br />117 QT_HOME = /opt/qt<br /><div><br />修改之后，保存。<br />执行编译。<br />make<br />基本上就可以正常了。<br /><br />【7】cpp安装<br />（如果只用java可以不用编译，只需要通过apt 安装ice就可以了。）<br />make install <br /><br />【8】 ICE java安装<br />cd ICE-3.4.2/java<br /><br />make <br />make install <br />就应该能顺利安装了。<br /><br /><br />其实。在Ubuntu下面直接用 aptitude install&nbsp; zeroc-ice33&nbsp; 就可以安装一个完整的ice环境。 上面的是用编译安装的方法。更麻烦。<br />安装后，共享的类包在/usr/share/java下面。<br /><br /></div><br /><br />&nbsp;&nbsp;&nbsp;</div></div><img src ="http://www.blogjava.net/zhyiwww/aggbug/361661.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2011-10-20 16:47 <a href="http://www.blogjava.net/zhyiwww/archive/2011/10/20/361661.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>命令行和ant脚本的参数传递</title><link>http://www.blogjava.net/zhyiwww/archive/2011/09/02/357823.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Fri, 02 Sep 2011 06:44:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2011/09/02/357823.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/357823.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2011/09/02/357823.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/357823.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/357823.html</trackback:ping><description><![CDATA[比如在执行build.xml的某些任务时候，需要从外面的命令行传递参数给ant脚本。<br />可以通过以下的方式进行参数传入：<br /><div>ant -f ../../build.xml idc.$type.$ismenu.war -Dparent_version=$parent_version -Dson_version=$son_version<br /><br />使用方法：&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; 在build.xml文件定义如下属性：<br />&nbsp;&nbsp; &lt;property name="parent.version" value="${parent_version}" /&gt;<br />&nbsp;&nbsp; &lt;property name="son.version" value="${son_version}" /&gt;<br /><br />在任务中使用：<br /><br /><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;target name="war" depends="build.all"&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="war.name" value="${product.bin.dir}/${project.context}-<strong style="color: red;">${parent.version}</strong>-${current.date}.war"/&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;war destfile="${war.name}" webxml="${project.webroot}/WEB-INF/web.xml"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${project.webroot}"&gt;<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; &lt;include name="**/*"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/war&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/target&gt;<br /><br />红色字体部分，就可以实现从此参数取得值。<br /><br />通过以上方法，就可以从命令行中把参数传递入ant脚本。<br />这样，就可以灵活的使用shell脚本和ant脚本的整合。实现更方便和灵活的功能。</div><br /></div><img src ="http://www.blogjava.net/zhyiwww/aggbug/357823.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2011-09-02 14:44 <a href="http://www.blogjava.net/zhyiwww/archive/2011/09/02/357823.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ant任务调用和参数传递</title><link>http://www.blogjava.net/zhyiwww/archive/2011/08/25/357255.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Thu, 25 Aug 2011 05:54:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2011/08/25/357255.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/357255.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2011/08/25/357255.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/357255.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/357255.html</trackback:ping><description><![CDATA[先定义任务，需要参数：<br /><div>&nbsp;&lt;target name="war" depends="build.all"&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong style="font-size: 12pt;"><span style="color: red; font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="war.name" value="${product.bin.dir}/${project.context}-${current.date}.war"/&gt;</span></strong><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;war destfile="${war.name}" webxml="${project.webroot}/WEB-INF/web.xml"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${project.webroot}"&gt;<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; &lt;include name="**/*"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/war&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/target&gt;<br /><br />红色的字体部分就是在调用的时候需要提供的参数。默认的值为<div><strong style="font-size: 12pt;"><span style="color: red; font-size: 10pt;">${product.bin.dir}/${project.context}-${current.date}.war</span></strong></div><br />任务调用：<br /><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;target name="tt"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;antcall target="war"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><span style="color: #008000;">&nbsp;&nbsp;&nbsp; &lt;param name="war.name" value="${product.bin.dir}/tt.war"/&gt;</span></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/antcall&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/target&gt;<br />调用时用antcall任务来实现。用绿色字体部分进行构造参数的值，并传递给被调任务。<br /><br />通过这种方式使用起来会更灵活。<br /></div><br /></div><img src ="http://www.blogjava.net/zhyiwww/aggbug/357255.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2011-08-25 13:54 <a href="http://www.blogjava.net/zhyiwww/archive/2011/08/25/357255.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>代码资源释放问题</title><link>http://www.blogjava.net/zhyiwww/archive/2011/08/11/356295.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Thu, 11 Aug 2011 03:25:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2011/08/11/356295.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/356295.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2011/08/11/356295.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/356295.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/356295.html</trackback:ping><description><![CDATA[<div><p>看如下代码：<br /></p><p>&nbsp;&nbsp;&nbsp; public void destroy() {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.destroy();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (runner != null) {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; runner.stop();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; runner = null;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (thread != null) {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; thread.interrupt();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; thread = null;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp; }</p><p>这是摘录的一段代码。应该说对资源释放时的问题做的比较到位。</p><p>&nbsp; if (runner !=  null)语句可以有效的避免NullPointException异常的抛出</p><p>&nbsp;&nbsp;&nbsp;&nbsp;  runner.stop();可以释放运行阶段的资源。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; runner = null;  把runner对象置空，有利于资源的快速回收。</p><p><br />综上，此段代码既有稳健性考虑，又有适当性能提升考虑，在我们写代码时值得借鉴。</p><p><br /></p><p><br /></p><p><br /></p><p><br /></p></div><img src ="http://www.blogjava.net/zhyiwww/aggbug/356295.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2011-08-11 11:25 <a href="http://www.blogjava.net/zhyiwww/archive/2011/08/11/356295.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>build.xml引用其它文件的任务</title><link>http://www.blogjava.net/zhyiwww/archive/2011/08/03/355640.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Wed, 03 Aug 2011 01:54:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2011/08/03/355640.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/355640.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2011/08/03/355640.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/355640.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/355640.html</trackback:ping><description><![CDATA[如我的build.xml中的一个任务：<br /><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;target name="product.deploy"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ${proj.dir}/tomcat.xml<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/echo&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;sequential&gt;<br /><strong style="color: red;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;exec executable="ant"&gt;<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; &lt;arg value="-f" /&gt;<br /></strong><strong style="color: #008000;">&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;</strong><strong><span style="color: #008000;">&nbsp; &lt;arg value="${proj.dir}/tomcat.xml" /&gt;</span></strong><strong style="color: red;"><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; &lt;arg value="tomcat.stop.linux" /&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/exec&gt;</strong><br style="color: red;" /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- deploy&nbsp; --&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo&gt;<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; copy ${bin.dir}/${web.context}.war file to ${container.webapps.dir}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/echo&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;copy todir="${container.webapps.dir}" file="${bin.dir}/${web.context}.war" /&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;exec executable="ant"&gt;<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; &lt;arg value="-f" /&gt;<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; &lt;arg value="${proj.dir}/tomcat.xml" /&gt;<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; &lt;arg value="tomcat.start.linux" /&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/exec&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/sequential&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/target&gt;<br /><br />红色字体的部分是调用了另外一个build文件中的任务。用的是ant call的方式调用的。<br />绿色字体部分引入的是另外一个build文件的路径。<br /><br />通过这种方式，可以把不同类型功能的任务放在单一的文件中。</div><img src ="http://www.blogjava.net/zhyiwww/aggbug/355640.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2011-08-03 09:54 <a href="http://www.blogjava.net/zhyiwww/archive/2011/08/03/355640.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ant任务依赖图形化工具（转载）</title><link>http://www.blogjava.net/zhyiwww/archive/2011/07/21/354769.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Thu, 21 Jul 2011 03:57:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2011/07/21/354769.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/354769.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2011/07/21/354769.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/354769.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/354769.html</trackback:ping><description><![CDATA[<div><div align="left">  </div><div align="center"><div align="left"><br /><div><p><span style="font-size: 12pt;"><a href="http://www.javaranch.com/journal/200711/ant_dependency_graph.html">http://www.javaranch.com/journal/200711/ant_dependency_graph.html</a></span></p></div> </div><h1><br /></h1><h1>Ant Task Dependency Graphs</h1> <em>by <a href="http://faq.javaranch.com/java/ActiveStaff#jeanneboyarsky" target="_blank">Jeanne Boyarsky</a></em> </div>  <div>  <p> When inheriting an Ant build file to maintain, it is useful to get a  feel for the flow and structure.  Sketching the dependencies between  targets is a useful way to do this.  While it is time consuming to do so  by hand, there are a number of tools to help. </p>  <p> I tried three different tools to generate the output.  All of them  generate a .dot file which needs to be run through the <a href="http://www.graphviz.org/">Graphviz</a> tool to be converted to a  useful format.  Graphviz can covert to all image formats among many  others.  Each tool is described below with an example of how to call it.   I've also included two sample images: from our build script to Pick  Winners in the weekly book/software promotion and a contrived example  designed to show how antCall and forEach work. </p>  <ol><li> <u>Ant2Dot</u> - Ant2Dot is an XSLT file that converts your Ant build  file into a .dot file.  Each target becomes a rectangle and dependencies  between targets are shown.  The instructions for using it are a bit old  and only apply to Java 1.3 and 1.4.  They don't work on Java 5/6  without modification.  The website lists a "to do" for adding support  for Ant 1.6's import and subant features.  Similarly, 1.7 features  aren't supported yet.  Ant2Dot is good for simple build files, but  doesn't scale up to handle use advanced features.  Running was as simple  as downloading a stylesheet and running the command: <pre>C:\j2re1.4.2_03\bin\java org.apache.xalan.xslt.Process<br />			-IN build.xml -XSL ant2dot.xsl -OUT build.dot</pre> Output of JavaRanch's book promotion pick a winner dependency structure  and a contrived sample: <br /> <img src="http://www.javaranch.com/journal/200711/resources/ant2dot-winners.gif" height="294" width="613"  alt="" /> <img src="http://www.javaranch.com/journal/200711/resources/ant2dot-sample.gif" height="130" width="290"  alt="" /> </li><li> <u>Vizant</u> - Vizant is a Java library that creates a .dot file by  using a SAX parser on your Ant build file.  Each target becomes an oval  and dependencies between targets are shown.  Vizant supports antcalls  and allows you to drill down to generate only part of the build tree.   You can also drill down to show part of your build tree.  Vizant was  easy to use.  I wanted the dependency ordering so continued looking for a  library to meet my needs.  In order to run Vizant, you need to download  a jar containing the source and build it using Ant.  They provide the  build.xml to do so.  Since this is a library for Ant documentation, it  is reasonable to assume people know how to run Ant.  You also call it  through a simple Ant build file: <pre>&lt;?xml version="1.0"?&gt;<br />&lt;project name="Vizant" basedir="." default="vizant"&gt;<br />	&lt;taskdef name="vizant"<br />		classname="net.sourceforge.vizant.Vizant"<br />		classpath="build/vizant.jar" /&gt;<br /><br />	&lt;target name="vizant"&gt;<br />		&lt;vizant antfile="build.xml" outfile="build.dot" uniqueref="true" /&gt;<br />	&lt;/target&gt;<br /><br />&lt;/project&gt;</pre> Output of JavaRanch's book promotion pick a winner dependency structure  and a contrived sample: <br /> <img src="http://www.javaranch.com/journal/200711/resources/vizant-winners.gif" height="274" width="685"  alt="" /> <img src="http://www.javaranch.com/journal/200711/resources/vizant-sample.gif" height="130" width="365"  alt="" /> </li><li> <u>Grand</u> - Grand is also a Java library that creates a .dot file.   It takes a different approach and actually creates the Ant directory  structure using Ant's Java libraries.  It can support anything in your  classpath including ant-contrib and Ant 1.6's import feature.  The logic  doesn't capture the subtleties of Ant-Contrib like the forEach loop  though.  The graph is a bit more detailed.  The default target is a  yellow hexagon.  Targets with a description are marked in blue so you  can show entry points.  The remaining targets are shown as ovals.  You  can also drill down to show part of your build tree. You can use a Grand  UI tool instead of the dot file, but  I wasn't able to get the UI.   Like Ant2Dot, dependencies are numbered.  Grand was as easy to use as  Vizant.  They provide you with a jar for download.  You call it through a  simple Ant build file adding any other jars used to the classpath: <pre>&lt;?xml version="1.0"?&gt;<br />&lt;project name="Grand" basedir="." default="grand"&gt;<br /><br />	&lt;typedef resource="net/ggtools/grand/antlib.xml" classpath="grand.jar" /&gt;<br /><br />	&lt;target name="grand"&gt;<br />		&lt;grand output="grand-build.dot" buildfile="build.xml" /&gt;<br />	&lt;/target&gt;<br /><br />&lt;/project&gt;</pre> Output of JavaRanch's book promotion pick a winner dependency structure  and a contrived sample: <br /> <img src="http://www.javaranch.com/journal/200711/resources/grand-winners.gif" height="281" width="672"  alt="" /> <img src="http://www.javaranch.com/journal/200711/resources/grand-sample.gif" height="130" width="328"  alt="" /> </li></ol>  <div align="center"> <strong>Comparison of visualization tools</strong> <table border="1"> <tbody><tr><th>Tool</th><th>Shows dependency ordering</th><th>Flags  default target</th><th>Flags main targets</th></tr> <tr align="center"><td><a href="http://ant2dot.sourceforge.net/">Ant2Dot</a></td><td>Yes</td><td>Yes</td><td>No</td></tr> <tr align="center"><td><a href="http://vizant.sourceforge.net/">Vizant</a></td><td>No</td><td>No</td><td>No</td></tr> <tr align="center"><td><a href="http://www.ggtools.net/grand">Grand</a></td><td>Yes</td><td>Yes</td><td>Yes</td></tr> </tbody></table> </div>   </div> </div><img src ="http://www.blogjava.net/zhyiwww/aggbug/354769.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2011-07-21 11:57 <a href="http://www.blogjava.net/zhyiwww/archive/2011/07/21/354769.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过sed删除java文件中的所有注释</title><link>http://www.blogjava.net/zhyiwww/archive/2011/01/31/343806.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Mon, 31 Jan 2011 05:56:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2011/01/31/343806.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/343806.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2011/01/31/343806.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/343806.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/343806.html</trackback:ping><description><![CDATA[<div>java文件中的注释通常是如下格式：</div>
<div>/*</div>
<div>*</div>
<div>*</div>
<div>*/</div>
<div>或者是如下格式</div>
<div>//</div>
<div>//</div>
<div>//</div>
<div>那么如何一次删除所有java文件中的所有注释呢？</div>
<div><strong>find . -name *.java -exec sed &nbsp;-e '/\*/d' -e '/\/\//d' -e '/^\s*$/d' {} \;</strong></div>
<div>通过sed的三次匹配操作，进行删除操作。最后一个操作删除所有的空行。</div>
<div>以上操作，只做删除操作，并不修改文件。如果想直接对文件内容操作，可以用：</div>
<div>
<meta http-equiv="content-type" content="text/html; charset=utf-8" /><strong>find . -name *.java -exec sed -i &nbsp;-e '/\*/d' -e '/\/\//d' -e '/^\s*$/d' {} \;&nbsp;</strong></div>
<div><strong>-i参数可以直接把改变写入到文件中去。</strong></div>
<div><strong><br />
</strong></div>
<img src ="http://www.blogjava.net/zhyiwww/aggbug/343806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2011-01-31 13:56 <a href="http://www.blogjava.net/zhyiwww/archive/2011/01/31/343806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SVN的分支创建和合并</title><link>http://www.blogjava.net/zhyiwww/archive/2010/12/30/342018.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Thu, 30 Dec 2010 11:20:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/12/30/342018.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/342018.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/12/30/342018.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/342018.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/342018.html</trackback:ping><description><![CDATA[<p><br />
SVN项目结构通常如下：<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/zhyiwww/svn_pro_struct.jpg" border="0" height="165" width="440" /><br />
<br />
【1】创建分支比较简单<br />
不做详细说明<br />
假如创建后的分支如下图所示：<br />
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/zhyiwww/svn/svn_branches.jpg" border="0" height="522" width="806" /><br />
<br />
注意点：<br />
（1）可以在trunk上创建分支<br />
（2）可以在分支上创建分支<br />
<br />
【2】合并分支<br />
合并分支相对来说麻烦一些，一些关键的问题要搞清楚。<br />
注意点：<br />
（1）<span style="color: red;"><strong>当前的working copy 一定是合并目标（务必切记）<br />
</strong></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;否则，不能合并成功<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;比如：你想从分支V0.0.1合并到trunk 4207上，那么，你的当前工作目录一定要是trunk<br />
（2）当前工作目录的提交只能提交到对应的分支<br />
（3）分支下的分支不能合并到trunk上<br />
（4）分支合并后，需要提交一次才能使合并有效完成<br />
</p>
<img src ="http://www.blogjava.net/zhyiwww/aggbug/342018.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-12-30 19:20 <a href="http://www.blogjava.net/zhyiwww/archive/2010/12/30/342018.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ant+Clover异常的解决方法</title><link>http://www.blogjava.net/zhyiwww/archive/2010/12/01/339466.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Wed, 01 Dec 2010 00:55:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/12/01/339466.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/339466.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/12/01/339466.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/339466.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/339466.html</trackback:ping><description><![CDATA[在使用ant+clover的时候，出现了如下异常：<br />
BUILD FAILED<br />
com.atlassian.clover.registry.NoSuchRegistryException: Clover registry file "/tmp/clover-db/ant-coverage.db" does not exist, cannot be read or is a directory. <br />
Please ensure Clover has instrumented your source files. <br />
You may need to remove existing .class files for this to occur.<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.CloverDatabase.&lt;init&gt;(CloverDatabase.java:82)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.CloverDatabase.&lt;init&gt;(CloverDatabase.java:60)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.reporters.CloverReportConfig.getCoverageDatabase(CloverReportConfig.java:329)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.reporters.Current.getCoverageDatabase(Current.java:126)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.reporters.xml.XMLReporter.&lt;init&gt;(XMLReporter.java:52)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.reporters.CloverReporter.buildReporter(CloverReporter.java:70)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.tasks.CloverReportTask.generateReports(CloverReportTask.java:428)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.tasks.CloverReportTask.cloverExecute(CloverReportTask.java:385)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.tasks.CloverHtmlReportTask.cloverExecute(CloverHtmlReportTask.java:108)<br />
&nbsp;&nbsp; &nbsp;at com.cenqua.clover.tasks.AbstractCloverTask.execute(AbstractCloverTask.java:55)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br />
&nbsp;&nbsp; &nbsp;at java.lang.reflect.Method.invoke(Method.java:616)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Task.perform(Task.java:348)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Target.execute(Target.java:357)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Target.performTasks(Target.java:385)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Project.executeTarget(Project.java:1306)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Project.executeTargets(Project.java:1189)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Main.runBuild(Main.java:758)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.Main.startAnt(Main.java:217)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)<br />
<br />
Total time: 56 seconds<br />
<br />
原因是没有生成clover的库文件。<br />
解决的方法是：<br />
ant with.clover&nbsp; build.clean build.compile junit.test cactus.test<br />
需要重新编译生成clover库文件。<br />
这样就生成库文件了。<br />
ant clover.html<br />
就可以生成报告了。<br />
<br />
clover的使用，有一个非常重要的注意点:<br />
<u><span style="background-color: #cfc8ff;">The &lt;clover-setup&gt; task, must be called before compiling the sources. If the "with.clover" target is not called before "code" (compile) in the same invocation of Ant, the effect of clover-setup will lost. i.e. javac does not know to use the Clover compiler to instrument your source files before compiling them. It will not create the database and generate class file for clover use, hence clover will not take effect.</span></u><strong><br />
</strong><br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/339466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-12-01 08:55 <a href="http://www.blogjava.net/zhyiwww/archive/2010/12/01/339466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中什么时候使用finalize()方法</title><link>http://www.blogjava.net/zhyiwww/archive/2010/11/26/339105.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Fri, 26 Nov 2010 02:12:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/11/26/339105.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/339105.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/11/26/339105.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/339105.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/339105.html</trackback:ping><description><![CDATA[在java中，垃圾回收不需要我们自己执行，而是由系统自动执行。<br />
这一点给了我们发开发人员省了不少心，但是finalize()方法一直是个困惑。<br />
虚拟机在执行垃圾回收之前都会执行对象的finalize(),那么finalize()到底有什么用呢？<br />
其实finalize()主要是给其他调用而创建的空间在对象回收时页同步回收而设置的。<br />
比如，你调用了C语言，使用了mallow()开辟了一段内存空间。在你释放java对象的时候，虚拟机只能释放java对象占用的空间，而不能释放C开辟的内存空间，所你你在释放此对象之前要先回收你在C语言中开辟的空间。<br />
这各时候才用到finalize()方法。<br />
平时的时候不要随便使用finalize()方法。<br />
<br />
以上理解是《java编程思想中的理论》，详细深入的理解请参考此书 。<br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/339105.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-11-26 10:12 <a href="http://www.blogjava.net/zhyiwww/archive/2010/11/26/339105.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu环境下ant的内存配置</title><link>http://www.blogjava.net/zhyiwww/archive/2010/11/19/338472.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Fri, 19 Nov 2010 04:54:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/11/19/338472.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/338472.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/11/19/338472.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/338472.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/338472.html</trackback:ping><description><![CDATA[配置原因：<br />
在使用ant编译系统时由于消耗内存较大，出现内存溢出异常。<br />
<br />
在ubuntu下配置方法：<br />
【1】创建ant.conf<br />
#touch /etc/ant.conf<br />
<br />
【2】添加内存配置<br />
#vim /etc/ant.conf<br />
添加如下内容:<span><br />
<br />
ANT_OPTS=<span>"-Xms256m
-Xmx512m"</span> <br />
&nbsp;<br />
</span><br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/338472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-11-19 12:54 <a href="http://www.blogjava.net/zhyiwww/archive/2010/11/19/338472.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> tomcat下basic授权的访问配置</title><link>http://www.blogjava.net/zhyiwww/archive/2010/09/17/332262.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Fri, 17 Sep 2010 01:55:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/09/17/332262.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/332262.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/09/17/332262.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/332262.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/332262.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; <br />
tomcat下basic授权的访问配置<br />
【1】把下面的代码放到你在自己项目的&lt;web-app&gt;下面<br />
<br />
&lt;security-constraint&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;web-resource-collection&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;web-resource-name&gt;Entire Application&lt;/web-resource-name&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &lt;/web-resource-collection&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;!-- NOTE: This role is not present in the default users file --&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;auth-constraint&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;role-name&gt;user&lt;/role-name&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/auth-constraint&gt;<br />
<br />
&nbsp;&nbsp; &nbsp;&lt;/security-constraint&gt;<br />
<br />
&nbsp;&nbsp; &nbsp;&lt;!-- Define the Login Configuration for this Application --&gt;<br />
&nbsp;&nbsp; &nbsp;&lt;login-config&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;auth-method&gt;BASIC&lt;/auth-method&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;realm-name&gt;TEST ACCESS CONTROL&lt;/realm-name&gt;<br />
&nbsp;&nbsp; &nbsp;&lt;/login-config&gt; <br />
<br />
【2】在tomcat-user.xml里面，添加如下代码<br />
&lt;tomcat-users&gt;<br />
&nbsp; &lt;role rolename="user"/&gt;<br />
&nbsp; &lt;user username="xyz" password="xyz" roles="user"/&gt;<br />
&lt;/tomcat-users&gt;<br />
【3】重启tomcat就可以了<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/332262.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-09-17 09:55 <a href="http://www.blogjava.net/zhyiwww/archive/2010/09/17/332262.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu+svn+apache+trac配置</title><link>http://www.blogjava.net/zhyiwww/archive/2010/07/26/327137.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Mon, 26 Jul 2010 06:05:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/07/26/327137.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/327137.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/07/26/327137.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/327137.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/327137.html</trackback:ping><description><![CDATA[系统环境 ubuntu 10.04<br />
[1]安装apache<br />
[2]安装svn<br />
[3]配置apache+svn<br />
保证svn能通过http正常访问。<br />
Ubuntu下SVN+apache的配置请参阅<a href="http://www.blogjava.net/zhyiwww/archive/2009/07/23/288034.html">http://www.blogjava.net/zhyiwww/archive/2009/07/23/288034.html</a><br />
<br />
配置trac<br />
[4]安装trac<br />
aptitude install trac<br />
<br />
[5]创建trac目录，并初始化trac项目<br />
#cd /var/www<br />
#mkdir trac<br />
#trac-admin trac initenv<br />
&gt;<br />
.....<br />
&gt;[svn]<br />
....<br />
&gt;SVN reposititory <br />
&gt; 输入你的SVN reposititory目录<br />
......<br />
<br />
[6]配置trac+apache<br />
此处用虚拟主机来实现<br />
配置如下<br />
# vim /etc/apache2/posts.conf<br />
添加<br />
## trac<br />
NameVirtualHost *:8001<br />
Listen 8001<br />
<br />
#touch /etc/apache2/sites-available/trac<br />
#vim /etc/apache2/sites-available/trac<br />
添加如下内容：<br />
&lt;VirtualHost *:8001&gt;<br />
<br />
DocumentRoot /var/www<br />
&nbsp; &lt;Location /&gt;<br />
&nbsp;&nbsp;&nbsp; SetHandler mod_python<br />
&nbsp;&nbsp;&nbsp; PythonInterpreter main_interpreter<br />
&nbsp;&nbsp;&nbsp; PythonHandler trac.web.modpython_frontend<br />
&nbsp;&nbsp;&nbsp; PythonOption TracEnv /var/www/trac<br />
&nbsp;&nbsp;&nbsp; PythonOption TracUriRoot /<br />
&nbsp; &lt;/Location&gt;<br />
<br />
&lt;/VirtualHost&gt;<br />
<br />
<br />
[7]修改访问权限<br />
#chown root:www-data /var/www/trac<br />
#chmod -R g+w /var/www/trac/db/<br />
<br />
[8]重启apache<br />
# /etc/init.d/apache2 resatart<br />
<br />
[9]访问验证<br />
访问http://localhost:8001/,如果能看到trac的页面，就说明配置成功。<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/327137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-07-26 14:05 <a href="http://www.blogjava.net/zhyiwww/archive/2010/07/26/327137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux环境apache多端口配置虚拟主机的方法</title><link>http://www.blogjava.net/zhyiwww/archive/2010/05/24/321742.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Mon, 24 May 2010 08:50:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/05/24/321742.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/321742.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/05/24/321742.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/321742.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/321742.html</trackback:ping><description><![CDATA[Linux(Ubuntu)<br />
默认情况下，linux上apache使用的<br />
默认文档目录是：/var/www<br />
默认端口是：80<br />
<br />
如果想发布自己的一个系统资源目录，可以使用下面的方法,执行如下命令：<br />
<br />
(1)添加监听端口<br />
#cd /etc/apache2<br />
#vim ports.conf<br />
文件添加：<br />
<strong>NameVirtualHost *:8000<br />
Listen 8000<br />
</strong><br />
(2)配置虚拟目录<br />
#cd /etc/apache2/sites-available<br />
#cp default default-me<br />
#vim default-me<br />
文件内容如下：<br />
<br />
&lt;VirtualHost *:<strong>8000</strong>&gt;<br />
&nbsp;&nbsp;&nbsp; ServerAdmin webmaster@localhost<br />
<br />
&nbsp;&nbsp;&nbsp; DocumentRoot <strong>/wwwroot</strong><br />
&nbsp;&nbsp;&nbsp; &lt;Directory <strong>/</strong>&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Options FollowSymLinks<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; AllowOverride None<br />
&nbsp;&nbsp;&nbsp; &lt;/Directory&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;Directory <strong>/wwwroot/</strong>&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Options Indexes FollowSymLinks MultiViews<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; AllowOverride None<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Order allow,deny<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; allow from all<br />
&nbsp;&nbsp;&nbsp; &lt;/Directory&gt;<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; ErrorLog /var/log/apache2/error.log<br />
<br />
&nbsp;&nbsp;&nbsp; # Possible values include: debug, info, notice, warn, error, crit,<br />
&nbsp;&nbsp;&nbsp; # alert, emerg.<br />
&nbsp;&nbsp;&nbsp; LogLevel warn<br />
<br />
&nbsp;&nbsp;&nbsp; CustomLog /var/log/apache2/access.log combined<br />
<br />
&lt;/VirtualHost&gt;<br />
粗体部分是关键点。<br />
<br />
(3)发布站点<br />
<br />
# ln -s /etc/apache2/sites-available/default-me /etc/apache2/sites-enabled/001-default<br />
<br />
(4)重启服务<br />
<br />
#/etc/init.d/apache2 restart<br />
<br />
(5)测试<br />
http://localhost:8000/<br />
如果能够正常访问就说明配置正确了。<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/321742.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-05-24 16:50 <a href="http://www.blogjava.net/zhyiwww/archive/2010/05/24/321742.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Myeclipse 8/8.5 subclipse插件的安装和配置</title><link>http://www.blogjava.net/zhyiwww/archive/2010/05/21/321522.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Fri, 21 May 2010 02:50:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/05/21/321522.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/321522.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/05/21/321522.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/321522.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/321522.html</trackback:ping><description><![CDATA[<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8" />
<title></title>
<meta name="GENERATOR" content="OpenOffice.org 3.2  (Unix)" />
<style type="text/css">
<!-- @page { margin: 2cm }
P { margin-bottom: 0.21cm }
-->
</style>
<p style="margin-bottom: 0cm;"><strong><font size="4">通常，我们可以用update来直接安装。但是myeclipse限制了中国区的下载和更新。所以我们只能用插件配置的方法来实现。</font></strong></p>
<p style="margin-bottom: 0cm;"><strong><font size="4">方法参考自<a href="http://blog.csdn.net/jackpk/archive/2010/05/13/5587633.aspx">http://blog.csdn.net/jackpk/archive/2010/05/13/5587633.aspx</a></font></strong></p>
<p style="margin-bottom: 0cm;"><strong><font size="4">具体配置方法如下：<br />
</font></strong></p>
<p style="margin-bottom: 0cm;"><strong><font size="4">安装</font><font face="DejaVu Serif, serif"><font size="4">subclipse,
SVN </font></font></strong><strong><font size="4">插件</font></strong><font size="4">
</font><font face="DejaVu Serif, serif"><font size="4"><br />
1</font></font><font size="4">、从官网下载</font><font face="DejaVu Serif, serif"><font size="4">site-1.6.9.zip</font></font><font size="4">文件</font><font face="DejaVu Serif, serif"><font size="4">,</font></font><font size="4">网址
是</font><font face="DejaVu Serif, serif"><font size="4">:subclipse.tigris.org,
<br />
<br />
2</font></font><font size="4">、从中解压出</font><font face="DejaVu Serif, serif"><font size="4">features</font></font><font size="4">与</font><font face="DejaVu Serif, serif"><font size="4">plugins</font></font><font size="4">文件夹，复制到 </font><font face="DejaVu Serif, serif"><font size="4">/opt/MyEclipse/myPlugin/svn</font></font><font size="4">里面，其它的</font><font face="DejaVu Serif, serif"><font size="4">*.xml</font></font><font size="4">文件不要。
</font><font face="DejaVu Serif, serif"><font size="4"><br />
<br />
3</font></font><font size="4">、</font><span style="background: none repeat scroll 0% 0% #99ccff;"><font size="4">在</font><font face="DejaVu Serif, serif"><font size="4">/opt/MyEclipse/MyEclipse8.5/dropins</font></font></span><span style="background: none repeat scroll 0% 0% #99ccff;"><font size="4">下新建文件</font><font face="DejaVu Serif, serif"><font size="4">svn.link,</font></font></span><span style="background: none repeat scroll 0% 0% #99ccff;"><font size="4">内容是</font><font face="DejaVu Serif, serif"><font size="4">:path=/opt/MyEclipse/myPlugin/svn
</font></font></span><span style="background: none repeat scroll 0% 0% #99ccff;"><font size="4">保存</font></span><font size="4">。
</font><font face="DejaVu Serif, serif"><font size="4"><br />
<br />
4</font></font><font size="4">、
删除</font><font face="DejaVu Serif, serif"><font size="4">/opt/MyEclipse/</font></font><span style="background: none repeat scroll 0% 0% #99ccff;"><font face="DejaVu Serif, serif"><font size="4">MyEclipse8.5</font></font></span><font face="DejaVu Serif, serif"><font size="4">/configuration/org.eclipse.update</font></font><font size="4">文件夹
</font><font face="DejaVu Serif, serif"><font size="4"><br />
<br />
5</font></font><font size="4">、
重启</font><font face="DejaVu Serif, serif"><font size="4">myeclipse</font></font><font size="4">就一切正常了。
</font>
</p>
<img src ="http://www.blogjava.net/zhyiwww/aggbug/321522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-05-21 10:50 <a href="http://www.blogjava.net/zhyiwww/archive/2010/05/21/321522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ubuntu下Jfreechart输出图片中文乱码问题的解决方法</title><link>http://www.blogjava.net/zhyiwww/archive/2010/05/18/321273.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Tue, 18 May 2010 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/05/18/321273.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/321273.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/05/18/321273.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/321273.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/321273.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 产生原因：            因为你引用了Ubuntu系统没有或者不支持的字体。比如：   Fontf = new Font("宋体",Font.PLAIN,12);但是系统里面没有&#8220;宋体&#8221;支持。所以就产生了乱码。                            解决方法   ...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhyiwww/archive/2010/05/18/321273.html'>阅读全文</a><img src ="http://www.blogjava.net/zhyiwww/aggbug/321273.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-05-18 14:29 <a href="http://www.blogjava.net/zhyiwww/archive/2010/05/18/321273.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle Blob字段的乱码问题</title><link>http://www.blogjava.net/zhyiwww/archive/2010/04/21/318943.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Wed, 21 Apr 2010 03:10:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/04/21/318943.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/318943.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/04/21/318943.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/318943.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/318943.html</trackback:ping><description><![CDATA[问题：<br />
在使用oracle Blob字段存储大字符串时，读取初来的字符串经常出现乱码问题。<br />
<br />
背景：<br />
1.oracle数据库服务器系统使用的是UTF-8编码或者是AL32UTF8编码<br />
2.在Web应用中已经将请求编码设置为UTF-8编码<br />
3二进制数据的取得<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Blob blogObj = rst.getBlob("CONTENT");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(blogObj!=null){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; byte[] content = blogObj.getBytes(1, (int) blogObj.length());<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;<strong> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; news.setContent(new String(content));</strong><br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (UnsupportedEncodingException e) {<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; <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; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
乱码问题的解决方法：<br />
&nbsp;&nbsp;&nbsp;<strong> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; news.setContent(new String(content，&#8220;UTF-8&#8221;));</strong><br />
<br />
之后就不会出现乱码问题。<br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/318943.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-04-21 11:10 <a href="http://www.blogjava.net/zhyiwww/archive/2010/04/21/318943.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多线程频繁操作MSSQL导致java.net.BindException异常的解决方法</title><link>http://www.blogjava.net/zhyiwww/archive/2010/04/14/318245.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Wed, 14 Apr 2010 03:46:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/04/14/318245.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/318245.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/04/14/318245.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/318245.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/318245.html</trackback:ping><description><![CDATA[现象：<br />
[1]多线程启动频繁操作MSSQL，抛出<br />
<br />
<strong>到主机&nbsp; 的 TCP/IP 连接失败。 java.net.BindException: Address already in use: connect
</strong><br />
<br />
[2]在服务器上，执行netstat -a，可以看到很多TCP&nbsp; TIME_WAIT<br />
很多端口被占用<br />
类似下面的：<br />
TCP&nbsp;&nbsp;&nbsp; 127.0.0.1:1025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:1433&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIME_WAIT<br />
TCP&nbsp;&nbsp;&nbsp; 127.0.0.1:1026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:1433&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIME_WAIT<br />
TCP&nbsp;&nbsp;&nbsp; 127.0.0.1:1027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:1433&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIME_WAIT<br />
TCP&nbsp;&nbsp;&nbsp; 127.0.0.1:1028&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:1433&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIME_WAIT<br />
...... <br />
TCP&nbsp;&nbsp;&nbsp; 127.0.0.1:4998&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:1433&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIME_WAIT<br />
TCP&nbsp;&nbsp;&nbsp; 127.0.0.1:4999&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:1433&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIME_WAIT<br />
TCP&nbsp;&nbsp;&nbsp; 127.0.0.1:5000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:1433&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIME_WAIT<br />
<br />
开始，我跑2个线程都有问题，过一会程序就抛上面的异常。<br />
<br />
我现在用了一个可行的方案，不是最好的方案。<br />
两步操作：<br />
[1]通过修改注册表<br />
<br />
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters:<br />
添加或者修改下面两项<br />
MaxUserPort&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = dword:00004e20 (20,000 decimal)<br />
TcpTimedWaitDelay = dword:0000001e (30 decimal)<br />
<br />
我的值设置<br />
MaxUserPort值修改为十进制60000<br />
TcpTimedWaitDelay值修改为十进制10<br />
<br />
MaxUserPort是最大的可用端口，最大值也就是65535了<br />
TcpTimedWaitDelay就是默认的TimeWait时间，默认是30，改小了，可以提高响应速度。<br />
<br />
经过实践，修改此两项参数是很有效的方法。<br />
<br />
[2]修改程序<br />
在对线程控制上，需要频繁对数据库操作的地方，实现让线程休眠一段时间 <br />
<br />
<br />
for(int i = 0;i&lt;100000;i++){<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; TestThread t = new TestTread();//频繁对数据库操作<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; t.start(); &nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.sleep(2000);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (InterruptedException e) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
<br />
原因分析：<br />
JDBC Connection 关闭后，释放了对数据库连接的资源，但是对与服务器的Socket连接并没有完全释放。TCP在处理一个新的请求的时候，会创建新的连接，TIME_WAIT状态的连接在4分钟后释放。所以，如果在4分钟内就把连接端口资源用完的话，就会出现上面的异常。如果4分钟后，前面用去的端口得到释放，取得和释放达到一个平衡，就不会再出现此异常了。<br />
<br />
默认的MaxUserPort是5000，这个值对于多线程来说，很容易就达到了。所以，如果线程跑的多，很容易就跑死了。<br />
<br />
根本解决：<br />
还是要从程序上下功夫。<br />
[1]避免频繁操作问题<br />
如果是检索，不要一个一个检索，一次检索到列表里面再进行处理。<br />
如果数据量很大，那就用分页操作进行处理。<br />
<br />
如果是其他的操作，添加，删除，修改的话，就可以使用批量操作来进行。这样，可以少去频繁取连接。就可以避免上面的问题。<br />
<br />
[2]资源释放要快<br />
数据库资源要及时释放。<br />
<br />
包括Resulset,Statement,Connection<br />
要及时关闭<br />
<br />
如果数据库操作特别频繁，可以考虑使用连接共用。<br />
这样，虽然连接占用的时间长点，但是，不会出现上面的问题。<br />
在数据导入的程序里面还是很有用的。<br />
<br />
[3]可以考虑使用连接池来提升系统共享上的性能。<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/318245.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-04-14 11:46 <a href="http://www.blogjava.net/zhyiwww/archive/2010/04/14/318245.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP+Servlet+Oracle系统乱码问题解决方法</title><link>http://www.blogjava.net/zhyiwww/archive/2010/03/29/316820.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Mon, 29 Mar 2010 05:58:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/03/29/316820.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/316820.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/03/29/316820.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/316820.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/316820.html</trackback:ping><description><![CDATA[配置和方法<br />
统一使用UTF-8编码<br />
[1]Oracle字符编码集<br />
oracle服务器端的编码选择AL32UTF8，如果安装的时候没有选择或者不是使用的AL32UTF8,那么就需要手动修改oracle系统的编码为<br />
UTF-8.<br />
<br />
<br />
[2]在web应用程序中添加EncodingFilter<br />
设置<br />
request.setCharacterEncoding("UTF-8");<br />
<br />
[3]设置tomcat编码<br />
&nbsp;&nbsp;&nbsp; &lt;Connector port="8080" protocol="HTTP/1.1" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; connectionTimeout="20000" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; redirectPort="8443" URIEncoding="UTF-8"/&gt;<br />
<br />
[4]程序<br />
通过以上的设置，在程序中，就不需要进行编码的转换，直接取得的就是UTF-8的编码，可以直接存入数据库。<br />
从数据库中取出也不会出现乱码问题了。<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/316820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-03-29 13:58 <a href="http://www.blogjava.net/zhyiwww/archive/2010/03/29/316820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web开发多资源配置文件的读取实现</title><link>http://www.blogjava.net/zhyiwww/archive/2010/03/20/316031.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Sat, 20 Mar 2010 10:20:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/03/20/316031.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/316031.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/03/20/316031.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/316031.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/316031.html</trackback:ping><description><![CDATA[<br />
解决开发中多用户修改消息，或者多用户修改配置文件的冲突问题。<br />
注意在粗体部分实现一次将所有的配置资源文件都读取到内存中去。任何一个用户只需要自己舔加自己的配置文件就可以了。<br />
最后统一在实现配置文件的整合。<br />
<br />
<br />
写一个BaseHttpServlet:<br />
<br />
package base.servlet;<br />
<br />
import java.io.File;<br />
import java.io.FileInputStream;<br />
import java.io.FileNotFoundException;<br />
import java.io.FilenameFilter;<br />
import java.io.IOException;<br />
import java.io.PrintWriter;<br />
import java.net.URL;<br />
import java.util.List;<br />
import java.util.Properties;<br />
<br />
import javax.servlet.RequestDispatcher;<br />
import javax.servlet.ServletException;<br />
import javax.servlet.http.HttpServlet;<br />
import javax.servlet.http.HttpServletRequest;<br />
import javax.servlet.http.HttpServletResponse;<br />
<br />
import org.apache.log4j.Logger;<br />
<br />
/**<br />
&nbsp;* Servlet implementation class CcxHttpServlet<br />
&nbsp;*/<br />
public class BaseHttpServlet extends HttpServlet {<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; private static final long serialVersionUID = -5793303331880998441L;<br />
<br />
&nbsp;&nbsp;&nbsp; protected Logger log = Logger.getLogger(this.getClass());<br />
<br />
&nbsp;&nbsp;&nbsp; private final String MESSAGE_RESOURCE_FILE = "/com/xxx/project/i18/message.properties";<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; protected final static Properties messages = new Properties();<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
<strong>&nbsp;&nbsp;&nbsp; static{<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // TODO you need change according to different project<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String messageDir = "/com/ccx/information/i18";<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; URL url = BaseHttpServlet.class.getResource(messageDir);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; File mf = new File(url.getFile());<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(mf.isDirectory()){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; File[] l = mf.listFiles(new FilenameFilter(){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public boolean accept(File dir, String name) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return name.endsWith(".properties");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int i=0;i&lt;l.length;i++){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; File f = l[i];<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; messages.load(new FileInputStream(f));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (FileNotFoundException e) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</strong><br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @see HttpServlet#HttpServlet()<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; public BaseHttpServlet() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; super();<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* forword to page<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param request<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param response<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param uri<br />
&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,the target page<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @throws ServletException<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @throws IOException<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; protected void farward(HttpServletRequest request,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; HttpServletResponse response, String uri) throws ServletException,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IOException {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; RequestDispatcher dis = request.getRequestDispatcher(uri);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (dis == null) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // to error page<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; output(response, "error : no page found");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; dis.forward(request, response);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* print information to client<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param response<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param notice<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @throws IOException<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; protected void output(HttpServletResponse response, String notice)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throws IOException {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; response.setContentType("text/html");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; response.setCharacterEncoding("UTF-8");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; PrintWriter out = response.getWriter();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; out.print("&lt;span style=\"color:red\"&gt;");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; out.println(notice);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; out.print("&lt;/span&gt;");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; out.flush();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; out.close();<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp; &nbsp;* send redirect to target page<br />
&nbsp;&nbsp;&nbsp; &nbsp;* <br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param response<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @param uri<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @throws ServletException<br />
&nbsp;&nbsp;&nbsp; &nbsp;* @throws IOException<br />
&nbsp;&nbsp;&nbsp; &nbsp;*/<br />
&nbsp;&nbsp;&nbsp; protected void redirect(HttpServletResponse response, String uri)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throws ServletException, IOException {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; response.sendRedirect(uri);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public void init() throws ServletException {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; super.init();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
}<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/316031.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-03-20 18:20 <a href="http://www.blogjava.net/zhyiwww/archive/2010/03/20/316031.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>web中属性文件初始化</title><link>http://www.blogjava.net/zhyiwww/archive/2010/03/20/316022.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Sat, 20 Mar 2010 09:22:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/03/20/316022.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/316022.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/03/20/316022.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/316022.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/316022.html</trackback:ping><description><![CDATA[<br />
PropertiesUtil.java<br />
内容入如下：<br />
<br />
package org.aa.util;<br />
<br />
import java.io.IOException;<br />
import java.io.InputStream;<br />
import java.util.Properties;<br />
<br />
public class PropertiesUtil {<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public static Properties loadProperties(String propertiesFilePath) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Properties p = new Properties();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; InputStream in = PropertiesUtil.class.getClassLoader().getResourceAsStream(propertiesFilePath);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(in==null){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return p ;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; p.load(in);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return p;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
}<br />
<br />
<br />
调用：<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; private static final String DATABASE_CONFIG_FILE =<strong> "/com/company/db.properties";</strong><br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; private static Properties dbProp= PropertiesUtil.loadProperties(DATABASE_CONFIG_FILE);<br />
<br />
&nbsp;&nbsp;&nbsp; private static final String driverStr = "oracle.jdbc.driver.OracleDriver";<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; private static final String defaultIp = dbProp.getProperty("database.server.ip");<br />
&nbsp;&nbsp;&nbsp; private static final String defaultId = dbProp.getProperty("database.server.id");<br />
&nbsp;&nbsp;&nbsp; private static final String defaultPort = dbProp.getProperty("database.server.port");<br />
<br />
&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; private static final String conStr = "jdbc:oracle:thin:@192.168.1.10:1521:orcl";<br />
<br />
&nbsp;&nbsp;&nbsp; private static final StringBuffer buf = new StringBuffer(200);<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; static{<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; buf.append("jdbc:oracle:thin:@");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; buf.append(defaultIp);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; buf.append(":");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; buf.append(defaultPort);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; buf.append(":");<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; buf.append(defaultId);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; private static final String conStr = buf.toString();<br />
<br />
<br />
注意黑体部分的路径，这个是出问题的关键，路径不对就不能取到值。<br />
<br />
这个也可以用在国际化中的属性文件的初始化。<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/316022.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-03-20 17:22 <a href="http://www.blogjava.net/zhyiwww/archive/2010/03/20/316022.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Subversion目录访问权限控制</title><link>http://www.blogjava.net/zhyiwww/archive/2010/03/18/315746.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Thu, 18 Mar 2010 01:32:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/03/18/315746.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/315746.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/03/18/315746.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/315746.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/315746.html</trackback:ping><description><![CDATA[通常，对于subversion只需要控制用户登录访问权限，也就是说，需要用户登录才能访问，而不是开放的Subversion服务。<br />
那么在配置的时候，需要加上<br />
<br />
<strong>&nbsp;&nbsp;&nbsp; AuthType Basic<br />
&nbsp;&nbsp;&nbsp; AuthName "reposity access username and password"<br />
&nbsp;&nbsp;&nbsp; AuthUserFile /etc/subversion/passwd</strong><br />
<br />
[1]添加用户<br />
&nbsp;# htpasswd /etc/subversion/passwd test <br />
[2]修改用户密码<br />
&nbsp;# htpasswd /etc/subversion/passwd test<br />
<br />
有的时候我们需要对用户的访问权限进行细化，不同的用户或者不同组的用户有不同的访问权限。<br />
<br />
&nbsp;AuthzSVNAccessFile /etc/apache2/dav_svn.authz<br />
这个授权文件是用来控制subversion的目录访问权限的。目录的路径可以自己指定。<br />
<br />
具体的方法与你的配置有关，<br />
[3]单Repository的话<br />
上面的配置是<br />
&nbsp; SVNPath /svn/SVN_REPOS/myrepos<br />
<br />
你的权限配置文件如下：<br />
<div style="border: 1px solid #666666;">[groups]<br />
<br />
[/]<br />
<br />
* = rw<br />
<br />
[/wp]<br />
* =<br />
zz = rw</div>
<br />
<br />
关于组配置，省略。<br />
上面的配置的权限如下：<br />
<br />
<table width="500" border="0" cellpadding="2" cellspacing="2">
    <tbody>
        <tr>
            <td>&nbsp;目录</td>
            <td>&nbsp;所有用户</td>
            <td>&nbsp;zz</td>
        </tr>
        <tr>
            <td>&nbsp;/</td>
            <td>&nbsp;rw</td>
            <td>&nbsp;rw</td>
        </tr>
        <tr>
            <td>/wp<br />
            </td>
            <td>&nbsp;无权限</td>
            <td>&nbsp;rw</td>
        </tr>
    </tbody>
</table>
<br />
这里面的权限有继承关系。所以，对于子目录的权限，可以通过上面的方法来进行重新定义。<br />
<br />
[4]多Repositiory<br />
<br />
配置为<br />
&nbsp;&nbsp; <br />
&nbsp; SVNParentPath /svn/SVN_REPOS<br />
<br />
<br />
<div style="border: 1px solid #666666;">[groups]<br />
@dev = tt,yy<br />
<br />
[myproject:/]<br />
<br />
* = rw<br />
<br />
[myproject:/wp]<br />
* =<br />
zz = rw<br />
<br />
<br />
[team:/]<br />
* = rw<br />
<br />
[team:/ims]<br />
*=<br />
zz = r<br />
@dev = rw<br />
</div>
<br />
对应权限如下：<br />
<table width="500" border="0" cellpadding="2" cellspacing="2">
    <tbody>
        <tr>
            <td>&nbsp;Repository</td>
            <td>&nbsp;项目目录</td>
            <td>&nbsp;用户</td>
            <td valign="top">权限</td>
            <td valign="top"><br />
            </td>
        </tr>
        <tr>
            <td valign="top">myproject<br />
            </td>
            <td valign="top">*<br />
            </td>
            <td valign="top">*<br />
            </td>
            <td valign="top">rw</td>
            <td valign="top"><br />
            </td>
        </tr>
        <tr>
            <td valign="top">myproject<br />
            </td>
            <td valign="top">/wp<br />
            </td>
            <td valign="top">*<br />
            </td>
            <td valign="top">无权限<br />
            </td>
            <td valign="top"><br />
            </td>
        </tr>
        <tr>
            <td>&nbsp;myproject</td>
            <td>/wp <br />
            </td>
            <td>&nbsp;zz</td>
            <td valign="top">rw<br />
            </td>
            <td valign="top"><br />
            </td>
        </tr>
        <tr>
            <td>&nbsp;team</td>
            <td>&nbsp;*</td>
            <td>&nbsp;*</td>
            <td valign="top">rw<br />
            </td>
            <td valign="top"><br />
            </td>
        </tr>
        <tr>
            <td>&nbsp;team</td>
            <td>&nbsp;/ims</td>
            <td>&nbsp;*</td>
            <td valign="top">无权限<br />
            </td>
            <td valign="top"><br />
            </td>
        </tr>
        <tr>
            <td valign="top">team<br />
            </td>
            <td valign="top">/ims<br />
            </td>
            <td valign="top">zz<br />
            </td>
            <td valign="top">r<br />
            </td>
            <td valign="top"><br />
            </td>
        </tr>
        <tr>
            <td valign="top">team<br />
            </td>
            <td valign="top">/ims<br />
            </td>
            <td valign="top">@dev(表示组)<br />
            </td>
            <td valign="top">rw<br />
            </td>
            <td valign="top"><br />
            </td>
        </tr>
    </tbody>
</table>
<br />
SubVersion的权限控制大致可以通过上面的方法来实现。<br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/315746.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-03-18 09:32 <a href="http://www.blogjava.net/zhyiwww/archive/2010/03/18/315746.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下SqlDeveloper查询表中文乱码问题的解决方法</title><link>http://www.blogjava.net/zhyiwww/archive/2010/03/05/314575.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Fri, 05 Mar 2010 03:21:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/03/05/314575.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/314575.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/03/05/314575.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/314575.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/314575.html</trackback:ping><description><![CDATA[这个问题实际上是JDK的字体支持和配置的问题。也可以归结为linux系统的字体配置问题。<br />
<br />
以上问题的解决方案如下：<br />
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8" />
<title></title>
<meta name="GENERATOR" content="OpenOffice.org 3.1  (Linux)" />
<style type="text/css">
<!-- @page { margin: 0.79in }
P { margin-bottom: 0.08in }
-->
</style>
<p>laptop:/tmp# <strong>cd
/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/fonts/
</strong></p>
<p style="widows: 0; orphans: 0;">laptop:/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/fonts/#
<font color="#000000"><font face="Liberation Serif, Times New Roman, serif"><font size="3"><span lang="en-US"><strong>mkdir
fallback
</strong></span></font></font></font></p>
<p style="widows: 0; orphans: 0;">laptop:/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/fonts/#
<font color="#000000"><font face="Liberation Serif, Times New Roman, serif"><font size="3"><span lang="en-US"><strong>cd
fallback
</strong></span></font></font></font></p>
<p style="widows: 0; orphans: 0;">laptop:/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/fonts/fallback#
<font color="#000000"><font face="Liberation Serif, Times New Roman, serif"><font size="3"><span lang="en-US"><strong>ln
-s `/usr/share/fonts/fonts/truetype/` .
</strong></span></font></font></font></p>
<p style="widows: 0; orphans: 0;">laptop:/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/fonts/fallback#
<font color="#000000"><font face="Liberation Serif, Times New Roman, serif"><font size="3"><span lang="en-US"><strong>mkfontdir
</strong></span></font></font></font></p>
<p style="widows: 0; orphans: 0;">laptop:/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/fonts/fallback#
<font color="#000000"><font face="Liberation Serif, Times New Roman, serif"><font size="3"><span lang="en-US"><strong>mkfontscale
</strong></span></font></font></font></p>
<p>
</p>
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/314575.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-03-05 11:21 <a href="http://www.blogjava.net/zhyiwww/archive/2010/03/05/314575.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat6多虚拟主机和默认项目的配置</title><link>http://www.blogjava.net/zhyiwww/archive/2010/02/20/313472.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Sat, 20 Feb 2010 09:06:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/02/20/313472.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/313472.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/02/20/313472.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/313472.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/313472.html</trackback:ping><description><![CDATA[准备一个有效域名，比如www.xyz.com.<br />
<br />
编辑$TOMCAT_HOME/conf/server.xml文件<br />
默认HOST配置如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Host name="localhost"&nbsp; appBase="webapps"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unpackWARs="true" autoDeploy="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlValidation="false" xmlNamespaceAware="false"&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- SingleSignOn valve, share authentication between web applications<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Documentation at: /docs/config/valve.html --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Valve className="org.apache.catalina.authenticator.SingleSignOn" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- Access log processes all example.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Documentation at: /docs/config/valve.html --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Host&gt;<br />
<br />
上面的部分是tomcat的原装配置。<br />
<br />
然后，在下面添加你自己的配置：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Host name="www.xyz.com"&nbsp; appBase="webapps-xyz"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unpackWARs="true" autoDeploy="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlValidation="false" xmlNamespaceAware="false"&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Context path="/" reloadable="true" docBase="demo"/&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Host&gt;<br />
<br />
Context的配置，指定了一个默认的启动项目。<br />
在tomcat默认的配置下是ROOT项目,<span style="color: red;">此配置生效，需要删除webapps/ROOT目录或者改为其他的目录名字</span>。<br />
<br />
此时 你用 http://www.xyz.com:8080/就可以访问到demo项目了。<br />
<br />
如果需要配置多个虚拟主机，按照上面的配置就可以了。<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/313472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-02-20 17:06 <a href="http://www.blogjava.net/zhyiwww/archive/2010/02/20/313472.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>事务管理与ThreadLocal</title><link>http://www.blogjava.net/zhyiwww/archive/2010/02/11/312583.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Thu, 11 Feb 2010 07:34:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/02/11/312583.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/312583.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/02/11/312583.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/312583.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/312583.html</trackback:ping><description><![CDATA[通常我们会把事务处理放在业务层。<br />
<br />
[1]引子<br />
<br />
比如:<br />
业务逻辑方法<br />
<br />
public A bussinessMethod(){<br />
<br />
&nbsp;&nbsp; DaoA&nbsp;&nbsp; a = new DaoA();<br />
&nbsp;&nbsp; a.udpate();<br />
<br />
&nbsp;&nbsp; DaoB&nbsp; b = new DaoB();<br />
&nbsp;&nbsp; b.update;<br />
<br />
}<br />
<br />
假设，上面的事务是自动提交的。<br />
那么，我们就可以什么不考虑。但是有一个问题，创建DAO对象的时候两个对象用的是不同的Connection对象。<br />
<br />
再假定我们的取得连接的代码是<br />
<br />
&nbsp;&nbsp;&nbsp; public Connection getConnection(String username, String password)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throws SQLException {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Connection con = DriverManager<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; .getConnection(conStr, username, password);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return con;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
这个方法的一个调用。<br />
<br />
那么如果，我们需要自己控制事务的开始和结束。<br />
如何控制呢。<br />
也许又有了新的方法<br />
<br />
<br />
public A bussinessMethod(){<br />
<br />
&nbsp;&nbsp; DaoA&nbsp;&nbsp; a = new DaoA();<br />
&nbsp;&nbsp; a.beginTx();<br />
&nbsp;&nbsp; a.udpate();<br />
&nbsp;&nbsp;
a.endTx();<br />
&nbsp;&nbsp; a.close();<br />
<br />
&nbsp;&nbsp; DaoB&nbsp; b = new DaoB();<br />
&nbsp;&nbsp;
b.beginTx();<br />
&nbsp;&nbsp; b.update;<br />
&nbsp;&nbsp;
b.endTx();<br />
&nbsp;&nbsp; b.close();<br />
}<br />
<br />
这样我们就控制了事务，并且我们也只有这样才能实现，因为，不同的DAO取得的是不同的Connection对象。<br />
<br />
[2]问题<br />
那么怎么才能实现两个或多个DAO用同一个事务来控制呢？<br />
<br />
首先就要解决一个根本问题，我们在一个事务中，不同的DAO取得的是同一个Connection,这个要怎么实现呢。我们想到了TheadLocal.<br />
<br />
[3]方案<br />
因为当一个业务逻辑要对多个DAO进行处理的时候，此操作属于同一个线程内。所以，我们希望能把此Connection放在线程内，或者和线程有关联。<br />
第一个方案，可以用Map来使现。<br />
就是Map&lt;Thread,Connection&gt;<br />
但是这个map维护起来比较麻烦，如果一直put的话，那么这个map随着系统的运行就会越来越大。<br />
<br />
第二个方案，就是用ThreadLocal<br />
在任何一个线程内都可以用ThreadLocal来保存一个变量的copy,这样，如果此对象存在，就可以直接取用。<br />
如果把Connection存在ThreadLocal也一样。<br />
<br />
所以，在同一个线程内，就可以保证取得到的是同一个Connection.<br />
<br />
<br />
[4]实现<br />
代码<br />
<br />
&nbsp;&nbsp;&nbsp; private static ThreadLocal&lt;Connection&gt; localCon = new ThreadLocal&lt;Connection&gt;();<br />
<br />
&nbsp;&nbsp;&nbsp; public final static Connection getConnection() throws SQLException {<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Connection con = localCon.get();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(con==null||con.isClosed()){<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; con = new OracleJdbcDatasource().getConnection();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; localCon.set(con);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return con;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
<br />
这样就实现了上面的问题。<br />
<br />
<br />
[5]新的事务管理<br />
<br />
public A bussinessMethod(){<br />
<br />
&nbsp;&nbsp; DaoA&nbsp;&nbsp; a = new DaoA();<br />
&nbsp;&nbsp; DaoB&nbsp; b = new DaoB();<br />
<br />
<strong>&nbsp;&nbsp; a.beginTx();</strong><br />
&nbsp;&nbsp; a.udpate();<br />
<br />
&nbsp;&nbsp;
b.beginTx();<br />
&nbsp;&nbsp; b.update;<br />
<br />
<strong>&nbsp;&nbsp; a.endTx();<br />
&nbsp;&nbsp; a.close();<br />
<br />
</strong><strong>// &nbsp; b.endTx();<br />
// &nbsp; b.close();</strong><br />
能实现一样的效果<br />
&nbsp;&nbsp; <br />
}<br />
<br />
<br />
上面的黑体部分，就可以实现对事务的统一管理。<br />
<br />
[6]改进<br />
<br />
上面的方法给人的感觉有点别扭，但是却能实现事务的统一管理。<br />
<br />
我还要继续改进。<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/312583.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-02-11 15:34 <a href="http://www.blogjava.net/zhyiwww/archive/2010/02/11/312583.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库操作的异常捕捉和资源释放</title><link>http://www.blogjava.net/zhyiwww/archive/2010/02/09/312421.html</link><dc:creator>zhyiwww</dc:creator><author>zhyiwww</author><pubDate>Tue, 09 Feb 2010 07:19:00 GMT</pubDate><guid>http://www.blogjava.net/zhyiwww/archive/2010/02/09/312421.html</guid><wfw:comment>http://www.blogjava.net/zhyiwww/comments/312421.html</wfw:comment><comments>http://www.blogjava.net/zhyiwww/archive/2010/02/09/312421.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhyiwww/comments/commentRss/312421.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhyiwww/services/trackbacks/312421.html</trackback:ping><description><![CDATA[通常的操作方法<br />
&nbsp;&nbsp;&nbsp; public List&lt;Category&gt; queryCategory(String queryStr) throws SQLException {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ArrayList&lt;Category&gt; catList = new ArrayList&lt;Category&gt;();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; PreparedStatement pstmt = DBUtil.getConnection().prepareStatement(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; queryStr);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (pstmt == null) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return catList;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ResultSet rst = pstmt.executeQuery();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; while (rst.next()) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Category c = new Category();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; c.setCategoryId(rst.getInt("CATEGORY_ID"));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<em><strong>&nbsp; c.setCategoryName(rst.getString("CATEGORY_NAME"));</strong></em><br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; c.setCategoryParent(rst.getInt("PARENT_ID"));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; catList.add(c);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; rst.close();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pstmt.getConnection().close();<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return catList;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
这种方式是不保险的方式，因为此处并不处理异常，但是不排除会发生异常。<br />
假设在黑体代码部分发生异常，那么下面的代码并不会执行，也就是说，rst,pstmt,con都不会关闭掉。<br />
所以导致的结果是这些资源得不到释放。<br />
<br />
解决的方法，就是在最后用finally去解决问题<br />
<br />
&nbsp;&nbsp;&nbsp; PreparedStatement pstmt = null;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ResultSet rst = null;<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pstmt = this.getPstmt(queryStr);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; rst = pstmt.executeQuery();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; while (rst.next()) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Category c = new Category();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; c.setCategoryId(rst.getInt("CATEGORY_ID"));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; c.setCategoryName(rst.getString("CATEGORY_NAME"));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; c.setCategoryParent(rst.getInt("PARENT_ID"));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; catList.add(c);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (SQLException e) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throw e;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }finally{<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(rst!=null){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; rst.close();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(pstmt!=null){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pstmt.close();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(this.getCon()!=null&amp;&amp;this.getCon().getAutoCommit()){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.getCon().close();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
这样，无论在那个地方发生了异常，都能让资源得到释放。<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/zhyiwww/aggbug/312421.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhyiwww/" target="_blank">zhyiwww</a> 2010-02-09 15:19 <a href="http://www.blogjava.net/zhyiwww/archive/2010/02/09/312421.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>