﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-摆渡人，外婆桥！-随笔分类-JAVA</title><link>http://www.blogjava.net/swingboat/category/6380.html</link><description>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;----只要路选对了，就不怕有多远！</description><language>zh-cn</language><lastBuildDate>Tue, 17 Jul 2007 19:29:49 GMT</lastBuildDate><pubDate>Tue, 17 Jul 2007 19:29:49 GMT</pubDate><ttl>60</ttl><item><title>利用JGroups同步两台server之间的cache。</title><link>http://www.blogjava.net/swingboat/archive/2007/07/16/130565.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Mon, 16 Jul 2007 06:21:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2007/07/16/130565.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/130565.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2007/07/16/130565.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/130565.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/130565.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、需求前段时间做了一个项目，在后台有很多的数据都放入到了cache中了，而且还会对cache中的数据进行更新。如果只有一台server没有任何问题，但是如果考虑到集群负载平衡，连接多个server的时候，就有问题出现了，怎么样才能保证多个server之间cache的同步呢？请看下面的部署图。二、引入JGroupsJGroups是一个可靠的组间通讯工具，进程可以加入一个通讯组，给组内所有的成员...&nbsp;&nbsp;<a href='http://www.blogjava.net/swingboat/archive/2007/07/16/130565.html'>阅读全文</a><img src ="http://www.blogjava.net/swingboat/aggbug/130565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2007-07-16 14:21 <a href="http://www.blogjava.net/swingboat/archive/2007/07/16/130565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有关“+”和“_”的search。</title><link>http://www.blogjava.net/swingboat/archive/2007/05/24/119848.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Thu, 24 May 2007 15:28:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2007/05/24/119848.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/119848.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2007/05/24/119848.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/119848.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/119848.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天下午QA给我报了一个bug，说输入&#8220;f+f&#8221;或者&#8220;f_f&#8221;能够搜索出&#8220;f f&#8221;的结果。看着这bug的描述，心里还想着怎么会呢，模糊查询也不会出现这样的结果啊！赶紧自己输入&#8220;f+f&#8221;和&#8220;f_f&#8221;验证下，结果两次都输出了&#8220;f f&#8221;。由于查询的条件是通过URL后的参数输入的，当我输入&#8220;f+f&#8221;时，发现参数传入到服务端后变成了&#8220;f f&#8221;了，如果是这样，那search的结果是正确的。但为什么输入的参数&#8220;f+f&#8221;怎么会变成了&#8220;f f&#8221;呢？而且在输入参数都通过escape进行编码了。于是上网google了一下，发现escape函数是不会对&#8220;+&#8221;进行编码的，但请求时，web服务器会过滤掉&#8220;+&#8221;这个字符。所以我们必须手工对&#8220;+&#8221;进行编码，把所有的&#8220;+&#8221;都改变为&#8220;%2b&#8221;。修改代码测试，再次输入&#8220;f+f&#8221;，结果不能搜索出&#8220;f f&#8221;的结果了。<br>而对输入&#8220;f_f&#8221;搜索出&#8220;f f&#8221;的结果，主要原因是这个是模糊查询的一种。&#8220;f_f&#8221;表示搜索出含有两个&#8220;f&#8221;字符而且中间有一个字符分隔的，&#8220;f&nbsp; f&#8221;正好满足这个条件，于是被搜索出了。<br>
<img src ="http://www.blogjava.net/swingboat/aggbug/119848.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2007-05-24 23:28 <a href="http://www.blogjava.net/swingboat/archive/2007/05/24/119848.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>synchronized的作用</title><link>http://www.blogjava.net/swingboat/archive/2007/05/08/115882.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Tue, 08 May 2007 03:02:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2007/05/08/115882.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/115882.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2007/05/08/115882.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/115882.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/115882.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: synchronized的作用&nbsp;一、同步方法public synchronized void methodAAA(){//&#8230;.}锁定的是调用这个同步方法的对象测试：a、不使用这个关键字修饰方法，两个线程调用同一个对象的这个方法。目标类：1public&nbsp;class&nbsp;TestThread&nbsp;{2&nbsp;&nbsp;&nbsp;&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/swingboat/archive/2007/05/08/115882.html'>阅读全文</a><img src ="http://www.blogjava.net/swingboat/aggbug/115882.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2007-05-08 11:02 <a href="http://www.blogjava.net/swingboat/archive/2007/05/08/115882.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不同时区之间，时间的转换？</title><link>http://www.blogjava.net/swingboat/archive/2007/04/20/112236.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Fri, 20 Apr 2007 08:24:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2007/04/20/112236.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/112236.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2007/04/20/112236.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/112236.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/112236.html</trackback:ping><description><![CDATA[一、问题描述<br>&nbsp;&nbsp; 当软件需要国际化的时候，我们不得不考虑时间的问题。不同的地方有不同的时区，从而显示的时间是不一样的。而且很多国家在某一段时间还可能会实行夏令时，显示的时间又不一样。为了保证时间的正确性，必须有统一的基线，从而不得不考虑下列时间之间的转换。<br>&nbsp;&nbsp; a、long timeToUTC(time,timezone)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //把给定的时间根据给定的时区转化为UTC<br>&nbsp;&nbsp; b、String UTCToTime(long,timezone)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //把给定的UTC转化为制定时区的时间<br>&nbsp;&nbsp; c、timeToTime(time,timezone1,timezone2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //把给定的时间根据制定的时区转化为另指定时区的时间<br>&nbsp;&nbsp; //考虑到数据的存储，还必须考虑数据库对于时间字段的格式。<br><br>二、解决方法<br>&nbsp;&nbsp; 显示时间的不同，主要原因的是时区不同。如果不考虑自定义时区的问题，JODA包就能很好解决上面的问题，但是如果考虑自定义时区（很多软件由于考虑夏令时，从而增加了自定义时区的功能来设置夏令时），则我们必须自己来写转换函数。<br>&nbsp;&nbsp; a、JODA<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;timeToUTC(String&nbsp;theSourceTime,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;sourceWbxTZID)<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img id=Codehighlighter1_88_559_Open_Image onclick="this.style.display='none'; Codehighlighter1_88_559_Open_Text.style.display='none'; Codehighlighter1_88_559_Closed_Image.style.display='inline'; Codehighlighter1_88_559_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_88_559_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_88_559_Closed_Text.style.display='none'; Codehighlighter1_88_559_Open_Image.style.display='inline'; Codehighlighter1_88_559_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception&nbsp;</span><span id=Codehighlighter1_88_559_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_88_559_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;targDate;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img id=Codehighlighter1_160_338_Open_Image onclick="this.style.display='none'; Codehighlighter1_160_338_Open_Text.style.display='none'; Codehighlighter1_160_338_Closed_Image.style.display='inline'; Codehighlighter1_160_338_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_160_338_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_160_338_Closed_Text.style.display='none'; Codehighlighter1_160_338_Open_Image.style.display='inline'; Codehighlighter1_160_338_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(sourceWbxTZID&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">))&nbsp;</span><span id=Codehighlighter1_160_338_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_160_338_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">UTC<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">mdyFormatter:org.joda.time.format.DateTimeFormatter</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;targDate&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;mdyFormatter.withZone(DateTimeZone.UTC).parseDateTime(theSourceTime);</span><span style="COLOR: #008000">//<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #008000"><img id=Codehighlighter1_345_516_Open_Image onclick="this.style.display='none'; Codehighlighter1_345_516_Open_Text.style.display='none'; Codehighlighter1_345_516_Closed_Image.style.display='inline'; Codehighlighter1_345_516_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_345_516_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_345_516_Closed_Text.style.display='none'; Codehighlighter1_345_516_Open_Image.style.display='inline'; Codehighlighter1_345_516_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_345_516_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_345_516_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;targDate&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;mdyFormatter.withZone(<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTimeZone.forID(convertTimezone(sourceWbxTZID)))<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.parseDateTime(theSourceTime);<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;targDate.getMillis();<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;String&nbsp;UTCToTime(</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;theUTCTime,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;targetWbxTZID)<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img id=Codehighlighter1_653_1012_Open_Image onclick="this.style.display='none'; Codehighlighter1_653_1012_Open_Text.style.display='none'; Codehighlighter1_653_1012_Closed_Image.style.display='inline'; Codehighlighter1_653_1012_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_653_1012_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_653_1012_Closed_Text.style.display='none'; Codehighlighter1_653_1012_Open_Image.style.display='inline'; Codehighlighter1_653_1012_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception&nbsp;</span><span id=Codehighlighter1_653_1012_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_653_1012_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;theSourceTime&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;DateTime(theUTCTime);<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img id=Codehighlighter1_749_840_Open_Image onclick="this.style.display='none'; Codehighlighter1_749_840_Open_Text.style.display='none'; Codehighlighter1_749_840_Closed_Image.style.display='inline'; Codehighlighter1_749_840_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_749_840_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_749_840_Closed_Text.style.display='none'; Codehighlighter1_749_840_Open_Image.style.display='inline'; Codehighlighter1_749_840_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(targetWbxTZID&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">))&nbsp;</span><span id=Codehighlighter1_749_840_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_749_840_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;mdyFormatter.withZone(DateTimeZone.UTC).print(theSourceTime);<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img id=Codehighlighter1_847_1006_Open_Image onclick="this.style.display='none'; Codehighlighter1_847_1006_Open_Text.style.display='none'; Codehighlighter1_847_1006_Closed_Image.style.display='inline'; Codehighlighter1_847_1006_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_847_1006_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_847_1006_Closed_Text.style.display='none'; Codehighlighter1_847_1006_Open_Image.style.display='inline'; Codehighlighter1_847_1006_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_847_1006_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_847_1006_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;mdyFormatter.withZone(<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTimeZone.forID(convertTimezone(targetWbxTZID))).print(<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;theSourceTime);<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br>&nbsp;&nbsp; b、自编写<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img id=Codehighlighter1_0_109_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_109_Open_Text.style.display='none'; Codehighlighter1_0_109_Closed_Image.style.display='inline'; Codehighlighter1_0_109_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_109_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_109_Closed_Text.style.display='none'; Codehighlighter1_0_109_Open_Image.style.display='inline'; Codehighlighter1_0_109_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_109_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**&nbsp;*/</span><span id=Codehighlighter1_0_109_Open_Text><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;*sourceDate：需要转换的日期，此日期必须是居于GMT的时间。<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;*timezone：<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;*gMT：是否是GMT时间<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;*isConsiderDayLight：是否考虑夏令时<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img id=Codehighlighter1_228_568_Open_Image onclick="this.style.display='none'; Codehighlighter1_228_568_Open_Text.style.display='none'; Codehighlighter1_228_568_Closed_Image.style.display='inline'; Codehighlighter1_228_568_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_228_568_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_228_568_Closed_Text.style.display='none'; Codehighlighter1_228_568_Open_Image.style.display='inline'; Codehighlighter1_228_568_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;convert(Date&nbsp;sourceDate,&nbsp;Timezone&nbsp;timezone,&nbsp;</span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000">&nbsp;gMT,&nbsp;</span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000">&nbsp;isConsiderDayLight)&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception&nbsp;</span><span id=Codehighlighter1_228_568_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_228_568_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;gMTOffSet&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)&nbsp;timezone.getGmtOffset();</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">获取偏移量</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;sourceTime&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;sourceDate.getTime();<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id=Codehighlighter1_345_408_Open_Image onclick="this.style.display='none'; Codehighlighter1_345_408_Open_Text.style.display='none'; Codehighlighter1_345_408_Closed_Image.style.display='inline'; Codehighlighter1_345_408_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_345_408_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_345_408_Closed_Text.style.display='none'; Codehighlighter1_345_408_Open_Image.style.display='inline'; Codehighlighter1_345_408_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(gMT)&nbsp;</span><span id=Codehighlighter1_345_408_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_345_408_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;targetTime&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;sourceTime&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;gMTOffSet&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">60</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img id=Codehighlighter1_415_510_Open_Image onclick="this.style.display='none'; Codehighlighter1_415_510_Open_Text.style.display='none'; Codehighlighter1_415_510_Closed_Image.style.display='inline'; Codehighlighter1_415_510_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_415_510_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_415_510_Closed_Text.style.display='none'; Codehighlighter1_415_510_Open_Image.style.display='inline'; Codehighlighter1_415_510_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_415_510_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_415_510_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;targetTime&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;sourceTime&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;(&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;gMTOffSet&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">60</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">北京偏移8个小时，如是：-8*60*1000</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">下面是考虑夏令时</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">16</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif"><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;targetTime;<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;timeToUTC(String&nbsp;theSourceTime,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;sourceWbxTZID)<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img id=Codehighlighter1_660_1006_Open_Image onclick="this.style.display='none'; Codehighlighter1_660_1006_Open_Text.style.display='none'; Codehighlighter1_660_1006_Closed_Image.style.display='inline'; Codehighlighter1_660_1006_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_660_1006_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_660_1006_Closed_Text.style.display='none'; Codehighlighter1_660_1006_Open_Image.style.display='inline'; Codehighlighter1_660_1006_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception&nbsp;</span><span id=Codehighlighter1_660_1006_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_660_1006_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleDateFormat&nbsp;sdf&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;SimpleDateFormat(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">MM/dd/yyyy&nbsp;HH:mm:ss</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sdf.setTimeZone(TimeZone.getTimeZone(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">GMT</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;date</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sdf.parse(theSourceTime);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Timezone&nbsp;timezone</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(Timezone)keyedByWbxTZID.get(String.valueOf(sourceWbxTZID));</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">此函数主要是获取Timezone相关的数据</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">26</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;convert(date,timezone,</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;String&nbsp;UTCToTime(</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;theUTCTime,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;targetWbxTZID)<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img id=Codehighlighter1_1096_1501_Open_Image onclick="this.style.display='none'; Codehighlighter1_1096_1501_Open_Text.style.display='none'; Codehighlighter1_1096_1501_Closed_Image.style.display='inline'; Codehighlighter1_1096_1501_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1096_1501_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1096_1501_Closed_Text.style.display='none'; Codehighlighter1_1096_1501_Open_Image.style.display='inline'; Codehighlighter1_1096_1501_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception&nbsp;</span><span id=Codehighlighter1_1096_1501_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1096_1501_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;date</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date();<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;date.setTime(theUTCTime);<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Timezone&nbsp;timezone</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(Timezone)keyedByWbxTZID.get(String.valueOf(targetWbxTZID));</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">此函数主要是获取Timezone相关的数据</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">33</span><span style="COLOR: #008000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;time</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">convert(date,timezone,</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);&nbsp;<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleDateFormat&nbsp;sdf&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;SimpleDateFormat(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">MM/dd/yyyy&nbsp;HH:mm:ss</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sdf.setTimeZone(TimeZone.getTimeZone(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">GMT</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;sdf.format(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date(time));<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span></div>
<p><br>三、相关的一些时间概念&nbsp; <br>GMT:就是格林威治标准时间的英文缩写，格林威治是伦敦泰晤士河南岸的一个地方，由于从19世纪开始，因为世界各国来往频繁，而欧洲大陆、美洲大陆和亚洲大陆都有各自的时区，所以为免混乱，各国的代表就在1884 年在美国华盛顿召开了国际大会，通过协议选出伦敦的格林威治，作为全球时间的中心点，格林威治标准时间因而诞生。所以有GMT功能的腕表就是说腕表拥有其中的小时表盘可以显示GMT时间。</p>
<p>UTC:短波传送很远，可能经过许多国家、许多不同时区，所以需要有一统时间作标准， 这个标准时间Co-ordinated Universal Time 缩写UTC 或称 UT。过去称为格林威治时间（GMT），虽然有些地方有冬令时间或夏令时间，但UTC时间是不会改的，大家都以它为标准。</p>
<p>DST:Daylight saving time .(夏令时，各个国家开始和结束时间的计算方法是不一样的)<br>美国，加拿大夏令时起止时间：每年3月份第二个星期天到11月份第一个星期天（亚利桑那州、夏威夷、波多黎各、维尔京群岛和美属萨摩亚除外）。</p>
<p>德国、意大利等多数欧洲国家夏令时起止时间：每年3月份最后一个星期天到10月份最后一个星期天。</p>
<p><br>MST:Mountain Standard Time<br>PST:Pacific Standard Time<br>EST:Eastern Standard Time</p>
<p>很多朋友对于美剧官方网站上的时间表达方式不是很理解。<br>这里说明一下，以Prison Break为例：Monday 8/7c<br>它指的是：星期一 东部时间8点 中部时间7点。两地同时播放，不过因为时差问题，钟表上显示的时间有一个小时的差别。<br>尽管官网的播放时间对于美国以外的朋友来说意义不大，不过如果你愿意查出相对应的北京时间，可以使用<a href="http://www.worldtimeserver.com/">http://www.worldtimeserver.com</a> 的服务，我相信国内也有很多类似的时间转换网站，包括google，百度都可以，这里就不再罗嗦了。至少目前来说，美东时间和北京时间相差12小时，也就是说，我们比美东快12个小时。Prison Break的播放时间就是北京时间第二天的早上8点，也就是星期二 8:00AM.</p>
<p>相对于美国，我们国家的时区划分相对简单很多，特别是取消夏令时后，不出国，我们基本上不用考虑时差问题。</p>
<p>美国本土大陆地区采用的时区自东向西为：<br>东岸标准时区 (Eastern Standard Time; EST; UTC-5; R区)，包括大西洋沿岸各州、墨西哥湾及密西西比河以东地区。 <br>中部标准时区 (Central Standard Time; CST; UTC-6; S区)，包括密西西比河沿岸以及以西州份的大部份。 <br>山部标准时区 (Mountain Standard Time; MST; UTC-7; T区), 沿大陆分水岭—洛矶山一线的州份、大盆地及科罗拉多河流淢。 <br>太平洋标准时区 (Pacific Standard Time; PST; UTC-8; U区)，包括太平洋沿岸地区及内华达州。</p>
<p>美国本土大陆地区以外地区采用的时区<br>阿拉斯加标准时区 (Alaska Standard Time; AKST; UTC-9; V区) 包括阿拉斯加州大部份地区。 <br>夏威夷—阿留申时区 (Hawaii-Aleutian Standard Time，非正式：夏威夷标准时 Hawaii Standard Time; HST; UTC-10; W区)，包括夏威夷州及169&#176;30'W以西的阿留申群岛。 </p>
<p>美国属土采用的时区<br>大西洋标准时区 (Atlantic Standard Time; AST, UTC-4; Q区) 包括波多黎各及美属处女岛。 <br>萨摩亚时区 (Samoa Standard Time; UTC-11, X区)包括美属萨摩亚。 <br>查莫罗时区 (Chamorro Standard Time; UTC+10, Zone K)包括关岛及北马里亚纳群岛。</p>
<p>中国的时区：我们使用北京时间，以前称中原标准时间，现在台湾依然使用这个名称，是中国大陆、香港、澳門和台湾的标准时间。在时区划分上，属东八区，比世界协调时早8小时，记为UTC+8。</p>
<p>严格地讲，北京时间并不是北京（东经116&#176;）地方的时间，而是东经120&#176;度地方的地方时间。而北京时间也不是在北京确定的，而是由位于中国版图几何中心位置陕西临潼的中国科学院国家授时中心的9台铯原子钟和2台氢原子钟组通过精密比对和计算实现，并通过卫星与世界各国授时部门进行实时比对。</p>
<p>清光绪28年（公元1902年），中国海关曾制定海岸时，以东经120度之时刻为标准。公元1912年，位于北京的中央观象台将全国分为五个时区，民国28年3月9日中华民国内政部召集标准时间会议，确认1912年划分之时区为中华民国标准时区。分别为:<br>1昆仑时区 UTC+5.5 新疆西部与部分西藏<br>2新藏时区 UTC+6 新疆及西藏<br>3陇蜀时区 UTC+7 中国中部<br>4中原标准时区 UTC+8 中国海岸<br>5长白时区 UTC+9 中国东北<br>1949年之后，中国大陆将&#8220;中原标准时间&#8221;改称&#8220;北京时间&#8221;，并在全国统一使用该时间作为标准时间。台湾则维持&#8220;中原标准时间&#8221;之名称，也有称&#8220;台北时间&#8221;或&#8220;国家标准时间&#8221;。</p>
<p>由于中国大陆全境都采用北京时间作为标准时，因此在中国西部的陕西、甘肃、新疆等省和自治区造成了生活不便，比如在乌鲁木齐，北京时间比当地时间提前两个小时，北京时间早8时30分（中国大陆公务机关通行的上班时间）相当于当地时间早晨6时30分。作为解决措施，一些新疆地区居民使用乌鲁木齐时间，即东六区（UTC+6）时间。</p>
<p>2005年，一些中华人民共和国全国人民代表大会代表提出将中国大陆时区加以细分的建议，提议分为以北京时间为基础的东部时间（UTC+8）、以陕西地区时间为基础的中部时间（UTC+7）和以新疆、西藏地区时间为基础的西部时间（UTC+6）。后又将该提议改为分为两个时区，即UTC+8和UTC+7两个时区，陕西、四川、重庆、贵州、云南及以西各省采用UTC+7的西部时间。但该提案尚未赴诸表决。<br><br></p>
<img src ="http://www.blogjava.net/swingboat/aggbug/112236.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2007-04-20 16:24 <a href="http://www.blogjava.net/swingboat/archive/2007/04/20/112236.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>maven2使用问题集(命令篇)!</title><link>http://www.blogjava.net/swingboat/archive/2006/11/13/80448.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Mon, 13 Nov 2006 07:30:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2006/11/13/80448.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/80448.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2006/11/13/80448.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/80448.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/80448.html</trackback:ping><description><![CDATA[
		<ol>
				<li>显示一个插件所有的goal 
