<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>guoyiqi</title>
    <description></description>
    <link>http://guoyiqi.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>Ajax Hacks ajax离线存储</title>
        <author>guoyiqi</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoyiqi.javaeye.com">guoyiqi</a>&nbsp;
          链接：<a href="http://guoyiqi.javaeye.com/blog/92828" style="color:red;">http://guoyiqi.javaeye.com/blog/92828</a>&nbsp;
          发表时间: 2007年06月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font color="#c60a00">AMASS</font></p>
<p>一个Flash和<strong style="COLOR: black; BACKGROUND-COLOR: #ffff66">AJAX</strong>的结合，这次是增加<strong style="COLOR: black; BACKGROUND-COLOR: #ffff66">AJAX</strong>的存储量，全称是：<a href="http://codinginparadise.org/projects/storage/README.html" onclick="javascript:urchinTracker ('/outbound/codinginparadise.org');" target="_blank"><strong style="COLOR: black; BACKGROUND-COLOR: #ffff66">AJAX</strong> MAssive Storage System</a></p>
          <br/>
          <span style="color:red;">
            <a href="http://guoyiqi.javaeye.com/blog/92828#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 21 Jun 2007 16:58:27 +0800</pubDate>
        <link>http://guoyiqi.javaeye.com/blog/92828</link>
        <guid>http://guoyiqi.javaeye.com/blog/92828</guid>
      </item>
      <item>
        <title>ajax 跨域</title>
        <author>guoyiqi</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoyiqi.javaeye.com">guoyiqi</a>&nbsp;
          链接：<a href="http://guoyiqi.javaeye.com/blog/92821" style="color:red;">http://guoyiqi.javaeye.com/blog/92821</a>&nbsp;
          发表时间: 2007年06月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          使用动态的script标签发起Web Services请求
