﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-墙头草的Java-随笔分类-PHP</title><link>http://www.blogjava.net/javagrass/category/36873.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 21 Dec 2008 02:32:43 GMT</lastBuildDate><pubDate>Sun, 21 Dec 2008 02:32:43 GMT</pubDate><ttl>60</ttl><item><title>PHP SOAP扩展 </title><link>http://www.blogjava.net/javagrass/archive/2008/12/21/247583.html</link><dc:creator>墙头草</dc:creator><author>墙头草</author><pubDate>Sun, 21 Dec 2008 01:19:00 GMT</pubDate><guid>http://www.blogjava.net/javagrass/archive/2008/12/21/247583.html</guid><wfw:comment>http://www.blogjava.net/javagrass/comments/247583.html</wfw:comment><comments>http://www.blogjava.net/javagrass/archive/2008/12/21/247583.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/javagrass/comments/commentRss/247583.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/javagrass/services/trackbacks/247583.html</trackback:ping><description><![CDATA[PHP的SOAP扩展可以用来提供和使用<em>Web</em> <em>service</em>s。换句话说，PHP开发者可以利用这个PHP扩展来写他们自己的Web services，也可以写一些客户端来使用给定的Web services。<br />
<br />
PHP5中的这个SOAP扩展目的是为了实现PHP对<em>Web</em> <em>service</em>s的支持。与其它实现PHP对Web services的支持的方法不同，SOAP扩展是用C写的，因此它比其它方法具有速度优势。<br />
<br />
SOAP扩展支持以下规范。<br />
<br />
* SOAP 1.1<br />
* SOAP 1.2<br />
* WSDL 1.1<br />
<br />
SOAP扩展主要用来处理RPC形式的<em>Web</em> <em>service</em>s。不过，你也可以使用文本形式的WSDL文件配合WSDL模式的服务端和客户端。<br />
<br />
这个扩展使用 GNOME XML库来处理XML。<br />
<br />
扩展中的类<br />
这个扩展实现了6个类。其中有三个高级的类，它们的方法很有用，它们是 SoapClient，SoapServer和SoapFault。另外三个类除了构造器外没有其它别的方法，这三个是低级的类，它们是SoapHeader，SoapParam和SoapVar。<br />
<br />
<img src="http://www.itstrike.cn/uploads/allimg/081221/0729190.png" alt="" width="487" height="312" />
<p><strong>SoapClient类</strong><br />
<br />
这个类用来使用<em>Web</em> <em>service</em>s。SoapClient类可以作为给定Web services的客户端。<br />
它有两种操作形式：<br />
<br />
* WSDL 模式<br />
* Non-WSDL 模式<br />
<br />
在WSDL模式中，构造器可以使用WSDL文件名作为参数，并从WSDL中提取服务所使用的信息。<br />
<br />
non-WSDL模式中使用参数来传递要使用的信息。这个类有许多可以用来使用服务的有用的方法。其中SoapClient::__<em>soap</em>Call()是最重要的。这个方法可以用来调用服务中的某个操作。<br />
<br />
<strong>SoapServer类</strong><br />
<br />
这个类可以用来提供<em>Web</em> <em>service</em>s。
与SoapClient类似，SoapServer也有两种操作模式：WSDL模式和non-WSDL模式。这两种模式的意义跟
SoapClient的两种模式一样。在WSDL模式中，服务实现了WSDL提供的接口；在non-WSDL模式中，参数被用来管理服务的行为。<br />
<br />
在SoapServer类的众多方法中，有三个方法比较重要。它们是SoapServer::setClass()，SoapServer::addFunction()和SoapServer::handle()。<br />
<br />
SoapServer::setClass()方法设定用来实现<em>Web</em> Service的类。SoapServer::setClass所设定的类中的所有公共方法将成为Web Services的操作(operation)。<br />
<br />
SoapServer::addFunction()方法用来添加一个或多个作为<em>Web</em> Services操作(operation)的函数。<br />
<br />
SoapServer:: handle()方法指示<em>Web</em>
Service脚本开始处理进入的请求。Web
Service脚本是用PHP脚本写的一个或多个SoapServer对象的实例。尽管你可以有不止一个的SoapServer对象，但通常的习惯是一个
脚本只拥有一个SoapServer实例。在调用SoapServer::handle()方法之前，Web
Service脚本会使用设置在SoapServer对象实例上的任何信息来处理进入的请求和输出的相应。</p>
<p><br />
<strong>SoapFault类</strong><br />
<br />
这个类从Exception类继承而来，可以用来处理错误。SoapFault实例可以抛出或获取Soap错误的相关信息并按程序员的请求处理。<br />
<br />
<strong>SoapHeader类</strong><br />
<br />
这个类可以用来描述SOAP headers。它只是一个只包含构造器方法的数据容器。<br />
<br />
<strong>SoapParam类</strong><br />
<br />
SoapParam也是一个只包含构造器方法的数据容器。这个方法可以用来描述传递给<em>Web</em> <em>service</em>s操作的参数。在non-WSDL模式中这是一个很有用的类，可以用来传递所期望格式的参数信息。<br />
<br />
<strong>SoapVar类</strong><br />
<br />
SoapVar也是一个只包含构造器的低级类，与SoapHeader和SoapParam类相似。这个类可以用来给一个<em>Web</em> <em>service</em>s操作传递编码参数。这个类对non-WSDL中传递类型信息是非常有用的。</p>
<p><br />
<strong>WSDL VS. non-WSDL模式</strong><br />
<br />
<em>Web</em> Services有两种实现模式：契约先行(Contract first)模式和代码先行(Code first)模式。<br />
<br />
契约先行模式使用了一个用XML定义的服务接口的WSDL文件。WSDL文件定义了服务必须实现或客户端必须使用的接口。SoapServer和SoapClient的WSDL模式就基于这个概念。<br />
<br />
在
代码先行模式中，首先要先写出实现服务的代码。然后在大多数情况下，代码会产生一个契约，换种说法，一个WSDL。接着客户端在使用服务的时候就可以使用
那个WSDL来获得服务的接口。尽管如此，PHP5的扩展并没有从代码输出一个WSDL的规定，考虑到这种情况，可以在non-WSDL模式下使用
SoapServer和SoapClient。<br />
SOAP扩展与Hello World<br />
<br />
这一节介绍如何使用WSDL模式和non-WSDL模式来实现服务和客户端。相对而言，使用WSDL模式来实现服务和客户端会比较容易，假定已经有一个定义了接口的WSDL文件。因此这一节会先介绍如何使用WSDL模式实现一个<em>Web</em> Service。<br />
<br />
在这个Hello World例子的服务中有一个被命名为greet的操作。这个操作有一个字符串形式的名字并返回一个字符串形式的greeting。所用到的WSDL如下：</p>
<p>&lt;wsdl:definitions <br />
&nbsp;&nbsp;&nbsp; xmlns:impl='http://wso2.org/wsf/<em>php</em>/helloService' <br />
&nbsp;&nbsp;&nbsp; xmlns:intf='http://wso2.org/wsf/<em>php</em>/helloService' <br />
&nbsp;&nbsp;&nbsp; xmlns:wsdl='http://schemas.xml<em>soap</em>.org/wsdl/' <br />
&nbsp;&nbsp;&nbsp; xmlns:wsdl<em>soap</em>='http://schemas.xmlsoap.org/wsdl/soap/' <br />
&nbsp;&nbsp;&nbsp; xmlns:xsd='http://www.w3.org/2001/XMLSchema' <br />
&nbsp;&nbsp;&nbsp; targetNamespace='http://wso2.org/wsf/<em>php</em>/helloService'&gt;&nbsp; <br />
&nbsp; &lt;wsdl:types&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;schema elementFormDefault='qualified' <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:impl='http://wso2.org/wsf/<em>php</em>/helloService' <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:intf='http://wso2.org/wsf/<em>php</em>/helloService' <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:wsdl='http://schemas.xml<em>soap</em>.org/wsdl/' <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns="http://www.w3.org/2001/XMLSchema" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; targetNamespace='http://wso2.org/wsf/<em>php</em>/helloService' &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;element name='greet'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;complexType&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;sequence&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;element name='name' type='xsd:string' /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/sequence&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/complexType&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/element&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;element name='greetResponse'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;complexType&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;sequence&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;element name='greetReturn' type='xsd:string' /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/sequence&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/complexType&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/element&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/schema&gt;<br />
&nbsp; &lt;/wsdl:types&gt;<br />
&nbsp; &lt;wsdl:message name='greetRequest'&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;wsdl:part name='parameters' element='impl:greet' /&gt;<br />
&nbsp; &lt;/wsdl:message&gt;<br />
&nbsp; &lt;wsdl:message name='greetResponse'&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;wsdl:part name='parameters' element='impl:greetResponse' /&gt;<br />
&nbsp; &lt;/wsdl:message&gt;<br />
&nbsp; &lt;wsdl:portType name='helloService'&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;wsdl:operation name='greet'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsdl:input name='greetRequest' message='impl:greetRequest' /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsdl:output name='greetResponse' message='impl:greetResponse' /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/wsdl:operation&gt;<br />
&nbsp; &lt;/wsdl:portType&gt;<br />
&nbsp; &lt;wsdl:binding name='helloServiceSoapBinding' type='impl:helloService'&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;wsdl<em>soap</em>:binding transport='http://schemas.xmlsoap.org/soap/http' style='document' /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;wsdl:operation name='greet'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsdl<em>soap</em>:operation soapAction='helloService#greet' /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsdl:input name='greetRequest'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsdl<em>soap</em>:body use='literal' /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/wsdl:input&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsdl:output name='greetResponse'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsdl<em>soap</em>:body use='literal' /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/wsdl:output&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/wsdl:operation&gt;<br />
&nbsp; &lt;/wsdl:binding&gt;<br />
&nbsp; &lt;wsdl:<em>service</em> name='helloService'&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;wsdl:port binding='impl:helloServiceSoapBinding' name='helloService'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsdl<em>soap</em>:address location='http://localhost/hello/hello_service_wsdl.<em>php</em>' /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/wsdl:port&gt;<br />
&nbsp; &lt;/wsdl:<em>service</em>&gt;<br />
&lt;/wsdl:definitions&gt;</p>
<p><strong>WSDL模式服务</strong><br />
<br />
下面是WSDL模式的服务所使用的SOAP扩展API代码：</p>
<p>&lt;?<em>php</em> <br />
function greet($param) {<br />
&nbsp;&nbsp;&nbsp; $retval = 'Hello '.$param-&gt;name; <br />
&nbsp;&nbsp;&nbsp; $result = array('greetReturn' =&gt; $retval);<br />
&nbsp;&nbsp;&nbsp; return $result;<br />
}<br />
<br />
$server = new SoapServer('hello.wsdl');<br />
$server-&gt;addFunction('greet');<br />
$server-&gt;handle();<br />
?&gt;</p>
<p>在这个服务的实现过程中，函数实现了WSDL所定义的服务操作greet，greet操作有一个WSDL指定的参数，按照greet操作的语义，这个参数是一个用户的名字。最后handle调用了触发处理请求的服务对象。</p>
<p><br />
<strong>WSDL模式客户端</strong><br />
<br />
客户端代码如下</p>
<p>&lt;?<em>php</em><br />
try {<br />
&nbsp;&nbsp;&nbsp; $client = new SoapClient('hello.wsdl');<br />
&nbsp;&nbsp;&nbsp; $result =&nbsp; $client-&gt;__<em>soap</em>Call('greet', array(array('name' =&gt; 'Sam')));<br />
&nbsp;&nbsp;&nbsp; printf("Result = %s", $result-&gt;greetReturn);<br />
} catch (Exception $e) {<br />
&nbsp;&nbsp;&nbsp; printf("Message = %s",$e-&gt;__toString());<br />
}<br />
?&gt;</p>
<p>客户端代码中，首先创建一个使用WSDL文件作参数的SoapClient实例。接着__<em>soap</em>Call()调用作为参数传入它的操作，也就是greet和传入操作的参数。<br />
请求和响应<br />
<br />
当你将上述的PHP脚本放在你web服务器目录下的文档中，并利用WEB浏览器或在PHP解析器的命令行调用脚本，客户端发送一个SOAP请求到服务端脚本，服务端将向客户端发送一个SOAP响应来响应客户端的请求。<br />
<br />
下面是客户端所发送的SOAP请求：</p>
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xml<em>soap</em>.org/soap/envelope/"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:ns1="http://wso2.org/wsf/<em>php</em>/helloService"&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;SOAP-ENV:Body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;ns1:greet&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;ns1:name&gt;Sam&lt;/ns1:name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/ns1:greet&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/SOAP-ENV:Body&gt; <br />
&lt;/SOAP-ENV:Envelope&gt;</p>
<p>下面是服务端响应上诉请求而发送的SOAP响应：</p>
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&nbsp;&nbsp; &lt;SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xml<em>soap</em>.org/soap/envelope/" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:ns1="http://wso2.org/wsf/<em>php</em>/helloService"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;SOAP-ENV:Body&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ns1:greetResponse&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ns1:greetReturn&gt;Hello Sam&lt;/ns1:greetReturn&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ns1:greetResponse&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/SOAP-ENV:Body&gt;<br />
&nbsp;&nbsp; &lt;/SOAP-ENV:Envelope&gt;</p>
<p>上面的SOAP消息都是利用WSDL模式的服务端和客户端来获取的。也可以利用non-WSDL模式的服务端和客户端来产生与上面相同的SOAP消息。但是，PHP代码必须有一点改变。下一节会说明如何使用non-WSDL模式。<br />
<br />
<strong>non-WSDL模式服务端</strong></p>
<p>&lt;?<em>php</em><br />
function greet($param) {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; $retval = 'Hello '.$param;<br />
&nbsp;&nbsp;&nbsp; return new SoapParam($retval, 'greetReturn');<br />
}<br />
<br />
$server = new SoapServer(null, array('uri' =&gt; 'http://wso2.org/wsf/<em>php</em>/helloService'));<br />
<br />
$server-&gt;addFunction('greet');<br />
$server-&gt;handle();<br />
?&gt;</p>
<p>在non
-WSDL模式中，想WSDL模式一样首先实现greet函数的功能，但是函数实现的方式跟WSDL模式稍稍有所不同。在non-WSDL模式中，我们必
须返回一个SoapParam对象作为响应，而不是一个数组。创建服务时，第一个参数设为null，说明没有提供WSDL；接着传递一个选项作为参数，这
个选项参数是服务的URI。最后像WSDL模式一样调用剩下的方法。<br />
<strong><br />
non-WSDL模式客户端</strong></p>
<p>&lt;?<em>php</em> <br />
try {<br />
&nbsp;&nbsp;&nbsp; $client = new SoapClient(null,&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; array('location' =&gt; 'http://localhost/hello/hello_<em>service</em>_nonwsdl.<em>php</em>',<br />
&nbsp;&nbsp;&nbsp; 'uri' =&gt; 'http://wso2.org/wsf/<em>php</em>/helloService'));&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; $result =&nbsp; $client-&gt;__<em>soap</em>Call('greet', array(new SoapParam('Sam', 'name')));&nbsp;&nbsp;&nbsp; printf("Result = %s", $result);<br />
} catch (Exception $e) {<br />
&nbsp;&nbsp;&nbsp; printf("Message = %s",$e-&gt;__toString());<br />
}<br />
?&gt;</p>
<p>在non-WSDL模式中，因为没有使用WSDL，传递了一个包含服务所在位置和服务URI的参数数组作为参数。然后象WSDL模式中一样调用__<em>soap</em>Call()方法，但是使用了SoapParam类用指定格式打包参数。返回的结果将获取greet中的响应。</p>
<p>相关文章:</p>
<p><strong><a href="http://www.itstrike.cn/html/PHP/200812/21-6437.html">PHP代码的优与劣</a></strong></p>
<p><strong><a href="http://www.itstrike.cn/html/PHP/200812/20-6436.html">如何用PHP和mysql创建一个ShoutBox</a><br />
</strong></p>
<p><strong><a href="http://www.itstrike.cn/html/PHP/200812/20-6270.html">PHP的文件包含</a></strong></p>
<p><strong><a href="http://www.itstrike.cn/html/PHP/200812/13-4064.html">PHP的正则表达式处理函数总结分析</a></strong></p>
<p><strong><a href="http://www.itstrike.cn/html/PHP/200812/05-2336.html">PHP文件上传实例详解</a></strong><br />
<strong></strong></p>
<p><strong>结论</strong><br />
这篇文章介绍了SOAP扩展，可以在PHP中通过它来提供和使用<em>Web</em>
Services。PHP扩展的强项是它的简单和快速。使用C写的SOAP扩展来运行服务端和客户端是非常简单的。虽然SOAP扩展在处理一些简单的
Web Services时很有用，但是当用它来处理所有的Web Services时就表现出它的局限性。 WSO
WSF/PHP就是为了弥补PHP扩展的缺陷而开发的，它是开源的，可以实现SOAP类似的功能并且支持MTOM，WS-Addressing，WS-
Security和WS-RelaiableMessaging。WSO2 WSF/PHP
支持与SOAP扩展类似的API。我们正计划将API打包起来提供跟SOAP扩展一样的API，会用C来写。</p>
<img src ="http://www.blogjava.net/javagrass/aggbug/247583.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/javagrass/" target="_blank">墙头草</a> 2008-12-21 09:19 <a href="http://www.blogjava.net/javagrass/archive/2008/12/21/247583.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>