</li>
				<li>创建一个基于模版的项目，eclipse项目<br /> //创建标准目录模板<br /> mvn archetype:create -DgroupId=com.codeline.commons -DartifactId=codelineCommons <br />//创建web项目<br /> mvn archetype:create -DgroupId=com.mycompany.app    -DartifactId=my-webapp       -DarchetypeArtifactId=maven-archetype-web <br /></li>
				<li>查看一个插件所用的版本<br />mvn -Dplugin=groupId:artifactId help:describe 
</li>
				<li>忽略编译test<br />mvn -Dmaven.test.skip=true 
</li>
				<li>一个jar文件，它是maven的一个插件，怎么安装到本地库。<br />   mvn install:install-file<br />       -Dfile=&lt;path-to-file&gt;<br />    -DgroupId=&lt;group-id&gt;<br />    -DartifactId=&lt;artifact-id&gt;<br />    -Dversion=&lt;version&gt;<br />    -Dpackaging=&lt;packaging&gt;<br />    -DgeneratePom=true<br /></li>
				<li>maven的生命周期<br />    validate，验证工程是否正确，所有需要的资源是否可用。 <br />    compile，编译项目的源代码。 <br />    test-compile，编译项目测试代码。 <br />    test，使用已编译的测试代码，测试已编译的源代码。 <br />    package，已发布的格式，如jar，将已编译的源代码打包。 <br />    integration-test，在集成测试可以运行的环境中处理和发布包。 <br />    verify，运行任何检查，验证包是否有效且达到质量标准。 <br />    install，把包安装在本地的repository中，可以被其他工程作为依赖来使用 <br />   deploy，在整合或者发布环境下执行，将最终版本的包拷贝到远程的repository，使得其他的开发者或者工程可以共享。  <br />   generate-sources，产生应用需要的任何额外的源代码，如xdoclet。 