<div>使用动态的script标签和特殊的与JSON相关的JavaScript类来轻松实现无XML的Web services。</div>
<div style="MARGIN: 9pt 0cm; LINE-HEIGHT: 16pt">从Ajax应用发起到第三方Web服务的请求是一种痛苦，但是新的Web服务减轻了这种痛苦，它提供了返回JSON格式<strong>[Hack #7]</strong>结果的选择以代替XML格式。事实上，如果你使用动态script标签方法发起Web服务请求，而且Web服务可让你指定一个JavaScript回调函数，你就可以以一种无缝的跨域跨浏览器的方式自由访问Web服务。</div>
<div style="MARGIN: 9pt 0cm; LINE-HEIGHT: 16pt">下面是你尝试这个动态的script标签请求所需要的：</div>
<div style="LAYOUT-GRID-MODE: char; LINE-HEIGHT: 15pt">l&nbsp;&nbsp; 我的JSONscriptRequest类</div>
<div style="LAYOUT-GRID-MODE: char; LINE-HEIGHT: 15pt">l&nbsp;&nbsp; 访问返回JSON格式结果并可让你指定回调函数的Web service</div>
<div style="LINE-HEIGHT: 15pt">为创建JSONscriptRequest类，我提炼了大量已有的信息，然后调整其以满足上面的第二个要求。直到最近，要找到满足那个要求的Web service近乎不可能，除非你自己写一个。幸运的是，Yahoo!已经开始在它的许多Web service上提供其他的选择。特别地，Yahoo!的与很多搜索相关的Web service，以及它的geocoding、map image和traffic等Web service，现在可以返回封装在一个回调函数里的JSON值。</div>
<div>使用Geocoding Web Service</div>
<div style="LINE-HEIGHT: 15pt">比起使用XMLHttpRequest对象和代理，这个东西算很容易的。JSONscript- Request类做了创建script标签的脏活；这个标签动态地发起实际的Web service请求。举个快速的例子，这里我将使用Yahoo!的Geocoding Web service，将一个邮编94107转化成一个经/纬对：</div>
<div>&lt;html&gt;</div>
<div>&lt;body&gt;</div>
<div>//包含JSONscriptRequest类</div>
<div>&lt;script type=&quot;text/javascript&quot; src=&quot;jsr_class.js&quot;&gt;&lt;/script&gt;</div>
<div>&lt;script type=&quot;text/javascript&quot;&gt;</div>
<div>//定义回调函数</div>
<div>function getGeo(jsonData) {&nbsp;&nbsp;&nbsp;&nbsp; </div>
<div>&nbsp;&nbsp;&nbsp; alert('Latitude = ' + jsonData.ResultSet.Result[0].Latitude +</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' Longitude = ' + jsonData.ResultSet.Result[0].Longitude);</div>
<div>&nbsp;&nbsp;&nbsp; bObj.removeScriptTag(); </div>
<div>}</div>
<div>// web service 调用</div>
<div style="TEXT-INDENT: 16.95pt">var req = 'http://api.local.yahoo.com/MapsService/V1/geocode?appid=YahooDemo</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;output=json&amp;callback=getGeo&amp;location=94107'; </div>
<div>//创建一个新的Request对象</div>
<div>bObj = new JSONscriptRequest(req); </div>
<div>//构建动态脚本标签</div>
<div>bObj.buildScriptTag(); </div>
<div>//添加脚本标签到页面中</div>
<div>bObj.addScriptTag();</div>
<div>&lt;/script&gt;</div>
<div>&lt;/body&gt;</div>
<div>&lt;/html&gt;</div>
<div style="MARGIN: 9pt 0cm; LINE-HEIGHT: 16pt">运行这个程序发起一个到Yahoo!的Geocoing Web service的请求，会弹出如图9-5所示的alert框。这个alert框显示了邮编94107的经度和纬度。</div>
<div align="center" style="MARGIN: 12pt 0cm 8pt 2.1pt"><img src="http://book.csdn.net/BookFiles/272/img/image048.jpg" border="0" height="114" alt="" width="305" /></div>
<div align="center">图9-5：从Yahoo的Geocoding Web service所得的坐标</div>
<div style="MARGIN: 9pt 0cm; LINE-HEIGHT: 16pt">Web service请示（上述script里的req变量）指出Web service应该返回JSON编码的数据(output=json)，而且数据应该被封装在一个名为getGeo()（callback=getGeo）的回调函数里。你可以剪切并粘贴代码中的URL到你的浏览器中，然后就会看到Web service的输出。输出如下：</div>
<div style="TEXT-INDENT: 18.05pt">getGeo({&quot;ResultSet&quot;:{&quot;Result&quot;:[{&quot;precision&quot;:&quot;zip&quot;,&quot;Latitude&quot;:&quot;37.7668&quot;</div>
<div>,&quot;Longitude&quot;:&quot;-122.3959&quot;,&quot;Address&quot;:&quot;&quot;,&quot;City&quot;:&quot;SAN </div>
<div>FRANCISCO&quot;,&quot;State&quot;:&quot;CA&quot;,&quot;Zip&quot;:&quot;94107&quot;,&quot;Country&quot;:&quot;US&quot;}]}});</div>
<div style="MARGIN: 9pt 0cm; LINE-HEIGHT: 16pt">这是一个有效的JavaScript语句，所以它可以是返回JavaScript的script标签的target（没有回调函数的原始JSON数据，不是有效的JavaScript语句，所以如果它作为script标签的target，那么就会载入失败）。作为比较，看一下这个调用的XML版本的输出（为这本书格式化过）：</div>
<div>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</div>
<div>&lt;ResultSet xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns=</div>
<div>&quot;urn:yahoo:maps&quot; xsi:schemaLocation=</div>
<div>&quot;urn:yahoo:maps http://api.local.yahoo.com/MapsService/V1/GeocodeResponse.</div>
<div>xsd&quot;&gt;</div>
<div>&lt;Result precision=&quot;zip&quot;&gt;&lt;Latitude&gt;37.7668&lt;/Latitude&gt;</div>
<div>&lt;Longitude&gt;-122.3959&lt;/Longitude&gt;&lt;Address&gt;&lt;/Address&gt;</div>
<div>&lt;City&gt;SAN FRANCISCO&lt;/City&gt;&lt;State&gt;CA&lt;/State&gt;&lt;Zip&gt;94107&lt;/Zip&gt;</div>
<div>&lt;Country&gt;US&lt;/Country&gt;&lt;/Result&gt;</div>
<div>&lt;/ResultSet&gt;</div>
<div style="MARGIN: 9pt 0cm; LINE-HEIGHT: 16pt">JSONscriptRequest对象的buildScriptTag方法建立了如下的script标签：</div>
<div>&lt;script src=&quot;getGeo({&quot;ResultSet&quot;:{&quot;Result&quot;:[{&quot;precision&quot;:&quot;zip&quot;,</div>
<div>&quot;Latitude&quot;:&quot;37.7668&quot;,&quot;Longitude&quot;:&quot;-122.3959&quot;,&quot;Address&quot;:&quot;&quot;,&quot;City&quot;:&quot;SAN </div>
<div>FRANCISCO&quot;,&quot;State&quot;:&quot;CA&quot;,&quot;Zip&quot;:&quot;94107&quot;,&quot;Country&quot;:&quot;US&quot;}]}});&quot;</div>
<div>&nbsp;type=&quot;text/javascript&quot;&gt;</div>
<div>要实际执行Web service请求，script标签就要加到页面里去。addScriptTag方法将script标签附加到已经载入到你的浏览器窗口中的HTML页面里。这个动作引起了getGeo()函数的调用，同时JSON编码的数据被传送给这个函数。下面看看这个标签中最神奇的部分；它是使用JSON编码的数据而不是XML的副作用。当JSON编码的数据以字符串形式作为JavaScript函数的参数时，JavaScript解释器自动将JSON返回值转化成一个JavaScript对象。基本上，解析的步骤是自动完成的，你可以立即引用这些数据：</div>
<div>alert('Latitude = ' + jsonData.ResultSet.Result[0].Latitude +</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;' Longitude = ' + jsonData.ResultSet.Result[0].Longitude);</div>
<div>正反面</div>
<div>HTML script标签是自由访问基于浏览器的应用的最后边界。从你的角度看来，它可能是一个安全漏洞，或者是一个使富客户端更丰富的工具。然而，它最普遍的用处就是网络广告商使用它将多姿多彩的广告拉到你的网页中。</div>
<div>对于普通的Ajax或者Ajaj（Asynchronous JavaScript and JSON）开发者而言，动态script标签方法在某些场景下能使事情变得简单。然而，XMLHttpRequest对象仍然是更可靠的、灵活安全的请求机制（见表9-1）。</div>
<div style="TEXT-JUSTIFY: inter-ideograph">表9-1&nbsp; XMLHttpRequest 与动态script标签对照表</div>
<div align="center">
<table cellspacing="0" border="1" width="434" cellpadding="0" style="WIDTH: 325.35pt; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-COLLAPSE: collapse; BORDER-BOTTOM-STYLE: none">
    <tbody>
        <tr>
            <td width="114" style="PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0cm; WIDTH: 85.55pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none">
            <div>XmlHttpRequest</div>
            </td>
            <td width="146" style="PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #d9d9d9; PADDING-BOTTOM: 0cm; WIDTH: 109.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none">
            <div style="TEXT-JUSTIFY: inter-ideograph">Dynamic script tag</div>
            </td>
        </tr>
        <tr style="HEIGHT: 12.35pt">
            <td width="174" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 130.4pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>跨浏览器兼容性</div>
            </td>
            <td width="114" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 85.55pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>No</div>
            </td>
            <td width="146" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 109.4pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>Yes</div>
            </td>
        </tr>
        <tr style="HEIGHT: 12.35pt">
            <td width="174" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 130.4pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>强制的跨域浏览器安全</div>
            </td>
            <td width="114" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 85.55pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>Yes</div>
            </td>
            <td width="146" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 109.4pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>No</div>
            </td>
        </tr>
        <tr style="HEIGHT: 12.35pt">
            <td width="174" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 130.4pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>是否能接收HTTP状态码</div>
            </td>
            <td width="114" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 85.55pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>Yes</div>
            </td>
            <td width="146" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 109.4pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div style="LAYOUT-GRID-MODE: char">No (fails on any HTTP status other than 200)</div>
            </td>
        </tr>
        <tr style="HEIGHT: 12.35pt">
            <td width="174" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 130.4pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>是否支持HTTP GET和POST</div>
            </td>
            <td width="114" style="PADDING-RIGHT: 0cm; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 85.55pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>Yes</div>
            </td>
            <td width="146" style="PADDING-RIGHT: 0cm; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 109.4pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>No (GET only)</div>
            </td>
        </tr>
        <tr style="HEIGHT: 12.35pt">
            <td width="174" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 130.4pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>能否发送/接收HTTP头</div>
            </td>
            <td width="114" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 85.55pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>Yes</div>
            </td>
            <td width="146" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 109.4pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>No</div>
            </td>
        </tr>
        <tr style="HEIGHT: 12.35pt">
            <td width="174" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 130.4pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>能否接收XML</div>
            </td>
            <td width="114" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 85.55pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>Yes</div>
            </td>
            <td width="146" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 109.4pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div style="LAYOUT-GRID-MODE: char">Yes (but only embedded in a JavaScript statement)</div>
            </td>
        </tr>
        <tr style="HEIGHT: 12.35pt">
            <td width="174" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 130.4pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>能否接收JSON</div>
            </td>
            <td width="114" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 85.55pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>Yes</div>
            </td>
            <td width="146" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 109.4pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div style="LAYOUT-GRID-MODE: char">Yes (but only embedded in a JavaScript statement)</div>
            </td>
        </tr>
        <tr style="HEIGHT: 12.35pt">
            <td width="174" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 130.4pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>是否提供同步和异步调用</div>
            </td>
            <td width="114" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 85.55pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>Yes</div>
            </td>
            <td width="146" style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 2pt; WIDTH: 109.4pt; BORDER-TOP-STYLE: none; PADDING-TOP: 2pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 12.35pt">
            <div>No (asynchronous only)</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div>script标签的主要优点在于它并不受Web浏览器跨域安全限制的束缚，以及比</div>
<div style="MARGIN: 9pt 0cm; LINE-HEIGHT: 15pt">XMLHttpRequest具备更好的浏览器兼容性。进一步来说，如果你的Web service碰巧提供了JSON输出以及一个回调函数，你可以从JavaScript应用中敏捷地访问Web service，而无需解析返回的数据。</div>
<div style="MARGIN: 9pt 0cm; LINE-HEIGHT: 15pt">在所有的最新浏览器中XMLHttpRequest都有效，但是IE的实现和其他主要浏览器稍微有所不同，从而需要一个兼容性层（例如Sarissa）来使其工作在所有浏览器上。XMLHttpRequest能接收原始的JSON数据，还可以接收XML、普通文本以及HTML。事实上，它能轻松地处理任何非二进制数据。它还能发送和接收独立的HTTP头部，可以执行HTTP GET和POST请求，同时支持同步和异步调用。一言以蔽之，如果你的Web service请求存在问题，譬如无效的XML或者一个服务器错误，XMLHttpRequest为程序员提供了解决这种情况的工具。</div>
<div style="MARGIN: 9pt 0cm; LINE-HEIGHT: 15pt">相比较而言，script标签提供很少的XMLHttpRequest能力。最值得注意的坏处是它不能优雅地处理错误。如果Web service返回无效的JavaScript语句给script标签，就会产生一个JavaScript错误。如果Web service返回封装在一个回调函数里的无效JSON数据，那么当无效的JSON数据被传给回调函数时会返回一个JavaScript错误。而且，如果你的Web service返回除200（成功）外的HTTP返回码，script标签会默默的失败。</div>
<div style="MARGIN: 9pt 0cm; LINE-HEIGHT: 15pt">事实上，script标签请求并不是在所有的浏览器上都以同一方式工作。事件处理机制（你如何等待标签来载入）有些不同。技术上来说，动态生成的script标签会异步载入，但是没有可靠的、跨平台的方式来等待script标签载入。微软的IE使用了这里描述的一个方法，而HTML4.0规范建议采用onload事件处理器（尽管它并不是在所有的浏览器上都可用）。</div>
<div style="MARGIN: 9pt 0cm; LINE-HEIGHT: 16pt">围绕script标签的安全问题也不能被忽视。下载到你的浏览器中的恶意脚本以与你页面中的其他脚本一样的权限级别运行。因此，恶意的脚本能够偷取你的cookies，或者滥用你在服务器端拥有的授权级别。这些恶意脚本能更轻易地使用script标签发送和接收偷来的数据。出于此原因，使用动态script标签方法的应用应该仔细检查。</div>
<div style="MARGIN: 9pt 0cm; LINE-HEIGHT: 16pt">有了这些缺点，程序员就不会一窝蜂地使用script标签来实现或重新实现Web service请求。然而它对于脚本应用来说仍然是一门有用的技术&mdash;&mdash;可以轻易地从第三方检索非机密数据。</div>
<div style="MARGIN-TOP: 0cm">参考资料</div>
<div style="MARGIN: 4pt 0cm">JSONscriptRequest类：<em><a href="http://www.xml.com/2005/12/21/examples/jsr_class.zip"><font color="#336699">http://www.xml.com/2005/12/21/examples/jsr_class.zip</font></a></em>；Yahoo! Web Services；Geocoding API：<em><a href="http://developer.yahoo.net/maps/rest/V1/geocode.html"><font color="#336699">http://developer.yahoo.net/maps/rest/V1/ geocode.html</font></a></em>。</div>
<div style="MARGIN: 4pt 0cm"></div>
<div style="MARGIN: 4pt 0cm">配置Apache以处理跨域问题
<p class="aff9" style="MARGIN-BOTTOM: 8pt">配置Apache Web服务器使Apache模块能为Ajax域限制提供一个解决方案。</p>
<p class="a6" style="MARGIN: 4pt 0cm">你也许已经知道，到目前为止，XMLHttpRequest不能自动跨域运行。例如，当你下载一个Web页面时，你不能使用Request对象对不同于那个Web页面所在域的其他域发起请求。幸运的是，有一个简单的解决方案能避免此限制&mdash;&mdash;Apache Web服务器的mod_rewrite。&ldquo;这个模块使用基于规则的重写引擎（基于一个正则表达式的解析器）来重写被请求的URL，&rdquo;按照Apache的在线文档所说（可见<em><a href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html">http://httpd.apache.org/docs/1.3/- mod/mod_rewrite.html</a></em>）。</p>
<p class="ab" style="MARGIN-TOP: 10pt">跨域障碍</p>
<p class="a6" style="MARGIN: 0cm 0cm 0pt">在我们阅读这个解决方案的描述之前，让我们来看看一系列示范性的函数，它们完成了XMLHttpRequest的相关工作：</p>
<p class="af6">function getXmlHttpObject(){</p>
<p class="af6">&nbsp;&nbsp;&nbsp; if (window.XMLHttpRequest)</p>
<p class="af6">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new XMLHttpRequest();</p>
<p class="af6">&nbsp;&nbsp;&nbsp; else if (window.ActiveXObject)</p>
<p class="af6">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);</p>
<p class="af6">&nbsp;&nbsp;&nbsp; else {</p>
<p class="af6">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(&quot;XMLHttpRequest not supported!&quot;);</p>
<p class="af6">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;</p>
<p class="af6">&nbsp;&nbsp;&nbsp; }</p>
<p class="af6">}</p>
<p class="af6">function handleHttpResponse() {</p>
<p class="af6">&nbsp;&nbsp;&nbsp; if (http.readyState == 4) {</p>
<p class="af6">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; results = http.responseText;</p>
<p class="af6">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(results);</p>
<p class="af6">&nbsp;&nbsp;&nbsp; }</p>
<p class="af6">}</p>
<p class="af6">function doSomeStuff() {</p>
<p class="af6">&nbsp;&nbsp;&nbsp; var post_arg1 = document.my_form.post_arg1.value;</p>
<p class="af6">&nbsp;&nbsp;&nbsp; var post_arg2 = document.my_form.post_arg2.value;</p>
<p class="af6">&nbsp;&nbsp;&nbsp; var post_url = 'http://yahoo.com/form_do'</p>
<p class="af6">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post_data = 'post_arg1=' + post_arg1 + '&amp;post_arg2=' + post_arg2;</p>
<p class="af6">&nbsp;&nbsp;&nbsp; http.open(&quot;POST&quot;, post_url);</p>
<p class="af6">&nbsp;&nbsp;&nbsp; http.setRequestHeader('Content-Type', </p>
<p class="af6">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'application/x-www-form-urlencoded; charset=UTF-8');</p>
<p class="af6">&nbsp;&nbsp;&nbsp; http.send(post_data);</p>
<p class="af6">&nbsp;&nbsp;&nbsp; http.onreadystatechange = handleHttpResponse;</p>
<p class="af6">&nbsp;&nbsp;&nbsp; return false;</p>
<p class="af6">}</p>
<p class="af6">var http = getXmlHttpObject();</p>
<p class="a6" style="LINE-HEIGHT: 15pt">你所见到的三个函数中的最后一个将被调用来执行HTTP请求。</p>
<p class="a6" style="LINE-HEIGHT: 15pt">现在，假设这个脚本在一个URL为<em><a href="http://premshree.org/form">http://premshree.org/form</a></em>的HTML文件中。表单中的某些事件处理器（onBlur、onClick、onSubmit等）触发doSomeStuff()，它接下来发起一个请求到另一个域（yahoo.com）中的form_do。</p>
<p class="a6" style="LINE-HEIGHT: 15pt">注意包含表单和JavaScript的HTML文件域和执行动作（<em>http://yahoo.com/ form_do</em>）的文件域之间的不匹配之处。域的不匹配就是问题之源。</p>
<p class="ab">跨域的XMLHttpRequest工作</p>
<p class="a6" style="LINE-HEIGHT: 15pt">IE和基于Mozilla的浏览器处理跨域请求有所不同。你可以在IE中执行跨域请求；然而，这需要改变浏览器默认的安全设置，或者添加特定的主机到你的&ldquo;信任主机&rdquo;列表中。可见<em><a href="http://msdn.microsoft.com/msdnmag/issues/02/06/web/">http://msdn.microsoft.com/msdnmag/issues/02/06/web/</a></em>：</p>
<p class="a6" style="LINE-HEIGHT: 15pt">由于没有一种方法指定哪些页面应该信任其他页面来访问它们的数据，Internet Explorer简单地规定如果两个页面不在同一个域中，它们就不能通信。更确切地说，Zone Manager（可在IE设置的安全项里找到）允许用户设置一个页面可以访问另一个页面，但是如你所知，大多数用户并不做设定，而只是在弹出窗口时才设置。你可以建议用户将页面添加到信任站点区域，或者仅仅在对话框中点Yes&hellip;&hellip;</p>
<p class="a6" style="LINE-HEIGHT: 15pt">另一方面，在Mozilla中有签名脚本的概念（可见<em><a href="http://www.mozilla.org/projects/-%20security/components/signed-scripts.html">http://www.mozilla.org/projects/- security/components/signed-scripts.html</a></em>）。在基于Mozilla的浏览器中，根据包含在跨域请求中的不同域，你应该赋予一个或更多的UniversalBrowser权限。例如，如果你正从本地文件系统访问一个远程主机，也就是说从file://访问http://，你应该开启UniversalBrowserRead权限。</p>
<p class="a6" style="LINE-HEIGHT: 15pt">现实的情形是，跨域的XMLHttpRequest请求在你真正在乎的浏览器中并不能</p>
<p class="a6" style="MARGIN-TOP: 0cm">按照你想要的运行方式工作（当然除非你足够疯狂，强迫天真的、信任你的用户处理诸如签名脚本以及信任主机这样的事情）。</p>
<p class="ab" style="MARGIN-TOP: 10pt">存在解决方案吗</p>
<p class="a6" style="MARGIN: 5pt 0cm">是的，感谢一些mod_rewrite的魔法。你所需要的就是RewriteRule指令。</p>
<p class="a6" style="MARGIN: 5pt 0cm">需要对Apache配置文件做出一些配置变化（通常是httpd.conf）。下面就是包含的步骤：</p>
<p class="a6" style="MARGIN: 5pt 0cm">1. 配置Apache，开启proxy：</p>
<p class="af6">./configure &ndash;enable-proxy</p>
<p class="a6" style="MARGIN: 5pt 0cm">2. 确信开启了RewriteEngine：</p>
<p class="af6">RewriteEngine on</p>
<p class="a6" style="MARGIN: 5pt 0cm">3. 添加以下规则：</p>
<p class="af6">RewriteRule ^/form_do$ http://yahoo.com/form_do [p]</p>
<p class="a6" style="MARGIN: 5pt 0cm">这里你所见的P标志表示一个pass-through proxy。</p>
<p class="ae" style="MARGIN: 8pt 1cm 12pt 73.5pt"><img src="http://book.csdn.net/BookFiles/272/img/image004.jpg" height="47" alt="" width="44" />提示：可见<em><a href="http://www.google.com/search?q=pass-through+proxying">http://www.google.com/search?q=pass-through+ proxying</a></em>。</p>
<p class="a6" style="MARGIN: 5pt 0cm">现在，在JavaScript代码中不再请求<em><a href="http://yahoo.com/form_do">http://yahoo.com/form_do</a></em>，而是使用URL <em>/form_do</em>。请求代码如下所示：</p>
<p class="af6">var post_url = '/form_do';</p>
<p class="a6" style="MARGIN: 5pt 0cm">就这样&mdash;&mdash;你完成了！感谢Gopan以及<em><a href="http://t3.dotgnu.info/">http://t3.dotgnu.info</a></em>为本hack提供了大量信息。</p>
<p class="a6" align="right" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: right"><em>&mdash;&mdash;Premshree Pillai</em></p>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://guoyiqi.javaeye.com/blog/92821#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 21 Jun 2007 16:40:46 +0800</pubDate>
        <link>http://guoyiqi.javaeye.com/blog/92821</link>
        <guid>http://guoyiqi.javaeye.com/blog/92821</guid>
      </item>
      <item>
        <title>FileInputStream和FileOutputStream</title>
        <author>guoyiqi</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoyiqi.javaeye.com">guoyiqi</a>&nbsp;
          链接：<a href="http://guoyiqi.javaeye.com/blog/86978" style="color:red;">http://guoyiqi.javaeye.com/blog/86978</a>&nbsp;
          发表时间: 2007年06月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;FileStreamDemo&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">byte</span><span>[]&nbsp;buffer&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">byte</span><span>[</span><span class="number">1024</span><span>]; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;来源文件 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream&nbsp;fileInputStream&nbsp;= &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">new</span><span>&nbsp;FileInputStream(</span><span class="keyword">new</span><span>&nbsp;File(args[</span><span class="number">0</span><span>])); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;目的文件 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream&nbsp;fileOutputStream&nbsp;= &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">new</span><span>&nbsp;FileOutputStream(</span><span class="keyword">new</span><span>&nbsp;File(args[</span><span class="number">1</span><span>])); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;available()可取得未读取的数据长度 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;复制文件：&quot;</span><span>&nbsp;+ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileInputStream.available()&nbsp;+&nbsp;</span><span class="string">&quot;字节&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>(</span><span class="keyword">true</span><span>)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(fileInputStream.available()&nbsp;&lt;&nbsp;</span><span class="number">1024</span><span>)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;剩余的数据比1024字节少 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;一位一位读出再写入目的文件 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;remain&nbsp;=&nbsp;-</span><span class="number">1</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>((remain&nbsp;=&nbsp;fileInputStream.read()) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;!=&nbsp;-</span><span class="number">1</span><span>)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileOutputStream.write(remain); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">break</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;从来源文件读取数据至缓冲区 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileInputStream.read(buffer); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;将数组数据写入目的文件 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileOutputStream.write(buffer); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;关闭流 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileInputStream.close(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileOutputStream.close(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;复制完成&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">catch</span><span>(ArrayIndexOutOfBoundsException&nbsp;e)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println( &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;using:&nbsp;java&nbsp;FileStreamDemo&nbsp;src&nbsp;des&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">catch</span><span>(IOException&nbsp;e)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
使用available()，然后读int而不是byte[].如果不使用read()和write(int)的方法，会将多出的byte[]写入目标文件。
          <br/>
          <span style="color:red;">
            <a href="http://guoyiqi.javaeye.com/blog/86978#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 05 Jun 2007 11:34:34 +0800</pubDate>
        <link>http://guoyiqi.javaeye.com/blog/86978</link>
        <guid>http://guoyiqi.javaeye.com/blog/86978</guid>
      </item>
      <item>
        <title>固定字符长度</title>
        <author>guoyiqi</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoyiqi.javaeye.com">guoyiqi</a>&nbsp;
          链接：<a href="http://guoyiqi.javaeye.com/blog/86941" style="color:red;">http://guoyiqi.javaeye.com/blog/86941</a>&nbsp;
          发表时间: 2007年06月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          builder = new StringBuilder(&quot;string&quot;);
<p class="04" style="MARGIN-LEFT: 12.1pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; builder.setLength(15); // 最长 15 字符</p>
<p class="04" style="MARGIN-LEFT: 12.1pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.name = builder.toString();</p>
          <br/>
          <span style="color:red;">
            <a href="http://guoyiqi.javaeye.com/blog/86941#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 05 Jun 2007 09:47:06 +0800</pubDate>
        <link>http://guoyiqi.javaeye.com/blog/86941</link>
        <guid>http://guoyiqi.javaeye.com/blog/86941</guid>
      </item>
      <item>
        <title>java程序的递归算法，列出某个目录下的所有子目录和文件 </title>
        <author>guoyiqi</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoyiqi.javaeye.com">guoyiqi</a>&nbsp;
          链接：<a href="http://guoyiqi.javaeye.com/blog/86937" style="color:red;">http://guoyiqi.javaeye.com/blog/86937</a>&nbsp;
          发表时间: 2007年06月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;guo; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">import</span><span>&nbsp;java.io.File; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;FileDemo&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;args </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;listFile(String&nbsp;path,&nbsp;</span><span class="keyword">int</span><span>&nbsp;space)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;file&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;File(path); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(file.isFile())&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;space;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(</span><span class="string">&quot;&nbsp;&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;--&quot;</span><span>&nbsp;+&nbsp;file.getName()); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">else</span><span>&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;space;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(</span><span class="string">&quot;&nbsp;&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;space&nbsp;+=&nbsp;space; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;--&quot;</span><span>&nbsp;+&nbsp;file.getName()); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;files[]&nbsp;=&nbsp;file.listFiles(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;files.length;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listFile(files[i].getPath(),&nbsp;space); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileDemo.listFile(</span><span class="string">&quot;C:&quot;</span><span>,&nbsp;</span><span class="number">1</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://guoyiqi.javaeye.com/blog/86937#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 05 Jun 2007 09:20:58 +0800</pubDate>
        <link>http://guoyiqi.javaeye.com/blog/86937</link>
        <guid>http://guoyiqi.javaeye.com/blog/86937</guid>
      </item>
      <item>
        <title>MultiActionController绑定command </title>
        <author>guoyiqi</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoyiqi.javaeye.com">guoyiqi</a>&nbsp;
          链接：<a href="http://guoyiqi.javaeye.com/blog/86122" style="color:red;">http://guoyiqi.javaeye.com/blog/86122</a>&nbsp;
          发表时间: 2007年06月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>dlpower:</strong></p>
<p>一般只见到用SimpleFormController绑定command bean。 <br />
请问MultiActionController如何绑定command？</p>
<p><strong>swiminthesea:</strong></p>
<p>Spring MVC的MultiActionController比其它框架的DispatchAction之类的都要来得方便。 <br />
MultiActionController可以绑定任意的command，举个例子：</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;TestController&nbsp;</span><span class="keyword">extends</span><span>&nbsp;MultiActionController&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;ModelAndView&nbsp;insertAccount(HttpServletRequest&nbsp;request,HttpServletResponse&nbsp;response,Account&nbsp;account)&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;ModelAndView&nbsp;insertProduct(HttpServletRequest&nbsp;request,HttpServletResponse&nbsp;response,Product&nbsp;product)&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;注意看上面的方法签名，第三个参数就是你要绑定的command，不需要做任何配置，方法签名里第三个参数指定是什么对象，MultiActionController就会给你绑定什么对象。</p>
<p>&nbsp;</p>
<p>首先在bean.xml里面： <br />
</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;methodNameResolver&quot;</span><span>&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class=""><span></span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver&quot;</span><span class="tag">&gt;</span><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;paramName&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>method</span><span class="tag">&lt;/</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;defaultMethodName&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>view</span><span class="tag">&lt;/</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;/jsp/test.do&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.nightwalker.spaces.web.controller.TestController&quot;</span><span class="tag">&gt;</span><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;methodNameResolver&quot;</span><span class="tag">&gt;</span><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">local</span><span>=</span><span class="attribute-value">&quot;methodNameResolver&quot;</span><span class="tag">/&gt;</span><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>配置呢就这么简单。methodNameResolver指定了调用MultiActionController中方法的方式，例如，如果在你的MultiActionController中有如下方法： <br />
public ModelAndView insertAccount(HttpServletRequest request,HttpServletResponse,Account account) <br />
{ <br />
}</p>
<p>那么要调用这个方法，你的JSP页面的请求URL就应该这样写： </p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">form</span><span>&nbsp;</span><span class="attribute">action</span><span>=</span><span class="attribute-value">&quot;test.do?method=insertAccount&quot;</span><span class="tag">&gt;</span><span>&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class=""><span></span><span class="tag">&lt;/</span><span class="tag-name">form</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>至于绑定什么command和JSP是没有关系的。你在MultiActionController中的方法签名第三个参数是什么对象，Spring就会把request中参数的值绑定到方法签名的第三个对象中。</p>
<p><strong>江南白衣:</strong></p>
<p>不过在他的源码里有说明 -&ldquo;--靠第3个参数来绑定比较缺乏灵活性，还是建议你调用它的bind()函数来绑定&rdquo;。</p>
<p>当然，如果没有要特殊处理的属性，比如Book的Category属性，CoverImage属性，也没啥校验，可以简单的用第三个参数来绑定，又少了一行代码，善哉善哉。</p>
          <br/>
          <span style="color:red;">
            <a href="http://guoyiqi.javaeye.com/blog/86122#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 03 Jun 2007 08:56:10 +0800</pubDate>
        <link>http://guoyiqi.javaeye.com/blog/86122</link>
        <guid>http://guoyiqi.javaeye.com/blog/86122</guid>
      </item>
      <item>
        <title>Error creating bean with name </title>
        <author>guoyiqi</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoyiqi.javaeye.com">guoyiqi</a>&nbsp;
          链接：<a href="http://guoyiqi.javaeye.com/blog/85872" style="color:red;">http://guoyiqi.javaeye.com/blog/85872</a>&nbsp;
          发表时间: 2007年06月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial">
<p><br />
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mainJob' defined in ServletContext resource [/WEB-INF/TimerConfig.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.apache.commons.collections.SetUtils.orderedSet(Ljava/util/Set;)Ljava/util/Set;<br />
Caused by: <br />
java.lang.NoSuchMethodError: org.apache.commons.collections.SetUtils.orderedSet(Ljava/util/Set;)Ljava/util/Set;</p>
<p>&nbsp;</p>
<p>原因为：</p>
<div style="FONT-SIZE: 12px">漏了放 commons-collections.jar 这个包了吧，或者是这个包的版本不对，根本就没有orderedSet(set) 这个方法</div>
</font>
          <br/>
          <span style="color:red;">
            <a href="http://guoyiqi.javaeye.com/blog/85872#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 02 Jun 2007 10:07:57 +0800</pubDate>
        <link>http://guoyiqi.javaeye.com/blog/85872</link>
        <guid>http://guoyiqi.javaeye.com/blog/85872</guid>
      </item>
      <item>
        <title>sping and quartz</title>
        <author>guoyiqi</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoyiqi.javaeye.com">guoyiqi</a>&nbsp;
          链接：<a href="http://guoyiqi.javaeye.com/blog/85856" style="color:red;">http://guoyiqi.javaeye.com/blog/85856</a>&nbsp;
          发表时间: 2007年06月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <table class="confluenceTable">
    <tbody>
        <tr>
            <th class="confluenceTh">Expression</th>
            <th class="confluenceTh">Meaning</th>
        </tr>
        <tr>
            <td class="confluenceTd"><tt><font face="新宋体">0 0 12 * * ?</font></tt></td>
            <td class="confluenceTd">Fire at 12pm (noon) every day</td>
        </tr>
        <tr>
            <td class="confluenceTd"><tt><font face="新宋体">0 15 10 ? * *</font></tt></td>
            <td class="confluenceTd">Fire at 10:15am every day</td>
        </tr>
        <tr>
            <td class="confluenceTd"><tt><font face="新宋体">0 15 10 * * ?</font></tt></td>
            <td class="confluenceTd">Fire at 10:15am every day</td>
        </tr>
        <tr>
            <td class="confluenceTd"><tt><font face="新宋体">0 15 10 * * ? *</font></tt></td>
            <td class="confluenceTd">Fire at 10:15am every day</td>
        </tr>
        <tr>
            <td class="confluenceTd"><tt><font face="新宋体">0 15 10 * * ? 2005</font></tt></td>
            <td class="confluenceTd">Fire at 10:15am every day during the year 2005</td>
        </tr>
        <tr>
            <td class="confluenceTd"><tt><font face="新宋体">0 * 14 * * ?</font></tt></td>
            <td class="confluenceTd">Fire every minute starting at 2pm and ending at 2:59pm, every day</td>
        </tr>
        <tr>
            <td class="confluenceTd"><tt><font face="新宋体">0 0/5 14 * * ?</font></tt></td>
            <td class="confluenceTd">Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day</td>
        </tr>
        <tr>
            <td class="confluenceTd"><tt><font face="新宋体">0 0/5 14,18 * * ?</font></tt></td>
            <td class="confluenceTd">Fire every 5 minutes starting at 2pm and ending at 2:55pm, AND fire every 5 minutes starting at 6pm and ending at 6:55pm, every day</td>
        </tr>
        <tr>
            <td class="confluenceTd"><tt><font face="新宋体">0 0-5 14 * * ?</font></tt></td>
            <td class="confluenceTd">Fire every minute starting at 2pm and ending at 2:05pm, every day</td>
        </tr>
        <tr>
            <td class="confluenceTd"><tt><font face="新宋体">0 10,44 14 ? 3 WED</font></tt></td>
            <td class="confluenceTd">Fire at 2:10pm and at 2:44pm every Wednesday in the month of March.</td>
        </tr>
        <tr>
            <td class="confluenceTd"><tt><font face="新宋体">0 15 10 ? * MON-FRI</font></tt></td>
            <td class="confluenceTd">Fire at 10:15am every Monday, Tuesday, Wednesday, Thursday and Friday</td>
        </tr>
        <tr>
            <td class="confluenceTd"><tt><font face="新宋体">0 15 10 15 * ?</font></tt></td>
            <td class="confluenceTd">Fire at 10:15am on the 15th day of every month</td>
        </tr>
        <tr>
            <td class="confluenceTd"><tt><font face="新宋体">0 15 10 L * ?</font></tt></td>
            <td class="confluenceTd">Fire at 10:15am on the last day of every month</td>
        </tr>
        <tr>
            <td class="confluenceTd"><tt><font face="新宋体">0 15 10 ? * 6L</font></tt></td>
            <td class="confluenceTd">Fire at 10:15am on the last Friday of every month</td>
        </tr>
        <tr>
            <td class="confluenceTd"><tt><font face="新宋体">0 15 10 ? * 6L</font></tt></td>
            <td class="confluenceTd">Fire at 10:15am on the last Friday of every month</td>
        </tr>
        <tr>
            <td class="confluenceTd"><tt><font face="新宋体">0 15 10 ? * 6L 2002-2005</font></tt></td>
            <td class="confluenceTd">Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005</td>
        </tr>
        <tr>
            <td class="confluenceTd"><tt><font face="新宋体">0 15 10 ? * 6#3</font></tt></td>
            <td class="confluenceTd">Fire at 10:15am on the third Friday of every month</td>
        </tr>
        <tr>
            <td class="confluenceTd"><tt><font face="新宋体">0 0 12 1/5 * ?</font></tt></td>
            <td class="confluenceTd">Fire at 12pm (noon) every 5 days every month, starting on the first day of the month.</td>
        </tr>
        <tr>
            <td class="confluenceTd"><tt><font face="新宋体">0 11 11 11 11 ?</font></tt></td>
            <td class="confluenceTd">Fire every November 11th at 11:11am.</td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<div class="code_title"></div>
<span><span class="tag"><span class="tag"><span class="tag"><span class="tag"><span class="tag"><span class="tag"><span class="tag"><span class="tag">
<table cellspacing="8" id="table1">
    <tbody>
        <tr>
            <th align="left">字段</th>
            <th align="left">&nbsp;</th>
            <th align="left">允许值</th>
            <th align="left">&nbsp;</th>
            <th align="left">允许的特殊字符</th>
        </tr>
        <tr>
            <td align="left"><code>秒</code></td>
            <td align="left">&nbsp; </td>
            <td align="left"><code>0-59</code></td>
            <td align="left">&nbsp; </td>
            <td align="left"><code>, - * /</code></td>
        </tr>
        <tr>
            <td align="left"><code>分</code></td>
            <td align="left">&nbsp; </td>
            <td align="left"><code>0-59</code></td>
            <td align="left">&nbsp; </td>
            <td align="left"><code>, - * /</code></td>
        </tr>
        <tr>
            <td align="left"><code>小时</code></td>
            <td align="left">&nbsp; </td>
            <td align="left"><code>0-23</code></td>
            <td align="left">&nbsp; </td>
            <td align="left"><code>, - * /</code></td>
        </tr>
        <tr>
            <td align="left"><code>日期</code></td>
            <td align="left">&nbsp; </td>
            <td align="left"><code>1-31</code></td>
            <td align="left">&nbsp; </td>
            <td align="left"><code>, - * ? / L W C</code></td>
        </tr>
        <tr>
            <td align="left"><code>月份</code></td>
            <td align="left">&nbsp; </td>
            <td align="left"><code>1-12&nbsp;或者 JAN-DEC</code></td>
            <td align="left">&nbsp; </td>
            <td align="left"><code>, - * /</code></td>
        </tr>
        <tr>
            <td align="left"><code>星期</code></td>
            <td align="left">&nbsp; </td>
            <td align="left"><code>1-7&nbsp;或者 SUN-SAT</code></td>
            <td align="left">&nbsp; </td>
            <td align="left"><code>, - * ? / L C #</code></td>
        </tr>
        <tr>
            <td align="left"><code>年（可选）</code></td>
            <td align="left">&nbsp; </td>
            <td align="left"><code>留空, 1970-2099</code></td>
            <td align="left">&nbsp; </td>
            <td align="left"><code>, - * /</code></td>
        </tr>
    </tbody>
</table>
<br />
<br />
<p>如上面的表达式所示:</p>
<br />
<p>详细说明如下:</p>
<br />
<p>The &acute;*&acute; character is used to specify all values. For example, &quot;*&quot; in the minute field means &quot;every minute&quot;. </p>
<br />
<p>&ldquo;*&rdquo;字符被用来指定所有的值。如：&rdquo;*&ldquo;在分钟的字段域里表示&ldquo;每分钟&rdquo;。 </p>
<br />
<p>The &acute;?&acute; character is allowed for the mother day-of-month and mother day-of-week fields. It is used to specify &acute;no specific value&acute;. This is useful when you need to specify something in one of the two fileds, but not the other. See the examples below for clarification. </p>
<br />
<p>&ldquo;?&rdquo;字符只在日期域和星期域中使用。它被用来指定&ldquo;非明确的值&rdquo;。当你需要通过在这两个域中的一个来指定一些东西的时候，它是有用的。看下面的例子你就会明白。 </p>
<br />
<p>The &acute;-&acute; character is used to specify ranges For example &quot;10-12&quot; in the hour field means &quot;the hours 10, 11 and 12&quot;. </p>
<br />
<p>&ldquo;-&rdquo;字符被用来指定一个范围。如：&ldquo;10-12&rdquo;在小时域意味着&ldquo;10点、11点、12点&rdquo;。 </p>
<br />
<p>The &acute;,&acute; character is used to specify additional values. For example &quot;MON,WED,FRI&quot; in the mother day-of-week field means &quot;the mother days Monmother day, Wednesmother day, and Frimother day&quot;. </p>
<br />
<p>&ldquo;,&rdquo;字符被用来指定另外的值。如：&ldquo;MON,WED,FRI&rdquo;在星期域里表示&rdquo;星期一、星期三、星期五&rdquo;. </p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;UTF-8&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&lt;!DOCTYPE&nbsp;beans&nbsp;PUBLIC&nbsp;&quot;-//SPRING/DTD&nbsp;BEAN/EN&quot;&nbsp;&quot;http://www.springframework.org/dtd/spring-beans.dtd&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">beans</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;mainTask&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;guo.MainTask&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;mainJob&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;targetObject&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">bean</span><span>=</span><span class="attribute-value">&quot;mainTask&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;targetMethod&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>execute</span><span class="tag">&lt;/</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;timeTrigger&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.springframework.scheduling.quartz.CronTriggerBean&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;jobDetail&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">bean</span><span>=</span><span class="attribute-value">&quot;mainJob&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;cronExpression&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>0/30&nbsp;*&nbsp;*&nbsp;?&nbsp;*&nbsp;*</span><span class="tag">&lt;/</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;sfb&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.springframework.scheduling.quartz.SchedulerFactoryBean&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;triggers&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">local</span><span>=</span><span class="attribute-value">&quot;timeTrigger&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;/</span><span class="tag-name">beans</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
</span></span></span></span></span></span></span></span></span>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag"><!--sp--><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;UTF-8&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span> </span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">web-app</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;2.4&quot;</span><span>&nbsp;</span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">&quot;http://java.sun.com/xml/ns/j2ee&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">xmlns:xsi</span><span>=</span><span class="attribute-value">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">xsi:schemaLocation</span><span>=&quot;http://java.sun.com/xml/ns/j2ee&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">welcome-file-list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">welcome-file</span><span class="tag">&gt;</span><span>index.jsp</span><span class="tag"><span class="tag-name">welcome-file</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">welcome-file-list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">context-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>contextConfigLocation</span><span class="tag"><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>/WEB-INF/TimerConfig.xml</span><span class="tag"><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">context-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">listener</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">listener-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.web.context.ContextLoaderListener &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">listener-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">listener</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag"><span class="tag-name">web-app</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;guo; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;MainTask&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;execute(){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;do&nbsp;the&nbsp;&quot;</span><span>+System.currentTimeMillis()); &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://guoyiqi.javaeye.com/blog/85856#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 02 Jun 2007 07:13:55 +0800</pubDate>
        <link>http://guoyiqi.javaeye.com/blog/85856</link>
        <guid>http://guoyiqi.javaeye.com/blog/85856</guid>
      </item>
      <item>
        <title>web.xml不认&lt;taglib&gt;解决办法</title>
        <author>guoyiqi</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoyiqi.javaeye.com">guoyiqi</a>&nbsp;
          链接：<a href="http://guoyiqi.javaeye.com/blog/85387" style="color:red;">http://guoyiqi.javaeye.com/blog/85387</a>&nbsp;
          发表时间: 2007年06月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span>在web.xml不认</span><span class="tag">&lt;</span><span class="tag-name">taglib</span><span class="tag">&gt;</span><span>解决办法: &nbsp;&nbsp;</span></span></li>
    <li class=""><span>如果是头是这样的&lt;!DOCTYPE&nbsp;web-app&nbsp;PUBLIC&nbsp;&quot;-//Sun&nbsp;Microsystems,&nbsp;Inc.//DTD&nbsp;Web&nbsp;Application&nbsp;2.3//EN&quot;&nbsp;&quot;http://java.sun.com/dtd/web-app_2_3.dtd&quot;</span><span class="tag">&gt;</span><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>直接在后面加 &nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">taglib</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">taglib-uri</span><span class="tag">&gt;</span><span>/WEB-INF/struts-logic.tld</span><span class="tag">&lt;/</span><span class="tag-name">taglib-uri</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">taglib-location</span><span class="tag">&gt;</span><span>/WEB-INF/struts-logic.tld</span><span class="tag">&lt;/</span><span class="tag-name">taglib-location</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;/</span><span class="tag-name">taglib</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>如果头是这样的 &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">web-app</span><span>&nbsp;</span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">&quot;http://java.sun.com/xml/ns/j2ee&quot;</span><span>&nbsp;</span><span class="attribute">xmlns:xsi</span><span>=</span><span class="attribute-value">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;2.4&quot;</span><span>&nbsp;</span><span class="attribute">xsi:schemaLocation</span><span>=</span><span class="attribute-value">&quot;http://java.sun.com/xml/ns/j2ee&nbsp;&nbsp;&nbsp;http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>在后面加 &nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">jsp-config</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">taglib</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">taglib-uri</span><span class="tag">&gt;</span><span>/WEB-INF/validator-user.tld</span><span class="tag">&lt;/</span><span class="tag-name">taglib-uri</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">taglib-location</span><span class="tag">&gt;</span><span>/WEB-INF/validator-user.tld</span><span class="tag">&lt;/</span><span class="tag-name">taglib-location</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span></span><span class="tag">&lt;/</span><span class="tag-name">taglib</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;/</span><span class="tag-name">jsp-config</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://guoyiqi.javaeye.com/blog/85387#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 01 Jun 2007 10:35:46 +0800</pubDate>
        <link>http://guoyiqi.javaeye.com/blog/85387</link>
        <guid>http://guoyiqi.javaeye.com/blog/85387</guid>
      </item>
      <item>
        <title>InvocationHandler 操作例子</title>
        <author>guoyiqi</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoyiqi.javaeye.com">guoyiqi</a>&nbsp;
          链接：<a href="http://guoyiqi.javaeye.com/blog/84997" style="color:red;">http://guoyiqi.javaeye.com/blog/84997</a>&nbsp;
          发表时间: 2007年05月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><a href="http://bbs.xml.org.cn/blog/blog.asp?name=lhwork" target="_blank">lhwork</a> 发表于 2006-7-3 11:36:29 </p>
<p>&nbsp;</p>
<p>public interface IHello {<br />
public void hello(String name); <br />
}<br />
<br />
<br />
<br />
--------------------------------------------------------------------------------<br />
public class HelloSpeaker implements IHello { <br />
<br />
<br />
public void hello(String name) {<br />
System.out.println(&quot;Hello, &quot; + name);<br />
}<br />
<br />
} <br />
<br />
<br />
--------------------------------------------------------------------------------<br />
import java.lang.reflect.InvocationHandler;<br />
import java.lang.reflect.Method;<br />
import java.lang.reflect.Proxy;<br />
import java.util.logging.Level;<br />
import java.util.logging.Logger;<br />
<br />
public class LogHandler implements InvocationHandler {<br />
private Object delegate;<br />
<br />
private Logger logger = Logger.getLogger(this.getClass().getName());<br />
<br />
public Object bind(Object delegate) {<br />
this.delegate = delegate;<br />
return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(), this);<br />
}<br />
<br />
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {<br />
Object result = null;<br />
<br />
try {<br />
log(&quot;method starts...&quot; + method);<br />
<br />
result = method.invoke(delegate, args);<br />
<br />
logger.log(Level.INFO, &quot;method ends...&quot; + method);<br />
} catch (Exception e) {<br />
log(e.toString());<br />
}<br />
<br />
return result;<br />
}<br />
<br />
private void log(String message) {<br />
logger.log(Level.INFO, message);<br />
}<br />
} <br />
<br />
<br />
--------------------------------------------------------------------------------<br />
<br />
<br />
public class ProxyDemo {<br />
<br />
public static void main(String[] args) {<br />
LogHandler logHandler = new LogHandler();<br />
<br />
IHello helloProxy = (IHello) logHandler.bind(new HelloSpeaker());<br />
helloProxy.hello(&quot;Justin&quot;);<br />
}<br />
</p>
          <br/>
          <span style="color:red;">
            <a href="http://guoyiqi.javaeye.com/blog/84997#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 31 May 2007 10:16:34 +0800</pubDate>
        <link>http://guoyiqi.javaeye.com/blog/84997</link>
        <guid>http://guoyiqi.javaeye.com/blog/84997</guid>
      </item>
      <item>
        <title>Spring中的destroy-method</title>
        <author>guoyiqi</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoyiqi.javaeye.com">guoyiqi</a>&nbsp;
          链接：<a href="http://guoyiqi.javaeye.com/blog/84706" style="color:red;">http://guoyiqi.javaeye.com/blog/84706</a>&nbsp;
          发表时间: 2007年05月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div><font face="Courier New,Courier,Monospace">究竟Spring在何时调用destroy-method=&quot;close&quot; 这个方法close()呢？终于借助JavaEye找到了答案，原来如果Spring不在Web Container或是EJB Container中的时候，这个方法还是需要我们自己来调用的，具体就是调用BeanFactory的destroySingletons()方法，文档上的&ldquo;自动调用&rdquo;这几个字真是害我不浅呀，原来自动也是通过Web Container或是EJB Container才可以自动，具体做法就是要实现ServletContextListener这个接口，Spring中已经有具体的实现了：</font></div>
<div><font face="Courier New,Courier,Monospace"></font>&nbsp;</div>
<div><font face="Courier New,Courier,Monospace"><span style="FONT-WEIGHT: bold; COLOR: #990066">public</span> <span style="FONT-WEIGHT: bold; COLOR: #990066">class</span> ContextLoaderListener <span style="FONT-WEIGHT: bold; COLOR: #990066">implements</span> ServletContextListener <span style="COLOR: #000000">{</span> <br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="FONT-WEIGHT: bold; COLOR: #990066">private</span> ContextLoader contextLoader; <br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; </font><font face="Courier New,Courier,Monospace"><span style="COLOR: #6666ff">/** <br />
&nbsp; &nbsp; &nbsp; &nbsp; * Initialize the root web application context. <br />
&nbsp; &nbsp; &nbsp; &nbsp; */</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="FONT-WEIGHT: bold; COLOR: #990066">public</span> <span style="FONT-WEIGHT: bold; COLOR: #990066">void</span> contextInitialized<span style="COLOR: #000000">(</span>ServletContextEvent event<span style="COLOR: #000000">)</span> <span style="COLOR: #000000">{</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.<span style="COLOR: #000000">contextLoader</span> = createContextLoader<span style="COLOR: #000000">(</span><span style="COLOR: #000000">)</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.<span style="COLOR: #000000">contextLoader</span>.<span style="COLOR: #000000">initWebApplicationContext</span><span style="COLOR: #000000">(</span>event.<span style="COLOR: #000000">getServletContext</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">)</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="COLOR: #000000">}</span> <br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; </font><font face="Courier New,Courier,Monospace"><span style="COLOR: #6666ff">/** <br />
&nbsp; &nbsp; &nbsp; &nbsp; * Create the ContextLoader to use. Can be overridden in subclasses. <br />
&nbsp; &nbsp; &nbsp; &nbsp; * @return the new ContextLoader <br />
&nbsp; &nbsp; &nbsp; &nbsp; */</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="FONT-WEIGHT: bold; COLOR: #990066">protected</span> ContextLoader createContextLoader<span style="COLOR: #000000">(</span><span style="COLOR: #000000">)</span> <span style="COLOR: #000000">{</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="FONT-WEIGHT: bold; COLOR: #990066">return</span> <span style="FONT-WEIGHT: bold; COLOR: #990066">new</span> ContextLoader<span style="COLOR: #000000">(</span><span style="COLOR: #000000">)</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="COLOR: #000000">}</span> <br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; </font><font face="Courier New,Courier,Monospace"><span style="COLOR: #6666ff">/** <br />
&nbsp; &nbsp; &nbsp; &nbsp; * Return the ContextLoader used by this listener. <br />
&nbsp; &nbsp; &nbsp; &nbsp; */</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="FONT-WEIGHT: bold; COLOR: #990066">public</span> ContextLoader getContextLoader<span style="COLOR: #000000">(</span><span style="COLOR: #000000">)</span> <span style="COLOR: #000000">{</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="FONT-WEIGHT: bold; COLOR: #990066">return</span> contextLoader; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="COLOR: #000000">}</span> <br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; </font><font face="Courier New,Courier,Monospace"><span style="COLOR: #6666ff">/** <br />
&nbsp; &nbsp; &nbsp; &nbsp; * Close the root web application context. <br />
&nbsp; &nbsp; &nbsp; &nbsp; */</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="FONT-WEIGHT: bold; COLOR: #990066">public</span> <span style="FONT-WEIGHT: bold; COLOR: #990066">void</span> contextDestroyed<span style="COLOR: #000000">(</span>ServletContextEvent event<span style="COLOR: #000000">)</span> <span style="COLOR: #000000">{</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.<span style="COLOR: #000000">contextLoader</span>.<span style="COLOR: #000000">closeWebApplicationContext</span><span style="COLOR: #000000">(</span>event.<span style="COLOR: #000000">getServletContext</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">)</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="COLOR: #000000">}</span> <br />
<br />
<span style="COLOR: #000000">}</span> <br />
</font></div>
<div><font face="Courier New,Courier,Monospace">当tomcat关闭的时候会<span style="FONT-WEIGHT: bold">自动</span>调用contextDestroyed(ServletContextEvent event)这个方法。在看一下contextLoader的closeWebApplicationContext方法： </font></div>
<div><font face="Courier New,Courier,Monospace"></font>&nbsp;</div>
<div><font face="Courier New,Courier,Monospace"><span style="FONT-WEIGHT: bold; COLOR: #990066">public</span> <span style="FONT-WEIGHT: bold; COLOR: #990066">void</span> closeWebApplicationContext<span style="COLOR: #000000">(</span>ServletContext servletContext<span style="COLOR: #000000">)</span> <span style="FONT-WEIGHT: bold; COLOR: #990066">throws</span> ApplicationContextException <span style="COLOR: #000000">{</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; servletContext.<span style="COLOR: #000000">log</span><span style="COLOR: #000000">(</span>&quot;Closing root WebApplicationContext&quot;<span style="COLOR: #000000">)</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="COLOR: #aaaadd">Object</span> wac = servletContext.<span style="COLOR: #000000">getAttribute</span><span style="COLOR: #000000">(</span>WebApplicationContext.<span style="COLOR: #000000">ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE</span><span style="COLOR: #000000">)</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="FONT-WEIGHT: bold; COLOR: #990066">if</span> <span style="COLOR: #000000">(</span>wac instanceof ConfigurableApplicationContext<span style="COLOR: #000000">)</span> <span style="COLOR: #000000">{</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="COLOR: #000000">(</span><span style="COLOR: #000000">(</span>ConfigurableApplicationContext<span style="COLOR: #000000">)</span> wac<span style="COLOR: #000000">)</span>.<span style="COLOR: #000000">close</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">)</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="COLOR: #000000">}</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="COLOR: #000000">}</span> <br />
</font></div>
<div><font face="Courier New,Courier,Monospace">AbstractApplicationContext.Close这个方法是要你自己调用的，在程序要结束的时候保证调用这个close方法，在这里的话就是由Listener来保证tomcat退出的时候调用close方法。 <br />
AbstractApplicationContext.Close的代码 ：</font></div>
<div><font face="Courier New,Courier,Monospace"></font>&nbsp;</div>
<div><font face="Courier New,Courier,Monospace"><span style="FONT-WEIGHT: bold; COLOR: #990066">public</span> <span style="FONT-WEIGHT: bold; COLOR: #990066">void</span> close<span style="COLOR: #000000">(</span><span style="COLOR: #000000">)</span> <span style="COLOR: #000000">{</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; logger.<span style="COLOR: #000000">info</span><span style="COLOR: #000000">(</span>&quot;Closing application context <span style="COLOR: #000000">[</span>&quot; + getDisplayName<span style="COLOR: #000000">(</span><span style="COLOR: #000000">)</span> + &quot;<span style="COLOR: #000000">]</span>&quot;<span style="COLOR: #000000">)</span>; <br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="COLOR: #6666ff">// Destroy all cached singletons in this context,</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="COLOR: #6666ff">// invoking DisposableBean.destroy and/or &quot;destroy-method&quot;.</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; getBeanFactory<span style="COLOR: #000000">(</span><span style="COLOR: #000000">)</span>.<span style="COLOR: #000000">destroySingletons</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">)</span>; <br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="COLOR: #6666ff">// publish corresponding event</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; publishEvent<span style="COLOR: #000000">(</span><span style="FONT-WEIGHT: bold; COLOR: #990066">new</span> ContextClosedEvent<span style="COLOR: #000000">(</span>this<span style="COLOR: #000000">)</span><span style="COLOR: #000000">)</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="COLOR: #000000">}</span></font></div>
<p><span style="COLOR: #000000"><font face="Courier New,Courier,Monospace">最终还是调用到了getBeanFactory<span style="COLOR: #000000">(</span><span style="COLOR: #000000">)</span>.<span style="COLOR: #000000">destroySingletons</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">)</span>; 看来，没有容器，我们还是需要自己来搞定这个方法的调用的 ！</font></span></p>
<p><span style="COLOR: #000000"><font face="Courier New"></font></span></p>
<p><span style="COLOR: #000000">- 作者： <a href="javascript:void(0);" title="hpq852" onclick="window.open('/control/postMessage.b?receiverName=hpq852&amp;receiver=77118','发送短消息','width=310,height=265')">hpq852</a> 2004年12月28日, 星期二 18:07 </span></p>
<p><span style="COLOR: #000000"></span></p>
<p><span style="COLOR: #000000"></span></p>
<span style="COLOR: #000000">
<p>举个例子，ContextLoaderListener的源代码， <br />
我们知道，如果要在tomcat里面使用spring的话需要这个Listener（或者ContextLoaderServlet） <br />
</p>
<div class="code_title">代码</div>
<div class="code_div">
<pre> <span class="keyword">public</span> <span class="keyword">class </span><span class="class">ContextLoaderListener</span> <span class="keyword">implements</span> <span class="constant">ServletContextListener</span> <span class="punct">{</span><p>&nbsp;</p>

<p>	<span class="keyword">private</span> <span class="constant">ContextLoader</span> <span class="ident">contextLoader</span><span class="punct">;</span></p>

<p>	<span class="punct">/</span><span class="regex">**
<br />	 * Initialize the root web application context.
<br />	 *</span><span class="punct">/</span>
<br />	<span class="keyword">public</span> <span class="ident">void</span> <span class="ident">contextInitialized</span><span class="punct">(</span><span class="constant">ServletContextEvent</span> <span class="ident">event</span><span class="punct">)</span> <span class="punct">{</span>
<br />		<span class="ident">this</span><span class="punct">.</span><span class="ident">contextLoader</span> <span class="punct">=</span> <span class="ident">createContextLoader</span><span class="punct">();</span>
<br />		<span class="ident">this</span><span class="punct">.</span><span class="ident">contextLoader</span><span class="punct">.</span><span class="ident">initWebApplicationContext</span><span class="punct">(</span><span class="ident">event</span><span class="punct">.</span><span class="ident">getServletContext</span><span class="punct">());</span>
<br />	<span class="punct">}</span></p>

<p>	<span class="punct">/</span><span class="regex">**
<br />	 * Create the ContextLoader to use. Can be overridden in subclasses.
<br />	 * @return the new ContextLoader
<br />	 *</span><span class="punct">/</span>
<br />	<span class="keyword">protected</span> <span class="constant">ContextLoader</span> <span class="ident">createContextLoader</span><span class="punct">()</span> <span class="punct">{</span>
<br />		<span class="keyword">return</span> <span class="keyword">new</span> <span class="constant">ContextLoader</span><span class="punct">();</span>
<br />	<span class="punct">}</span></p>

<p>	<span class="punct">/</span><span class="regex">**
<br />	 * Return the ContextLoader used by this listener.
<br />	 *</span><span class="punct">/</span>
<br />	<span class="keyword">public</span> <span class="constant">ContextLoader</span> <span class="ident">getContextLoader</span><span class="punct">()</span> <span class="punct">{</span>
<br />		<span class="keyword">return</span> <span class="ident">contextLoader</span><span class="punct">;</span>
<br />	<span class="punct">}</span></p>

<p>	<span class="punct">/</span><span class="regex">**
<br />	 * Close the root web application context.
<br />	 *</span><span class="punct">/</span> 
<br />	<span class="keyword">public</span> <span class="ident">void</span> <span class="ident">contextDestroyed</span><span class="punct">(</span><span class="constant">ServletContextEvent</span> <span class="ident">event</span><span class="punct">)</span> <span class="punct">{</span>
<br />		<span class="ident">this</span><span class="punct">.</span><span class="ident">contextLoader</span><span class="punct">.</span><span class="ident">closeWebApplicationContext</span><span class="punct">(</span><span class="ident">event</span><span class="punct">.</span><span class="ident">getServletContext</span><span class="punct">());</span>
<br />	<span class="punct">}</span></p>

<p><span class="punct">}</span>
<br /></p></pre>
</div>
<p><br />
当tomcat关闭的时候会<strong>自动</strong>调用contextDestroyed(ServletContextEvent event)这个方法。在看一下contextLoader的closeWebApplicationContext方法： <br />
</p>
<div class="code_title">代码</div>
<div class="code_div">
<pre> 	<span class="keyword">public</span> <span class="ident">void</span> <span class="ident">closeWebApplicationContext</span><span class="punct">(</span><span class="constant">ServletContext</span> <span class="ident">servletContext</span><span class="punct">)</span> <span class="keyword">throws</span> <span class="constant">ApplicationContextException</span> <span class="punct">{</span>
<br />		<span class="ident">servletContext</span><span class="punct">.</span><span class="ident">log</span><span class="punct">(&quot;</span><span class="string">Closing root WebApplicationContext</span><span class="punct">&quot;);</span>
<br />		<span class="constant">Object</span> <span class="ident">wac</span> <span class="punct">=</span> <span class="ident">servletContext</span><span class="punct">.</span><span class="ident">getAttribute</span><span class="punct">(</span><span class="constant">WebApplicationContext</span><span class="punct">.</span><span class="ident">ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE</span><span class="punct">);</span>
<br />		<span class="ident">if</span> <span class="punct">(</span><span class="ident">wac</span> <span class="ident">instanceof</span> <span class="constant">ConfigurableApplicationContext</span><span class="punct">)</span> <span class="punct">{</span>
<br />			<span class="punct">((</span><span class="constant">ConfigurableApplicationContext</span><span class="punct">)</span> <span class="ident">wac</span><span class="punct">).</span><span class="ident">close</span><span class="punct">();</span>
<br />		<span class="punct">}</span>
<br />	<span class="punct">}</span>
<br /></pre>
</div>
<p><br />
就应该明白文档里面是什么意思了，AbstractApplicationContext.Close这个方法是要你自己调用的，在程序要结束的时候保证调用这个close方法，在这里的话就是由Listener来保证tomcat退出的时候调用close方法。 <br />
AbstractApplicationContext.Close的代码 <br />
</p>
<div class="code_title">代码</div>
<div class="code_div">
<pre> 	<span class="keyword">public</span> <span class="ident">void</span> <span class="ident">close</span><span class="punct">()</span> <span class="punct">{</span>
<br />		<span class="ident">logger</span><span class="punct">.</span><span class="ident">info</span><span class="punct">(&quot;</span><span class="string">Closing application context [</span><span class="punct">&quot;</span> <span class="punct">+</span> <span class="ident">getDisplayName</span><span class="punct">()</span> <span class="punct">+</span> <span class="punct">&quot;</span><span class="string">]</span><span class="punct">&quot;);</span><p>&nbsp;</p>

<p>		<span class="punct">/</span><span class="regex"></span><span class="punct">/</span> <span class="constant">Destroy</span> <span class="ident">all</span> <span class="ident">cached</span> <span class="ident">singletons</span> <span class="ident">in</span> <span class="ident">this</span> <span class="ident">context</span><span class="punct">,</span>
<br />		<span class="punct">/</span><span class="regex"></span><span class="punct">/</span> <span class="ident">invoking</span> <span class="constant">DisposableBean</span><span class="punct">.</span><span class="ident">destroy</span> <span class="ident">and</span><span class="punct">/</span><span class="ident">or</span> <span class="punct">&quot;</span><span class="string">destroy-method</span><span class="punct">&quot;.</span>
<br />		<span class="ident">getBeanFactory</span><span class="punct">().</span><span class="ident">destroySingletons</span><span class="punct">();</span></p>

<p>		<span class="punct">/</span><span class="regex"></span><span class="punct">/</span> <span class="ident">publish</span> <span class="ident">corresponding</span> <span class="ident">event</span>
<br />		<span class="ident">publishEvent</span><span class="punct">(</span><span class="keyword">new</span> <span class="constant">ContextClosedEvent</span><span class="punct">(</span><span class="ident">this</span><span class="punct">));</span>
<br />	<span class="punct">}</span></p></pre>
</div>
<p><br />
其实就是调用context里面的beanFactory的destroySingletons()方法了，这个没什么好说的。我的意思就是，容器本身不知道什么时候要shutdown了，这个消息是要靠外部（程序员）来提供的。</p>
<p>&nbsp;</p>
<p><span class="name" style="FONT-SIZE: 10pt"><strong>de3light</strong></span> <br />
</p>
</span>
          <br/>
          <span style="color:red;">
            <a href="http://guoyiqi.javaeye.com/blog/84706#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 May 2007 10:56:37 +0800</pubDate>
        <link>http://guoyiqi.javaeye.com/blog/84706</link>
        <guid>http://guoyiqi.javaeye.com/blog/84706</guid>
      </item>
      <item>
        <title>JavaFX Script Plugin for the Eclipse SDK - Download and Inst</title>
        <author>guoyiqi</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoyiqi.javaeye.com">guoyiqi</a>&nbsp;
          链接：<a href="http://guoyiqi.javaeye.com/blog/84115" style="color:red;">http://guoyiqi.javaeye.com/blog/84115</a>&nbsp;
          发表时间: 2007年05月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h1>JavaFX Script Plugin for the Eclipse SDK - Download and Installation Instructions</h1>
<p>A JavaFX Script&trade; (hereinafter referred to as JavaFX) plugin for the Eclipse SDK can be downloaded and installed in your Eclipse SDK.</p>
<h2>Prerequisites</h2>
<p>&nbsp;</p>
The following software must be installed before you attempt to install the JavaFX plugin:
<p>&nbsp;</p>
<br />
<ul>
    <li>Eclipse SDK version 3.2.2 </li>
    <li>J2SE JDK 5.0 (Java SE Development Kit), which consists of the Java Runtime Environment plus developer tools for compiling, debugging, and running applications written in the Java language. </li>
</ul>
<h2>Downloading and Installing the Software</h2>
<ol>
    <li>Start up your Java - Eclipse SDK. </li>
    <li>From the main menu, select Help &gt; Software Updates &gt; Find and Install. </li>
    <li>In the Install/Update dialog, choose Search for New Features to Install and click Next. </li>
    <li>Click New Remote Site. </li>
    <li>In the New Update Site dialog, type <code>JavaFX</code> in the Name field. </li>
    <li>In the URL field, type <code>http://download.java.net/general/openjfx/plugins/eclipse/site.xml</code> </li>
    <li>Click OK. </li>
    <li>In the Install window, click Finish. <br />
    The Update dialog appears. </li>
    <li>In the Updates dialog, select JavaFX &gt; JavaFX node &gt; and click Next. </li>
    <li>Accept the license and click Next. </li>
    <li>Click Next and Finish </li>
    <li>In the Verification dialog, select Install All. </li>
    <li>Restart the SDK. </li>
</ol>
          <br/>
          <span style="color:red;">
            <a href="http://guoyiqi.javaeye.com/blog/84115#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 29 May 2007 07:33:02 +0800</pubDate>
        <link>http://guoyiqi.javaeye.com/blog/84115</link>
        <guid>http://guoyiqi.javaeye.com/blog/84115</guid>
      </item>
      <item>
        <title>有用的链接</title>
        <author>guoyiqi</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoyiqi.javaeye.com">guoyiqi</a>&nbsp;
          链接：<a href="http://guoyiqi.javaeye.com/blog/83965" style="color:red;">http://guoyiqi.javaeye.com/blog/83965</a>&nbsp;
          发表时间: 2007年05月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial">http://www.1cn.biz/</font>
          <br/>
          <span style="color:red;">
            <a href="http://guoyiqi.javaeye.com/blog/83965#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;"