</li>
				<li>Dependency Scope<br /> compile，缺省值，适用于所有阶段，会随着项目一起发布。 <br /> provided，类似compile，期望JDK、容器或使用者会提供这个依赖。如servlet.jar。 <br /> runtime，只在运行时使用，如JDBC驱动，适用运行和测试阶段。 <br /> test，只在测试时使用，用于编译和运行测试代码。不会随项目发布。 <br /> system，类似provided，需要显式提供包含依赖的jar，Maven不会在Repository中查找它<br /> eg：<br /> &lt;dependency&gt;<br />    &lt;groupId&gt;hibernate&lt;/groupId&gt;<br />    &lt;artifactId&gt;hibernate&lt;/artifactId&gt;<br />    &lt;version&gt;3.0.3&lt;/version&gt;<br />    &lt;scope&gt;test&lt;/scope&gt;<br /> &lt;/dependency&gt; </li>
		</ol>
<img src ="http://www.blogjava.net/swingboat/aggbug/80448.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2006-11-13 15:30 <a href="http://www.blogjava.net/swingboat/archive/2006/11/13/80448.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>同步（synchronized）对程序性能的影响！</title><link>http://www.blogjava.net/swingboat/archive/2006/11/10/80363.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Fri, 10 Nov 2006 04:37:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2006/11/10/80363.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/80363.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2006/11/10/80363.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/80363.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/80363.html</trackback:ping><description><![CDATA[在使用多线程时，可能会访问一些全局的数据，这时必然会使用同步机制来使程序按照一定顺序来执行，这样程序的性能也会下降。所以一定要慎用同步，正确用同步。看下面的程序<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        <span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> curIndex </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        AuditQueueEntry aqe;<br /><img id="Codehighlighter1_91_407_Open_Image" onclick="this.style.display='none'; Codehighlighter1_91_407_Open_Text.style.display='none'; Codehighlighter1_91_407_Closed_Image.style.display='inline'; Codehighlighter1_91_407_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_91_407_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_91_407_Closed_Text.style.display='none'; Codehighlighter1_91_407_Open_Image.style.display='inline'; Codehighlighter1_91_407_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">synchronized</span><span style="COLOR: #000000"> (localCriticalSection) </span><span id="Codehighlighter1_91_407_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_91_407_Open_Text"><span style="COLOR: #000000">{      <br /><img id="Codehighlighter1_145_397_Open_Image" onclick="this.style.display='none'; Codehighlighter1_145_397_Open_Text.style.display='none'; Codehighlighter1_145_397_Closed_Image.style.display='inline'; Codehighlighter1_145_397_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_145_397_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_145_397_Closed_Text.style.display='none'; Codehighlighter1_145_397_Open_Image.style.display='inline'; Codehighlighter1_145_397_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000"> (curIndex </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> theList.size()) </span><span id="Codehighlighter1_145_397_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_145_397_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                aqe </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (AuditQueueEntry) theList.get(curIndex);<br /><img id="Codehighlighter1_262_326_Open_Image" onclick="this.style.display='none'; Codehighlighter1_262_326_Open_Text.style.display='none'; Codehighlighter1_262_326_Closed_Image.style.display='inline'; Codehighlighter1_262_326_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_262_326_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_262_326_Closed_Text.style.display='none'; Codehighlighter1_262_326_Open_Image.style.display='inline'; Codehighlighter1_262_326_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (aqe.getTrailId() </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> theTrailId) </span><span id="Codehighlighter1_262_326_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_262_326_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    theList.remove(curIndex);<br /><img id="Codehighlighter1_333_383_Open_Image" onclick="this.style.display='none'; Codehighlighter1_333_383_Open_Text.style.display='none'; Codehighlighter1_333_383_Closed_Image.style.display='inline'; Codehighlighter1_333_383_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_333_383_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_333_383_Closed_Text.style.display='none'; Codehighlighter1_333_383_Open_Image.style.display='inline'; Codehighlighter1_333_383_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_333_383_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_333_383_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    curIndex</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />        }</span></span></div><br />localCriticalSection做为一个信号量来控制程序对类成员变量theList的访问，从而保证了theList在同一时间只有一个程序访问。运行程序，这个函数花费了将近4秒钟。同步是很耗时间的。<br />在java.util.Collections中提供了很多方法来保证集合（数组）的同步访问。<br />我们修改类成员变量theList的实例化方法：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">theList </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Collections.synchronizedList(new LinkedList());</span></div><br />再修改处理函数：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> curIndex </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        AuditQueueEntry aqe;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">        synchronized (localCriticalSection) {</span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_146_457_Open_Image" onclick="this.style.display='none'; Codehighlighter1_146_457_Open_Text.style.display='none'; Codehighlighter1_146_457_Closed_Image.style.display='inline'; Codehighlighter1_146_457_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_146_457_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_146_457_Closed_Text.style.display='none'; Codehighlighter1_146_457_Open_Image.style.display='inline'; Codehighlighter1_146_457_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">synchronized</span><span style="COLOR: #000000">(theList) </span><span id="Codehighlighter1_146_457_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_146_457_Open_Text"><span style="COLOR: #000000">{    <br /><img id="Codehighlighter1_195_447_Open_Image" onclick="this.style.display='none'; Codehighlighter1_195_447_Open_Text.style.display='none'; Codehighlighter1_195_447_Closed_Image.style.display='inline'; Codehighlighter1_195_447_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_195_447_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_195_447_Closed_Text.style.display='none'; Codehighlighter1_195_447_Open_Image.style.display='inline'; Codehighlighter1_195_447_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000"> (curIndex </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"> theList.size()) </span><span id="Codehighlighter1_195_447_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_195_447_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                aqe </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (AuditQueueEntry) theList.get(curIndex);<br /><img id="Codehighlighter1_312_376_Open_Image" onclick="this.style.display='none'; Codehighlighter1_312_376_Open_Text.style.display='none'; Codehighlighter1_312_376_Closed_Image.style.display='inline'; Codehighlighter1_312_376_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_312_376_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_312_376_Closed_Text.style.display='none'; Codehighlighter1_312_376_Open_Image.style.display='inline'; Codehighlighter1_312_376_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (aqe.getTrailId() </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> theTrailId) </span><span id="Codehighlighter1_312_376_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_312_376_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    theList.remove(curIndex);<br /><img id="Codehighlighter1_383_433_Open_Image" onclick="this.style.display='none'; Codehighlighter1_383_433_Open_Text.style.display='none'; Codehighlighter1_383_433_Closed_Image.style.display='inline'; Codehighlighter1_383_433_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_383_433_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_383_433_Closed_Text.style.display='none'; Codehighlighter1_383_433_Open_Image.style.display='inline'; Codehighlighter1_383_433_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_383_433_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_383_433_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    curIndex</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />        }</span></span></div><br />再运行，这个函数才花费将近一秒钟的时间！<br />在Collections中提供了很多这类的方法。<img src ="http://www.blogjava.net/swingboat/aggbug/80363.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2006-11-10 12:37 <a href="http://www.blogjava.net/swingboat/archive/2006/11/10/80363.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat5.5.x的JNDI配置（jakarta-tomcat-5.5.7）。</title><link>http://www.blogjava.net/swingboat/archive/2006/10/25/77134.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Wed, 25 Oct 2006 02:09:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2006/10/25/77134.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/77134.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2006/10/25/77134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/77134.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/77134.html</trackback:ping><description><![CDATA[
		<p>
		</p>
		<hr />
jakarta-tomcat-5.5.7<br />1.web.xml的设置<br />&lt;resource-ref&gt;<br />  &lt;description&gt;OPDB JNDI for TOMCAT&lt;/description&gt;<br />  &lt;res-ref-name&gt;jdbc/opdb&lt;/res-ref-name&gt;<br />  &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;<br />  &lt;res-auth&gt;Container&lt;/res-auth&gt;<br /> &lt;/resource-ref&gt;<p>2.cof/server.xml的配置(eg：C:\jakarta-tomcat-5.5.7\conf)。</p><p>&lt;Resource name="jdbc/opdb" auth="Steve" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@172.16.208.190:1522:opdb" username="test" password="oracle" maxActive="20" maxIdle="10" maxWait="10000"/&gt; </p><p>3.web/META-INF/content.xml的配置。</p><p>&lt;?xml version='1.0' encoding='utf-8'?&gt;<br />&lt;Context&gt;<br /> &lt;!-- note: the following resource name is set up to use the inet jdbc driver.  If you are<br />  using a different driver, then you will have to change the driverClassName.<br />  You will have to change the url (the ip and db identifier part), username and password <br />  entries for your environment.<br />  --&gt;<br /> &lt;Resource name="jdbc/opdb" auth="Container" type="javax.sql.DataSource" username="test" password="oracle"<br />  driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@172.16.208.190:1522:opdb" maxActive="20" maxIdle="10"<br />  maxWait="-1" validationQuery="SELECT 1 FROM DUAL"/&gt;<br />&lt;/Context&gt;<br />说明：我的tomcat版本是5.5.7。好像必须配置content.xml文件，但是配了这个文件，server.xml中的设置不起作用了。下面是各参数的说明：<br />driveClassName：JDBC驱动类的完整的名称； <br />maxActive：同时能够从连接池中被分配的可用实例的最大数； <br />maxIdle：可以同时闲置在连接池中的连接的最大数； <br />maxWait：最大超时时间，以毫秒计； <br />password：用户密码； <br />url：到JDBC的URL连接； <br />user：用户名称； <br />validationQuery：用来查询池中空闲的连接。<br /></p><img src ="http://www.blogjava.net/swingboat/aggbug/77134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2006-10-25 10:09 <a href="http://www.blogjava.net/swingboat/archive/2006/10/25/77134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AXIS学习（1）</title><link>http://www.blogjava.net/swingboat/archive/2006/02/13/30477.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Mon, 13 Feb 2006 09:11:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2006/02/13/30477.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/30477.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2006/02/13/30477.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/30477.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/30477.html</trackback:ping><description><![CDATA[<P>1.axis服务器包的校验。<BR>&nbsp; 到<A href="http://ws.apache.org/">http://ws.apache.org/</A>下载axis后，解压，拷贝axis到tomcat的webapps目录下。启动tomcat，运行<A href="http://localhost:8080/axis">http://localhost:8080/axis</A><BR>&nbsp; 点击“validation”，程序会检测少的包，并提示下载路径。我目前包含的包如下：<BR>&nbsp;&nbsp;&nbsp; axis.jar;&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; <BR>&nbsp;axis-ant.jar;&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; <BR>&nbsp;axis-schema.jar;&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;commons-discovery-0.2.jar;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;commons-httpclient-3.0-rc2.jar;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;commons-logging-1.0.4.jar;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;jaxrpc.jar;&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; <BR>&nbsp;log4j-1.2.8.jar;&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;saaj.jar;&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; <BR>&nbsp;wsdl4j-1.5.1.jar;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;activation.jar;&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;mail.jar&nbsp;&nbsp;&nbsp;&nbsp; <BR><BR>2.环境变量的配置<BR>&nbsp; 其实运行axis是不用配置环境变量的。但有的时候需要利用axis提供的一些工具，产生一些文件，需要应用很多包，利用ClassPath就比较方便了。<BR>&nbsp; AXIS_HOME:<BR>&nbsp; AXIS_LIB:<BR>&nbsp; AXISCLASSPATH: <BR>&nbsp;<BR>3.把axis集成&nbsp;到项目中<BR>&nbsp; a、把上面所提到的包拷贝到项目相应的lib目录中<BR>&nbsp; b、修改web.xml文件，增加所需的servlet配置<BR>&nbsp; &lt;servlet&gt;<BR>&nbsp;&nbsp;&lt;servlet-name&gt;AxisServlet&lt;/servlet-name&gt;<BR>&nbsp;&nbsp;&lt;servlet-class&gt;org.apache.axis.transport.http.AxisServlet&lt;/servlet-class&gt;<BR>&nbsp;&lt;/servlet&gt;</P>
<P>&nbsp;&lt;servlet&gt;<BR>&nbsp;&nbsp;&lt;servlet-name&gt;AdminServlet&lt;/servlet-name&gt;<BR>&nbsp;&nbsp;&lt;servlet-class&gt;org.apache.axis.transport.http.AdminServlet&lt;/servlet-class&gt;<BR>&nbsp;&nbsp;&lt;load-on-startup&gt;100&lt;/load-on-startup&gt;<BR>&nbsp;&lt;/servlet&gt;</P>
<P>&nbsp;&lt;servlet&gt;<BR>&nbsp;&nbsp;&lt;servlet-name&gt;SOAPMonitorService&lt;/servlet-name&gt;<BR>&nbsp;&nbsp;&lt;servlet-class&gt;org.apache.axis.monitor.SOAPMonitorService&lt;/servlet-class&gt;<BR>&nbsp;&nbsp;&lt;init-param&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;param-name&gt;SOAPMonitorPort&lt;/param-name&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;param-value&gt;5001&lt;/param-value&gt;<BR>&nbsp;&nbsp;&lt;/init-param&gt;<BR>&nbsp;&nbsp;&lt;load-on-startup&gt;100&lt;/load-on-startup&gt;<BR>&nbsp;&lt;/servlet&gt;</P>
<P>&nbsp;&lt;servlet-mapping&gt;<BR>&nbsp;&nbsp;&lt;servlet-name&gt;AxisServlet&lt;/servlet-name&gt;<BR>&nbsp;&nbsp;&lt;url-pattern&gt;/servlet/AxisServlet&lt;/url-pattern&gt;<BR>&nbsp;&lt;/servlet-mapping&gt;</P>
<P>&nbsp;&lt;servlet-mapping&gt;<BR>&nbsp;&nbsp;&lt;servlet-name&gt;AxisServlet&lt;/servlet-name&gt;<BR>&nbsp;&nbsp;&lt;url-pattern&gt;*.jws&lt;/url-pattern&gt;<BR>&nbsp;&lt;/servlet-mapping&gt;</P>
<P>&nbsp;&lt;servlet-mapping&gt;<BR>&nbsp;&nbsp;&lt;servlet-name&gt;AxisServlet&lt;/servlet-name&gt;<BR>&nbsp;&nbsp;&lt;url-pattern&gt;/services/*&lt;/url-pattern&gt;<BR>&nbsp;&lt;/servlet-mapping&gt;</P>
<P>&nbsp;&lt;servlet-mapping&gt;<BR>&nbsp;&nbsp;&lt;servlet-name&gt;SOAPMonitorService&lt;/servlet-name&gt;<BR>&nbsp;&nbsp;&lt;url-pattern&gt;/SOAPMonitor&lt;/url-pattern&gt;<BR>&nbsp;&lt;/servlet-mapping&gt;</P>
<P>&nbsp;&lt;session-config&gt;<BR>&nbsp;&nbsp;&lt;session-timeout&gt;5&lt;/session-timeout&gt;<BR>&nbsp;&lt;/session-config&gt;</P>
<P>&nbsp;&lt;mime-mapping&gt;<BR>&nbsp;&nbsp;&lt;extension&gt;wsdl&lt;/extension&gt;<BR>&nbsp;&nbsp;&lt;mime-type&gt;text/xml&lt;/mime-type&gt;<BR>&nbsp;&lt;/mime-mapping&gt;</P>
<P>&nbsp;&lt;mime-mapping&gt;<BR>&nbsp;&nbsp;&lt;extension&gt;xsd&lt;/extension&gt;<BR>&nbsp;&nbsp;&lt;mime-type&gt;text/xml&lt;/mime-type&gt;<BR>&nbsp;&lt;/mime-mapping&gt;<BR>&nbsp;&nbsp; <BR>4.服务发布（jws文件发布和定制发布）<BR>&nbsp; a、jws文件发布<BR>&nbsp; 在web应用程序目录下，新建一个jws文件，例如：Hello.jws文件（其实就是个java文件，不包含包名）。&nbsp; <BR>&nbsp; public class Hello {<BR>&nbsp;public String hello(String name){<BR>&nbsp;&nbsp;if(name==null){<BR>&nbsp;&nbsp;&nbsp;name="";<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;return "Hi,你好 "+name+",欢迎来到Web服务世界！";<BR>&nbsp;}<BR>&nbsp; }<BR>&nbsp; 这样就可以直接查看hello服务相应的wsdl了：<A href="http://localhost:8080/testaxis/hello.jws?wsdl">http://localhost:8080/testaxis/hello.jws?wsdl</A><BR>&nbsp; <BR>&nbsp; b.定制发布。<BR>&nbsp; 定制发布，依赖一个server-confif.wsdd文件。<BR>&nbsp; 在web-inf目录下新建一个deploy.wsdd文件，设置发布的服务，例如：<BR>&nbsp; &lt;deployment xmlns="<A href="http://xml.apache.org/axis/wsdd/">http://xml.apache.org/axis/wsdd/</A>"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:java="<A href="http://xml.apache.org/axis/wsdd/providers/java">http://xml.apache.org/axis/wsdd/providers/java</A>"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;service name="city" provider="java:RPC"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter name="className" value="yhp.test.axis.service.CityService"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter name="allowedMethods" value="*"/&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/service&gt;<BR>&nbsp; &lt;/deployment&gt;<BR>&nbsp; <BR>&nbsp; 利用axis提供的工具，就可以生成server-confif.wsdd文件了：<BR>&nbsp; java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd<BR>&nbsp; 在运行过程中发现：如果没有把axis自带的应用发布到服务器上，运行时会提示404的错误,未发现axis/servlet/AxisServlet。</P>
<P>5.客户端调用<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String endpoint = "<A href="http://localhost">http://localhost</A>:" + "8080"<BR>&nbsp;&nbsp;&nbsp;&nbsp;+ "/testaxis/services/city";&nbsp; //以定制发布方式，如果是jws文件，则endpoint为相应的jws文件</P>
<P>&nbsp;&nbsp;Service service = new Service();<BR>&nbsp;&nbsp;Call call = (Call) service.createCall();<BR>&nbsp;&nbsp;call.setTargetEndpointAddress(new java.net.URL(endpoint));<BR>&nbsp;&nbsp;call.setOperationName("getZip");</P>
<P>&nbsp;&nbsp;String res = (String) call.invoke(new Object[] {""});//object数组为远程方法的参数&nbsp;</P>
<P>&nbsp;&nbsp;System.out.println(res);<BR>&nbsp;&nbsp;<BR>6.生成客户端stub相关类<BR>&nbsp;&nbsp; Axis提供了工具生成客户端stub相关的类，即通过wsdl产生stub。<BR>&nbsp;&nbsp; java -cp %AXISCLASSPATH% org.apache.axis.wsdl.WSDL2Java <A href="http://localhost:8080/testaxis/services/city?wsdl">http://localhost:8080/testaxis/services/city?wsdl</A> <BR>&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; </P><img src ="http://www.blogjava.net/swingboat/aggbug/30477.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2006-02-13 17:11 <a href="http://www.blogjava.net/swingboat/archive/2006/02/13/30477.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取classes目录下的资源文件和类所在目录下的资源文件？</title><link>http://www.blogjava.net/swingboat/archive/2006/02/07/29778.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Tue, 07 Feb 2006 03:54:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2006/02/07/29778.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/29778.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2006/02/07/29778.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/29778.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/29778.html</trackback:ping><description><![CDATA[classes目录：DBUtil.class.getClassLoader().getResourceAsStream("testing.properties")；<BR>DBUtil.class所在目录：DBUtil.class.getResourceAsStream("testing.properties")；<BR><BR>&nbsp; Properties props = new Properties();<BR>&nbsp;&nbsp;props.load(DBUtil.class.getClassLoader().getResourceAsStream("testing.properties"));<BR>&nbsp;&nbsp;strDriver = props.getProperty("Driver");&nbsp; <BR>&nbsp;&nbsp;strURL = props.getProperty("URL"); <BR>&nbsp;&nbsp;strUser = props.getProperty("User"); <BR>&nbsp;&nbsp;strPassword = props.getProperty("Password");<BR>&nbsp;&nbsp;System.out.println("strDriver="+strDriver);<BR>&nbsp;&nbsp;System.out.println("strURL="+strURL);<BR>&nbsp;&nbsp;System.out.println("strUser="+strUser);<BR>&nbsp;&nbsp;System.out.println("strPassword="+strPassword);&nbsp; <img src ="http://www.blogjava.net/swingboat/aggbug/29778.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2006-02-07 11:54 <a href="http://www.blogjava.net/swingboat/archive/2006/02/07/29778.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实现类clone方法 </title><link>http://www.blogjava.net/swingboat/archive/2005/12/28/25666.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Wed, 28 Dec 2005 01:22:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2005/12/28/25666.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/25666.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2005/12/28/25666.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/25666.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/25666.html</trackback:ping><description><![CDATA[<P>例子： <BR>public class Outbound2splitVO implements Serializable ,Cloneable { <BR>&nbsp;&nbsp;&nbsp; private long id; <BR>&nbsp;&nbsp;&nbsp; private String brand; <BR>&nbsp;&nbsp;&nbsp; public long getId() { <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return id; <BR>&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;&nbsp; public void setId(long id){ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.id=id; <BR>&nbsp;&nbsp;&nbsp; } <BR>&nbsp;&nbsp;&nbsp; public void setBrand(String brand) { <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.brand=brand; <BR>&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;&nbsp; public String getBrand(){ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return brand; <BR>&nbsp;&nbsp;&nbsp; } </P>
<P>&nbsp;&nbsp;&nbsp; public Object clone(){ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Outbound2splitVO o = null; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o = (Outbound2splitVO)super.clone(); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }catch(CloneNotSupportedException e){ <BR>&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; } <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return o; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <BR>} <BR><BR>类必须实现Cloneable接口，clone方法。</P><img src ="http://www.blogjava.net/swingboat/aggbug/25666.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2005-12-28 09:22 <a href="http://www.blogjava.net/swingboat/archive/2005/12/28/25666.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>forward,include,redirect区别。</title><link>http://www.blogjava.net/swingboat/archive/2005/12/28/25663.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Wed, 28 Dec 2005 01:21:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2005/12/28/25663.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/25663.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2005/12/28/25663.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/25663.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/25663.html</trackback:ping><description><![CDATA[<DIV class=postText>forward,include,redirect是jsp中web页面(jsp或servelt)的三种不同的路由关系，三个貌似相同，其实还是有许多差别的，而了解这些细微的差别，在web开发中是很重要的。 <BR>说明： <BR>一、forward、include由javax.servlet.RequestDispatcher来封装,由包容器container提供RequestDispatcher接口的实现，其中声明如下： <BR>void forward(ServletRequest req,ServletResponse res) <BR>void include(ServeltRequest req,ServletResponse res) <BR>可以通过两种方式得到RequestDispatcher: <BR>1、ServletContext.getRequestDispatcher(String path); <BR>其中这里的path必须开始为"/"，即这里的path必须相对于context的root. <BR>2、ServeltRequest.getRequestDispatcher(String path) <BR>这里的path可以为相对路径,如果path开始为"/",则也认为是从context的root开始的。 <BR>二、Redirect由HttpServletResponse.sendRedirect(String location)来支持 <BR>差别： <BR>三个都可以对用户的request进行转发，但是还是有许多的不同，差别最主要集中在如下几个方面： <BR>1、forward与include共亨Request范围内的对象,而redirect则不行，即：如果一个javabean被声明为request范围的话，则被forward到的资源也可以访问这个javabean,而redriect则不行。 <BR>2、forward与include基本上都是转发到context内部的资源，而redirect可以重定向到外部的资源,如： req.sendRedriect("http://www.mocuai.com"); <BR><BR>Forward功能的实现，这样 <BR>private void setForward(String url,ServletRequest request, ServletResponse response)throws Exception {&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletRequest hreq = (HttpServletRequest) request; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RequestDispatcher dispatcher =&nbsp; hreq.getSession().getServletContext().getRequestDispatcher(url); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dispatcher.forward(request,response); <BR>} </DIV><img src ="http://www.blogjava.net/swingboat/aggbug/25663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2005-12-28 09:21 <a href="http://www.blogjava.net/swingboat/archive/2005/12/28/25663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Collection，Map，HashMap，hashTable，TreeMap，List，Vector，ArrayList的区别 </title><link>http://www.blogjava.net/swingboat/archive/2005/12/28/25664.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Wed, 28 Dec 2005 01:21:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2005/12/28/25664.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/25664.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2005/12/28/25664.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/25664.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/25664.html</trackback:ping><description><![CDATA[<P>Collection接口，包含list和set子接口 <BR>Collection和Map接口之间的主要区别在于：Collection中存储了一组对象，而Map存储关键字/值对。 <BR>在Map对象中，每一个关键字最多有一个关联的值。 <BR>Map:不能包括两个相同的键，一个键最多能绑定一个值。null可以作为键，这样的键只有一个；可以有一个或多个键所对应的 <BR>值为null。当get()方法返回null值时，即可以表示Map中没有该键，也可以表示该键所对应的值为null。因此，在Map中不能由get()方法来判断Map中是否存在某个键，而应该用containsKey()方法来判断。 <BR>继承Map的类有：HashMap，HashTable <BR>HashMap：Map的实现类，缺省情况下是非同步的，可以通过Map Collections.synchronizedMap(Map m)来达到线程同步 <BR>HashTable：Dictionary的子类，确省是线程同步的。不允许关键字或值为null </P>
<P>当元素的顺序很重要时选用TreeMap，当元素不必以特定的顺序进行存储时，使用HashMap。Hashtable的使用不被推荐，因为HashMap提供了所有类似的功能，并且速度更快。当你需要在多线程环境下使用时，HashMap也可以转换为同步的。 <BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=4 width=520 border=0>
<TBODY>
<TR>
<TD>以下引用： </TD></TR>
<TR>
<TD><SPAN class=PostMain id=lblBlogText>
<UL>
<LI><STRONG>为什么要使用集合类</STRONG> </LI></UL>
<P>当你事先不知道要存放数据的个数，或者你需要一种比数组下标存取机制更灵活的方法时，你就需要用到集合类。</P>
<UL>
<LI><STRONG>理解集合类</STRONG> </LI></UL>
<P>集合类存放于java.util包中。 <BR>集合类存放的都是对象的引用，而非对象本身，出于表达上的便利，我们称集合中的对象就是指集合中对象的引用（reference)。 <BR>集合类型主要有3种：set(集）、list(列表）和map(映射)。 </P>
<P>(1)集 <BR>集（set）是最简单的一种集合，它的对象不按特定方式排序，只是简单的把对象加入集合中，就像往口袋里放东西。 <BR>对集中成员的访问和操作是通过集中对象的引用进行的，所以集中不能有重复对象。 <BR>集也有多种变体，可以实现排序等功能，如TreeSet，它把对象添加到集中的操作将变为按照某种比较规则将其插入到有序的对象序列中。它实现的是SortedSet接口，也就是加入了对象比较的方法。通过对集中的对象迭代，我们可以得到一个升序的对象集合。 </P>
<P>(2)列表 <BR>列表的主要特征是其对象以线性方式存储，没有特定顺序，只有一个开头和一个结尾，当然，它与根本没有顺序的集是不同的。 <BR>列表在数据结构中分别表现为：数组和向量、链表、堆栈、队列。 <BR>关于实现列表的集合类，是我们日常工作中经常用到的，将在后边的笔记详细介绍。 </P>
<P>(3)映射 <BR>映射与集或列表有明显区别，映射中每个项都是成对的。映射中存储的每个对象都有一个相关的关键字（Key）对象，关键字决定了对象在映射中的存储位置，检索对象时必须提供相应的关键字，就像在字典中查单词一样。关键字应该是唯一的。 <BR>关键字本身并不能决定对象的存储位置，它需要对过一种散列(hashing)技术来处理，产生一个被称作散列码(hash code)的整数值，散列码通常用作一个偏置量，该偏置量是相对于分配给映射的内存区域起始位置的，由此确定关键字/对象对的存储位置。理想情况下，散列处理应该产生给定范围内均匀分布的值，而且每个关键字应得到不同的散列码。 </P>
<UL>
<LI><STRONG>集合类简介</STRONG> </LI></UL>
<P>java.util中共有13个类可用于管理集合对象，它们支持集、列表或映射等集合，以下是这些类的简单介绍</P>
<P><STRONG>集： <BR>HashSet：</STRONG> 使用HashMap的一个集的实现。虽然集定义成无序，但必须存在某种方法能相当高效地找到一个对象。使用一个HashMap对象实现集的存储和检索操作是在固定时间内实现的. <BR><STRONG>TreeSet：</STRONG> 在集中以升序对对象排序的集的实现。这意味着从一个TreeSet对象获得第一个迭代器将按升序提供对象。TreeSet类使用了一个TreeMap. <BR><STRONG>列表：</STRONG> <BR><STRONG>Vector：</STRONG> 实现一个类似数组一样的表，自动增加容量来容纳你所需的元素。使用下标存储和检索对象就象在一个标准的数组中一样。你也可以用一个迭代器从一个Vector中检索对象。Vector是唯一的同步容器类??当两个或多个线程同时访问时也是性能良好的。 <BR><STRONG>Stsck:</STRONG> 这个类从Vector派生而来，并且增加了方法实现栈??一种后进先出的存储结构。 <BR><STRONG>LinkedList:</STRONG> 实现一个链表。由这个类定义的链表也可以像栈或队列一样被使用。 <BR><STRONG>ArrayList:</STRONG> 实现一个数组，它的规模可变并且能像链表一样被访问。它提供的功能类似Vector类但不同步。 <BR><STRONG>映射： <BR>HashTable：</STRONG> 实现一个映象，所有的键必须非空。为了能高效的工作，定义键的类必须实现hashcode()方法和equal()方法。这个类是前面java实现的一个继承，并且通常能在实现映象的其他类中更好的使用。 <BR><STRONG>HashMap：</STRONG> 实现一个映象，允许存储空对象，而且允许键是空（由于键必须是唯一的，当然只能有一个）。 <BR><STRONG>WeakHashMap：</STRONG> 实现这样一个映象：通常如果一个键对一个对象而言不再被引用，键/对象对将被舍弃。这与HashMap形成对照，映象中的键维持键/对象对的生命周期，尽管使用映象的程序不再有对键的引用，并且因此不能检索对象。 <BR><STRONG>TreeMap：</STRONG> 实现这样一个映象，对象是按键升序排列的。 </P>
<P>下图是集合类所实现的接口之间的关系： <BR><IMG height=183 src="http://www.cnblogs.com/images/cnblogs_com/swingboat/collection.gif" width=435> </P>
<P>Set和List都是由公共接口Collection扩展而来，所以它们都可以使用一个类型为Collection的变量来引用。这就意味着任何列表或集构成的集合都可以用这种方式引用，只有映射类除外（但也不是完全排除在外，因为可以从映射获得一个列表。）所以说，把一个列表或集传递给方法的标准途径是使用Collection类型的参数。</P></SPAN></TD></TR></TBODY></TABLE></P><img src ="http://www.blogjava.net/swingboat/aggbug/25664.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2005-12-28 09:21 <a href="http://www.blogjava.net/swingboat/archive/2005/12/28/25664.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>页面过虑器制作 </title><link>http://www.blogjava.net/swingboat/archive/2005/12/28/25660.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Wed, 28 Dec 2005 01:20:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2005/12/28/25660.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/25660.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2005/12/28/25660.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/25660.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/25660.html</trackback:ping><description><![CDATA[<DIV class=postText>
<DIV>需求描述：</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在网站中有一些网页是受保护的，即只有规定的用户才能访问，而有一些网页任何人都可以访问。所以用户在IE中输入URL提交后，服务器必须对用户输入的URL进行分析过虑。</DIV>
<DIV>分析：</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需要考虑的问题：</DIV>
<DIV>1、 怎么拦截用户输入的URL？</DIV>
<DIV>2、 怎么判断输入的URL是否是受保护的？</DIV>
<DIV>3、 在用户量很大的情况下，每一个URL都要进行判断，怎样提高判断的性能？</DIV>
<DIV>方法：</DIV>
<DIV>1、 在web.xml中可以定义filter,服务器会更据filter的定义进行拦截，以及相应的处理。例如下面的配置：</DIV>
<DIV>&lt;filter&gt;&nbsp;&nbsp; </DIV>
<DIV>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&lt;filter-name&gt;webfilter&lt;/filter-name&gt;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;filter-class&gt;com.cyberway.web.filter.WebFilter&lt;/filter-class&gt;</DIV>
<DIV>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/filter&gt;</DIV>
<DIV>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;filter-mapping&gt;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;filter-name&gt;webfilter&lt;/filter-name&gt;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;url-pattern&gt;/*&lt;/url-pattern&gt;</DIV>
<DIV>&nbsp; &nbsp;&lt;/filter-mapping&gt;</DIV>
<DIV>&nbsp;</DIV>
<DIV>filter-name:定义过滤器的名称</DIV>
<DIV>filter-class：定义过滤器处理的类</DIV>
<DIV>url-pattern：定义拦截url</DIV>
<DIV>/*:表示所有的都拦截</DIV>
<DIV>*.jsp:只拦截jsp文件</DIV>
<DIV>2、利用数据库把需要保护的URL保存起来，每请求一次，检测一次。</DIV>
<DIV>3、如果每请求一次，都去数据库访问检测一次，这样性能一定会非常差的。网站稳定以后受保护的页面一般更新较少，我们可以第一次请求时，从数据库中获取所有的受保护页面，保存在hashtble中，然后每次从hashtable中进行检测。如果更新了受保护页面，则需更新hashtable。其实就是一种catch模式。事例代码如下：</DIV>
<DIV>public class URLHelper｛</DIV>
<DIV>private static URLHelper me；</DIV>
<DIV>private HashTable&nbsp; urlTable;</DIV>
<DIV>private Boolean hasInit＝false；</DIV>
<DIV>&nbsp;</DIV>
<DIV>static｛</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; me=new URLHelper();</DIV>
<DIV>｝</DIV>
<DIV>private URLHelper(){</DIV>
<DIV>}</DIV>
<DIV>public URLHelper getInstance(){</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return me;</DIV>
<DIV>}</DIV>
<DIV>public Boolean isHasInit{</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return hasInit;</DIV>
<DIV>}</DIV>
<DIV>public void init(){</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; urlTable=new HashTable();</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Collection datas=getAllURLs();</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator it=datas.iterator();</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(it.hasNext()){</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URLVO vo=(URLVO)it.next();&nbsp; //URLVO:一个记录URL信息的实体类</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; urlTable.put(vo.URL,vo);</DIV>
<DIV>}</DIV>
<DIV>}</DIV>
<DIV>//根据URL判断是否上受保护的</DIV>
<DIV>public boolean isProtected(String url) {</DIV>
<DIV>&nbsp;&nbsp;&nbsp; return urlTable.containsKey(url);</DIV>
<DIV>}</DIV>
<DIV>private Collection getAllURLs(){</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //从数据库中获取所受保护网页 </DIV>
<DIV>}</DIV>
<DIV>｝</DIV>
<DIV>WebFilter类如下：</DIV>
<DIV>public class WebFilter extends HttpServlet implements Filter {</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; public void doFilter(ServletRequest request, ServletResponse response,</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FilterChain filterChain) throws ServletException {</DIV>
<DIV>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; try {</DIV>
<DIV>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.setCharacterEncoding("GBK");</DIV>
<DIV>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest hreq = (HttpServletRequest) request;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; HttpServletResponse hres = (HttpServletResponse) response;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; HttpSession session = hreq.getSession();</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; ServletContext context = session.getServletContext();</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; String currentURL = hreq.getRequestURI();//返回不带参数URL</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; /String preURL = hreq.getHeader("referer");//返回上一页URL</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; String urlParam = hreq.getQueryString();//返回当前URL的参数</DIV>
<DIV>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;String currentURLpara = null;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; // check if is requesting a protect resource</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; if (currentURL != null) {</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //String contextPath = hreq.getContextPath();//返回 "/webroot"</DIV>
<DIV>URLHelper helper=URLHelper.getInstance();</DIV>
<DIV>if(helper. isProtected(currentURL)){</DIV>
<DIV>&nbsp;&nbsp;&nbsp; setForward（currentURL） </DIV>
<DIV>}else｛</DIV>
<DIV>&nbsp;&nbsp;&nbsp; setForward（”error.jsp”）;&nbsp;&nbsp;&nbsp;&nbsp; </DIV>
<DIV>｝&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ｝</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filterChain.doFilter(request, response);</DIV>
<DIV>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }catch (ServletException sx) {</DIV>
<DIV>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filterConfig.getServletContext().log(sx.getMessage());</DIV>
<DIV>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }catch (IOException iox) {</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; filterConfig.getServletContext().log(iox.getMessage());</DIV>
<DIV>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }catch (Exception ex) {</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; filterConfig.getServletContext().log(ex.getMessage());</DIV>
<DIV>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }</DIV>
<DIV>｝</DIV>
<DIV>//forward一个页面</DIV>
<DIV>private void setForward(String url, ServletRequest request,</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServletResponse response) throws Exception {</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletRequest hreq = (HttpServletRequest) request;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RequestDispatcher dispatcher = &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hreq.getSession().getServletContext()</DIV>
<DIV>&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; .getRequestDispatcher(url);</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dispatcher.forward(request, response);</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</DIV>
<DIV>｝</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp; </DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV></DIV><img src ="http://www.blogjava.net/swingboat/aggbug/25660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2005-12-28 09:20 <a href="http://www.blogjava.net/swingboat/archive/2005/12/28/25660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>含有中文字符串的截取问题！</title><link>http://www.blogjava.net/swingboat/archive/2005/12/28/25656.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Wed, 28 Dec 2005 01:18:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2005/12/28/25656.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/25656.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2005/12/28/25656.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/25656.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/25656.html</trackback:ping><description><![CDATA[<DIV class=postText>问题：<BR>&nbsp;&nbsp;&nbsp; 字符串：music&lt;&lt;美丽的草原我的家&gt;&gt;。该字符串的长度即str.length()为：17，而目前需要存入数据库对应的字段长度为：16。所以必须对字符串进行截取。而前16个字节中，“原”字只有半个。这样存入数据库确对会出现“？”。所以必须判断是否是半个汉字，即只能存入“music&lt;&lt;美丽的草”。<BR><BR>分析：<BR>&nbsp;&nbsp;&nbsp; 汉字是双字节编码，它为了能够与英文字符分开，每个字节的最高位一定为1。如果是汉字，那么这个字节就是小于0的。这个函数就是通过这一原理实现的。所以要通过getBytes()转化为byte型，再比较与零的大小。 &nbsp;<BR>getBytes()是把一个字符串转成一个byte数组，因为计算机的数据都是基于字符的，也就是说一个字符串实际上就是一个字符流，因此可以转为字符数组。<BR><BR>程序：<BR>&nbsp;&nbsp;&nbsp; public &nbsp;static &nbsp;String &nbsp;getStr(String &nbsp;src, &nbsp;int &nbsp;len) &nbsp;{ &nbsp;<BR>&nbsp; &nbsp; &nbsp; &nbsp;if &nbsp;(src &nbsp;== &nbsp;null) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return &nbsp;null; &nbsp;<BR>&nbsp; &nbsp; &nbsp; &nbsp;if &nbsp;(src.getBytes().length &nbsp;&lt;= &nbsp;len) &nbsp; &nbsp;return &nbsp;src; &nbsp;<BR>&nbsp;<BR>&nbsp; &nbsp; &nbsp; &nbsp;byte[] &nbsp;s &nbsp;= &nbsp;src.getBytes(); &nbsp;<BR>&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp;flag &nbsp;= &nbsp;0; &nbsp;<BR>&nbsp; &nbsp; &nbsp; &nbsp;for(int &nbsp;i=0;i&lt;len;++i){ &nbsp;<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(s[i] &nbsp;&lt; &nbsp;0) &nbsp;flag++; &nbsp; &nbsp;<BR>&nbsp; &nbsp; &nbsp; &nbsp;} &nbsp;<BR>&nbsp; &nbsp; &nbsp; &nbsp;if(flag%2!=0) &nbsp;len--; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<BR>&nbsp;<BR>&nbsp; &nbsp; &nbsp; &nbsp;byte[] &nbsp;d &nbsp;= &nbsp;new &nbsp;byte[len]; &nbsp;<BR>&nbsp; &nbsp; &nbsp; &nbsp;System.arraycopy(s, &nbsp;0, &nbsp;d, &nbsp;0, &nbsp;len); &nbsp;<BR>&nbsp; &nbsp; &nbsp; &nbsp;return &nbsp;new &nbsp;String(d); &nbsp;<BR>&nbsp; &nbsp;}&nbsp;&nbsp;<BR></DIV><img src ="http://www.blogjava.net/swingboat/aggbug/25656.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2005-12-28 09:18 <a href="http://www.blogjava.net/swingboat/archive/2005/12/28/25656.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在struts1.1框架下，利用smartupload实现文件的上传（可以是多个文件） </title><link>http://www.blogjava.net/swingboat/archive/2005/12/28/25657.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Wed, 28 Dec 2005 01:18:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2005/12/28/25657.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/25657.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2005/12/28/25657.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/25657.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/25657.html</trackback:ping><description><![CDATA[<DIV class=postText>1、前端页面upload.jsp，后台处理程序UplodAction.java<BR>2、struts.config的配置参数如下（没有设置<SPAN style="COLOR: red">ActionForm</SPAN>）：<BR>&lt;action input="/upload.jsp"&nbsp; path="/save" scope="request" type="yhp.test.web.UploadAction" validate="false"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/list.do" /&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/action&gt;<BR>3、upload.jsp页面中主要部分代码<BR>&lt;%@ page contentType="text/html; charset=GBK"%&gt;<BR>&lt;%@ taglib uri="<A href="http://jakarta.apache.org/struts/tags-html"><FONT color=#000080>http://jakarta.apache.org/struts/tags-html</FONT></A>" prefix="html" %&gt;<BR>&lt;%@ taglib uri="<A href="http://java.sun.com/jstl/core"><FONT color=#000080>http://java.sun.com/jstl/core</FONT></A>" prefix="c" %&gt;<BR>&lt;html:html&gt;<BR>&lt;head&gt;<BR>&lt;title&gt;&nbsp;测试Struts利用SmartUpload上传文件 &lt;/title&gt;<BR>&lt;meta http-equiv="Content-Type" content="text/html; charset=GBK"&gt;<BR>&lt;/head&gt;<BR>&lt;body&gt;<BR>&lt;html:form action="/save.do" styleId="formItem" method="post"&nbsp; <SPAN style="COLOR: red">enctype="multipart/form-data"</SPAN>&gt;<BR><SPAN style="COLOR: red">&lt;html:hidden property="id"/&gt;<BR></SPAN>&lt;html:file property="serverpath" styleClass="input-text"&gt;&lt;/html:file&gt;<BR>&lt;/html:form&gt;<BR>&lt;/body&gt;<BR>&lt;/html:html&gt;<BR>4、UploadAction.java<BR>import com.jspsmart.upload.File;<BR>import com.jspsmart.upload.Files;<BR>import com.jspsmart.upload.SmartUpload;<BR><BR>public ActionForward doBatchsave(ActionMapping actionMapping,<BR>&nbsp;&nbsp;&nbsp;ActionForm actionForm, HttpServletRequest httpServletRequest,<BR>&nbsp;&nbsp;&nbsp;HttpServletResponse httpServletResponse) throws Exception {<BR>SmartUpload mySmartUpload = new SmartUpload();<BR>&nbsp;&nbsp;mySmartUpload.initialize(getServlet().getServletConfig(),httpServletRequest, httpServletResponse);&nbsp;&nbsp;<BR>&nbsp;&nbsp;mySmartUpload.upload();<BR>&nbsp;&nbsp;//获取除文件以外的相关信息，例如upload.jsp中隐藏控件id的值<BR>&nbsp;&nbsp;String strId=(String)mySmartUpload.getRequest().getParameter("id");<BR>&nbsp;&nbsp;Files files=mySmartUpload.getFiles();<BR>&nbsp;&nbsp;Collection col=files.getCollection();<BR>&nbsp;&nbsp;Iterator it=col.iterator();<BR>&nbsp;&nbsp;while(it.hasNext()){<BR>&nbsp;&nbsp;&nbsp; File file=(File)it.next();&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;String oldFileName=file.getFileName();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;String extname=file.getFileExt();<BR>&nbsp;&nbsp;&nbsp;&nbsp;String fileName=Sequence.getSequence()+"."+extname;//产生一个唯一的文件名<BR>&nbsp;&nbsp;&nbsp;&nbsp;file.saveAs("c:\\temp\"+fileName);&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;return (actionMapping.findForward("success"));<BR>｝ </DIV><img src ="http://www.blogjava.net/swingboat/aggbug/25657.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2005-12-28 09:18 <a href="http://www.blogjava.net/swingboat/archive/2005/12/28/25657.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在java中一种中文问题的解决办法 </title><link>http://www.blogjava.net/swingboat/archive/2005/12/28/25658.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Wed, 28 Dec 2005 01:18:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2005/12/28/25658.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/25658.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2005/12/28/25658.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/25658.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/25658.html</trackback:ping><description><![CDATA[如果我们想在网址的查询参数中利用中文，则在提交到的页面必须对中文参数进行处理<BR>例如：<BR>&lt;script&gt;<BR>&nbsp;&nbsp; location.href="goto.jsp?type=分类";<BR>&lt;/script&gt;<BR>在goto.jsp页面要获取type参数，需要对此参数进行处理：<BR>String type=(String)request.getParameter("type");<BR>type=type==null?"":type.trim();<BR>type=new String(type.getBytes("ISO-8859-1"),"GBK");<BR><BR>System.out.println("Type:"+type);//这样才能正确输出：Type:分类<BR><img src ="http://www.blogjava.net/swingboat/aggbug/25658.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2005-12-28 09:18 <a href="http://www.blogjava.net/swingboat/archive/2005/12/28/25658.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在struts框架下实现文件的上传 </title><link>http://www.blogjava.net/swingboat/archive/2005/12/28/25654.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Wed, 28 Dec 2005 01:16:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2005/12/28/25654.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/25654.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2005/12/28/25654.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/25654.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/25654.html</trackback:ping><description><![CDATA[<DIV class=postText>
<P>由于jspsmartupload上传文件，当前端页面没有file控件时，后端用jspsmartupload控件upload时将会走入一个死循环。现在采用struts自己提供的功能实现文件的上传。<BR>1、前端页面upload.jsp<BR>&lt;html:form action="/filesave.do" styleId="formItem" method="post"&nbsp; enctype="multipart/form-data"&gt;<BR>&lt;INPUT&nbsp; class='input-file' type="file" name="<SPAN style="COLOR: red">theFile</SPAN>"&gt;<BR>&lt;/html:form&gt;<BR>2、struts-config.xml文件配置<BR>&lt;form-bean name="UploadForm" type="yhp.test.web.UploadForm" /&gt;<BR>&lt;action input="/upload.jsp" name="UploadForm"&nbsp;&nbsp; path="/filesave" scope="request" type="yhp.test.web.UploadAction" validate="false"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/success.jsp" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="error" path="/error.jsp" /&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/action&gt;<BR>3、UploadForm.java文件<BR>package yhp.test.web;</P>
<P>import org.apache.struts.upload.FormFile;<BR>import org.apache.struts.action.ActionForm;</P>
<P>public class UploadForm extends ActionForm {<BR>&nbsp; protected String theText;&nbsp;&nbsp; //使用protected&nbsp;,其它需要上传的form可以继承此form<BR>&nbsp; protected boolean writeFile = true;<BR>&nbsp; protected FormFile <SPAN style="COLOR: red">theFile</SPAN>;<BR>&nbsp; protected String filePath;</P>
<P>&nbsp; public String getTheText() {<BR>&nbsp;&nbsp;&nbsp; return theText;<BR>&nbsp; }<BR>&nbsp; public void setTheText(String theText) {<BR>&nbsp;&nbsp;&nbsp; this.theText = theText;<BR>&nbsp; }<BR>&nbsp; public FormFile getTheFile() {<BR>&nbsp;&nbsp;&nbsp; return theFile;<BR>&nbsp; }<BR>&nbsp; public void setTheFile(FormFile theFile) {<BR>&nbsp;&nbsp;&nbsp; this.theFile = theFile;<BR>&nbsp; }<BR>&nbsp; public void setWriteFile(boolean writeFile) {<BR>&nbsp;&nbsp;&nbsp; this.writeFile = writeFile;<BR>&nbsp; }<BR>&nbsp; public boolean getWriteFile() {<BR>&nbsp;&nbsp;&nbsp; return writeFile;<BR>&nbsp; }<BR>&nbsp; public void setFilePath(String filePath) {<BR>&nbsp;&nbsp;&nbsp; this.filePath = filePath;<BR>&nbsp; }<BR>&nbsp; public String getFilePath() {<BR>&nbsp;&nbsp;&nbsp; return filePath;<BR>&nbsp; }<BR>&nbsp; public void reset() {<BR>&nbsp;&nbsp;&nbsp; writeFile = false;<BR>&nbsp; }<BR>}<BR><BR>4、UploadAction.java文件<BR>package yhp.test.web;</P>
<P>import java.io.ByteArrayOutputStream;<BR>import java.io.File;<BR>import java.io.FileNotFoundException;<BR>import java.io.FileOutputStream;<BR>import java.io.IOException;<BR>import java.io.InputStream;<BR>import java.io.OutputStream;<BR>import java.util.Date;<BR>import javax.servlet.http.HttpServletRequest;<BR>import javax.servlet.http.HttpServletResponse;</P>
<P>import org.apache.struts.action.Action;<BR>import org.apache.struts.action.ActionForm;<BR>import org.apache.struts.action.ActionForward;<BR>import org.apache.struts.action.ActionMapping;<BR>import org.apache.struts.upload.FormFile;</P>
<P><BR>public class UploadAction extends Action {<BR>&nbsp; public ActionForward execute(ActionMapping actionMapping,<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; ActionForm actionForm,<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; HttpServletRequest httpServletRequest,<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; HttpServletResponse httpServletResponse) throws<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exception {<BR>&nbsp;&nbsp;&nbsp; if (actionForm instanceof UploadForm) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 获取上传的目录<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String path = getServlet().getServletContext().getInitParameter("UPLOADPATH");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File f = new File(path);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!f.isDirectory()) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f.mkdir();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UploadForm theForm = (UploadForm) actionForm;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String text = theForm.getTheText();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FormFile file = theForm.getTheFile();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String fileName = file.getFileName();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String contentType = file.getContentType();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean writeFile = theForm.getWriteFile();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String desFileName=path fileName ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String size = (file.getFileSize() + " bytes");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStream stream = file.getInputStream();<BR>&nbsp;&nbsp; OutputStream bos = new FileOutputStream(strFileName);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] buffer = new byte[file.getFileSize()];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stream.read(buffer);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bos.write(buffer);<BR>&nbsp;&nbsp; stream.close();&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bos.close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return actionMapping.findForward("success");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (FileNotFoundException fnfe) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return actionMapping.findForward("success");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (IOException ioe) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return actionMapping.findForward("success");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(Exception eo){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return actionMapping.findForward("error");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;<BR>&nbsp;&nbsp;&nbsp; }else{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return actionMapping.findForward("error");<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; }<BR>}<BR></P></DIV><img src ="http://www.blogjava.net/swingboat/aggbug/25654.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2005-12-28 09:16 <a href="http://www.blogjava.net/swingboat/archive/2005/12/28/25654.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts及jstl使用问题集(一) </title><link>http://www.blogjava.net/swingboat/archive/2005/12/28/25653.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Wed, 28 Dec 2005 01:15:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2005/12/28/25653.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/25653.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2005/12/28/25653.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/25653.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/25653.html</trackback:ping><description><![CDATA[<P>1、ActionForm中的属性必须在&lt;html:form&gt;&lt;/html:form&gt;块中输出<BR>struts-config.xml文件配置：<BR>&nbsp; &lt;form-beans&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;form-bean name="TestForm" type="yhp.test.struts.TestForm" /&gt;<BR>&nbsp; &lt;/form-beans&gt; <BR>&lt;action-mappings&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;action input="/test/teststruts.jsp" name="TestForm" path="/test/teststruts" scope="request" type="yhp.test.struts.TestAction" validate="false"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/test/teststruts.jsp" /&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/action&gt;&nbsp; <BR>&lt;/action-mappings&gt; <BR>TestForm.java文件（两个属性）：<BR>package yhp.test.struts;<BR>import org.apache.struts.action.*;<BR>public class TestForm extends ActionForm{<BR>&nbsp;&nbsp;&nbsp; private String message;<BR>&nbsp;&nbsp;&nbsp; private String data;<BR>&nbsp;&nbsp;&nbsp; public String getData() {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return data;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; public void setData(String data) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.data = data;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; public String getMessage() {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return message;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; public void setMessage(String message) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.message = message;<BR>&nbsp;&nbsp;&nbsp; }<BR>}<BR>TestAction.java文件：<BR>public ActionForward execute(ActionMapping actionMapping,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActionForm actionForm, HttpServletRequest httpServletRequest,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletResponse httpServletResponse) throws Exception {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(actionForm instanceof TestForm){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TestForm form=(TestForm)actionForm;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; form.setMessage("Test Struts!");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; form.setData("Return data is YHP");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return actionMapping.findForward("success");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; }<BR>teststruts.jsp文件：<BR>&lt;%@ page contentType="text/html; charset=GBK" %&gt;<BR>&lt;%@ taglib uri="<A href="http://jakarta.apache.org/struts/tags-html"><FONT color=#000080>http://jakarta.apache.org/struts/tags-html</FONT></A>" prefix="html" %&gt;<BR>&lt;%@ taglib uri="<A href="http://java.sun.com/jstl/core"><FONT color=#000080>http://java.sun.com/jstl/core</FONT></A>" prefix="c" %&gt;<BR>&lt;%<BR>String contextPath = request.getContextPath();<BR>response.setLocale(java.util.Locale.CHINA);<BR>%&gt;<BR>&lt;html&gt;<BR>&nbsp;&lt;head&gt;<BR>&nbsp;&lt;/head&gt;&nbsp; <BR>&lt;body&gt;<BR><SPAN style="COLOR: red">&lt;html:form action="/test/teststruts.do" styleId="formItem" method="post"&gt;<BR></SPAN>&nbsp;&nbsp; &lt;html:text&nbsp; property="message"/&gt;&lt;br&gt;<BR>&nbsp;&nbsp; &lt;html:text&nbsp; property="data"/&gt;&lt;br&gt;<BR><SPAN style="COLOR: red">&lt;/html:form&gt;<BR></SPAN>&lt;/body&gt;<BR>&lt;/html&gt;<BR>说明：没有红色部分代码，后台会报出Cannot find bean org.apache.struts.taglib.html.BEAN in any scope的错误信息。这样说明struts中ActionForm的数据是基于html中对应form的数据。<BR>2、不利用struts标签输出ActionForm的属性值<BR>&lt;%@ page import="yhp.test.struts.TestForm"%&gt;<BR>&lt;%<BR><SPAN style="COLOR: red">TestForm form=(TestForm)request.getAttribute("TestForm");//ActionForm类名<BR></SPAN>%&gt;<BR>&lt;html&gt;<BR>&nbsp;&lt;head&gt;<BR>&nbsp;&lt;/head&gt;&nbsp; <BR>&lt;body&gt;<BR>&lt;html:form action="/test/teststruts.do" styleId="formItem" method="post"&gt;<BR>&nbsp;&nbsp; &lt;html:text&nbsp; property="message"/&gt;&lt;br&gt;<BR>&nbsp;&nbsp; &lt;html:text&nbsp; property="data"/&gt;&lt;br&gt;<BR>&nbsp;&lt;%=<SPAN style="COLOR: red">form.getMessage</SPAN>()%&gt;&lt;br&gt;<BR>&lt;/html:form&gt;<BR>&lt;/body&gt;<BR>&lt;/html&gt;<BR>3、通过JSTL输出ActionForm中的属性值<BR>利用JSTL输出AcitonForm中的属性值：&lt;c:out value="${TestForm.data}" /&gt;&lt;br&gt;<BR>利用JSTL输出AcitonForm中的属性值：&lt;c:out value="${requestScope.TestForm.data}" /&gt;&lt;br&gt;&nbsp; <BR><FONT color=#ff0000>红色的字是ActionForm类名，两句的结果是一样的<BR><SPAN style="COLOR: #000000">说明：struts把ActionForm写入了requestScope中，类名作为requestScope的名字。<BR>即：httpServletRequest.setAttribute("TestForm",actionForm);<BR>&lt;c:out value="${requestScope.<SPAN style="COLOR: red">TestForm</SPAN>.data}" /&gt;&nbsp; 也就是输出一个bean的属性值。</SPAN></FONT></P><img src ="http://www.blogjava.net/swingboat/aggbug/25653.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2005-12-28 09:15 <a href="http://www.blogjava.net/swingboat/archive/2005/12/28/25653.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>junit的使用</title><link>http://www.blogjava.net/swingboat/archive/2005/12/28/25651.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Wed, 28 Dec 2005 01:14:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2005/12/28/25651.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/25651.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2005/12/28/25651.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/25651.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/25651.html</trackback:ping><description><![CDATA[<DIV class=postText>
<P>背景：当我们写完一个类的时候，需要对类的某些方法进行测试。我以前的做法是在类的main函数中，new一个类的实例，然后调用类的方法进行测试。当需要测试的方法越来越较多的时候，main函数也在逐渐的变大，最后连自己都糊涂了<IMG height=20 src="http://www.cnblogs.com/Emoticons/QQ/10.gif" width=20 border=0>。这时候就需要junit了。<BR>编码原则：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从技术上强制你先考虑一个类的功能，也就是这个类提供给外部的接口，而不至于太早陷入它的细节。这是面向对象提倡的一种设计原则。<BR>如果你要写一段代码：<BR>1. 先用 junit 写测试，然后再写代码<BR>2. 写完代码，运行测试，测试失败<BR>3. 修改代码，运行测试，直到测试成功 <BR>编写步骤：如下图<BR><IMG src="http://www.cnblogs.com/images/cnblogs_com/swingboat/step.jpg" border=0><BR>测试代码：<BR>package yhp.test.junit;</P>
<P>import junit.framework.*;<BR>public class TestCar extends TestCase {<BR>&nbsp;&nbsp;&nbsp; protected int expectedWheels;<BR>&nbsp;&nbsp;&nbsp; protected Car myCar;<BR>&nbsp;&nbsp;&nbsp; public TestCar(String name) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super(name);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; protected void setUp(){&nbsp;&nbsp;//进行初始化任务<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; expectedWheels = 4;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myCar = new Car();<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; public static Test suite()&nbsp;&nbsp;&nbsp; {//JUnit的TestRunner会调用suite方法来确定有多少个测试可以执行<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new TestSuite(TestCar.class);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; public void testGetWheels(){//以test开头，注意命名<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assertEquals(expectedWheels, myCar.getWheels());<BR>&nbsp;&nbsp;&nbsp; }<BR>}<BR><BR>以下是通过eclipse自带的junit工具产生的代码：<BR>package yhp.test.junit;<BR>import junit.framework.TestCase;<BR>public class TestCar2 extends TestCase {<BR>&nbsp;&nbsp;&nbsp; protected int expectedWheels;<BR>&nbsp;&nbsp;&nbsp; protected Car myCar;<BR>&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; junit.textui.TestRunner.run(TestCar2.class);//TestCar是个特殊suite的静态方法<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; protected void setUp() throws Exception {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.setUp();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; expectedWheels = 4;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myCar = new Car();<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; protected void tearDown() throws Exception {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.tearDown();<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; public TestCar2(String arg0) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super(arg0);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; public final void testGetWheels() {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assertEquals(expectedWheels, myCar.getWheels());<BR>&nbsp;&nbsp;&nbsp; }<BR>}<BR><BR>当有多个测试类的时候，系统能进行统一测试，这时可以利用TestSuite来实现。可以将TestSuite看作是包裹测试的一个容器。<BR>通过eclipse自带的工具生成的代码如下：<BR>package yhp.test.junit;<BR>import junit.framework.Test;<BR>import junit.framework.TestSuite;</P>
<P>public class AllTests {<BR>&nbsp;&nbsp;&nbsp;&nbsp; public static Test suite() {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TestSuite suite = new TestSuite("Test for yhp.test.junit");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //$JUnit-BEGIN$<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suite.addTest(TestCar.suite());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //调用的方法，参数不一样，实际是一致的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suite.addTestSuite(TestCar2.class);&nbsp; //<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //$JUnit-END$<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return suite;<BR>&nbsp;&nbsp;&nbsp; }<BR>}</P></DIV><img src ="http://www.blogjava.net/swingboat/aggbug/25651.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2005-12-28 09:14 <a href="http://www.blogjava.net/swingboat/archive/2005/12/28/25651.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp页面，以excel的方式输出 </title><link>http://www.blogjava.net/swingboat/archive/2005/12/28/25649.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Wed, 28 Dec 2005 01:13:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2005/12/28/25649.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/25649.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2005/12/28/25649.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/25649.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/25649.html</trackback:ping><description><![CDATA[在jsp页面中加入以下的语句，就可以使jsp以excel的形式输出。<BR>response.setHeader("Content-Type", "application/vnd.ms-excel;charset=GBK");<BR>response.setContentType("application/vnd.ms-excel;charset=GBK"); <img src ="http://www.blogjava.net/swingboat/aggbug/25649.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2005-12-28 09:13 <a href="http://www.blogjava.net/swingboat/archive/2005/12/28/25649.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在jboss4环境下，URL查询参数中支持中文</title><link>http://www.blogjava.net/swingboat/archive/2005/12/28/25650.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Wed, 28 Dec 2005 01:13:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2005/12/28/25650.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/25650.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2005/12/28/25650.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/25650.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/25650.html</trackback:ping><description><![CDATA[在jboss4环境下，使URL参数中支持中文，例如：<BR><A href="http://site.net/?name"><FONT color=#000080>http://site.net?name</FONT></A>=中国<BR>找到jboss4的deploy\jbossweb-tomcat50.sar\server.xml,编辑该文件，在下面的XML节点中增加红色的字<BR>&lt;Connector port="8080" address="${jboss.bind.address}"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxThreads="150" maxHttpHeaderSize="8192"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; minSpareThreads="25" maxSpareThreads="75"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; enableLookups="false" redirectPort="8443" acceptCount="100"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; connectionTimeout="20000" disableUploadTimeout="true" <SPAN style="COLOR: red">URIEncoding="GBK" </SPAN>/&gt; <img src ="http://www.blogjava.net/swingboat/aggbug/25650.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2005-12-28 09:13 <a href="http://www.blogjava.net/swingboat/archive/2005/12/28/25650.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>