﻿<?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-Burn Net--烧网</title><link>http://www.blogjava.net/burnet/</link><description>玩的是电脑，别被电脑玩了。</description><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 19:01:27 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 19:01:27 GMT</pubDate><ttl>60</ttl><item><title>SwingWeb 1.0.0发布</title><link>http://www.blogjava.net/burnet/archive/2006/08/10/swingweb.html</link><dc:creator>Burn Net</dc:creator><author>Burn Net</author><pubDate>Thu, 10 Aug 2006 12:50:00 GMT</pubDate><guid>http://www.blogjava.net/burnet/archive/2006/08/10/swingweb.html</guid><wfw:comment>http://www.blogjava.net/burnet/comments/62854.html</wfw:comment><comments>http://www.blogjava.net/burnet/archive/2006/08/10/swingweb.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/burnet/comments/commentRss/62854.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/burnet/services/trackbacks/62854.html</trackback:ping><description><![CDATA[
		<span style="font-weight: bold;">Swingweb</span>是一个web程序开发框架，它把AWT/Swing程序装入一个web容器，然后转换为纯净HTML/CSS/javascript。在开发过程中，swing包是没有任何改变的，开发者完全可以使用原来写swing的知识和习惯来编写网页程序。<br />以下是<span style="font-weight: bold;">Swingweb</span>项目的主要目的：<br /><ol><li><b>创建真正的基于组件（component）web应用程序平台  </b><br />Swingweb允许开发者利用
UI
components的概念来开发web应用程序。大大简化了以前繁复的页面管理，seesion创建等等。一旦创建了一个组件（component），
无论是一个简单的textbox，还是一个复杂的calender，都是可以重复使用的（reusable），这减轻了开发负担。<br /></li><li><b>在web应用程序开发中使用swing UI model</b><br />Swing component model在java平台中应用得非常广泛，所以那些java程序员如果选用swingweb作为开发框架，将不会花费多少时间来学习。<br /></li><li><b>允许使用各种GUI开发工具来简化开发</b><br />当今已经有很多优秀的JAVA IDE支持GUI开发，例如eclipse和netbeans，开发者可以随意使用就像在开发一个java桌面应用程序一样。<br /><br /></li></ol>
这里有2个swingweb的演示flash：<br /><ul><li class="none"><a target="demo1" href="http://swingweb.sourceforge.net/swingweb/demo/demo1.html" _fcksavedurl="http://swingweb.sourceforge.net/swingweb/demo/demo1.html">Flash demo1</a></li><li class="none"><a target="demo2" href="http://swingweb.sourceforge.net/swingweb/demo/demo2.html" _fcksavedurl="http://swingweb.sourceforge.net/swingweb/demo/demo2.html">Flash demo2</a></li></ul>
Swingweb官方网站：<br /><a href="http://swingweb.sourceforge.net/swingweb/" _fcksavedurl="http://swingweb.sourceforge.net/swingweb/">http://swingweb.sourceforge.net/swingweb/</a><img src ="http://www.blogjava.net/burnet/aggbug/62854.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/burnet/" target="_blank">Burn Net</a> 2006-08-10 20:50 <a href="http://www.blogjava.net/burnet/archive/2006/08/10/swingweb.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>将来12个月内java技术前瞻－－来自16位德国java专家</title><link>http://www.blogjava.net/burnet/archive/2006/08/10/62852.html</link><dc:creator>Burn Net</dc:creator><author>Burn Net</author><pubDate>Thu, 10 Aug 2006 12:49:00 GMT</pubDate><guid>http://www.blogjava.net/burnet/archive/2006/08/10/62852.html</guid><wfw:comment>http://www.blogjava.net/burnet/comments/62852.html</wfw:comment><comments>http://www.blogjava.net/burnet/archive/2006/08/10/62852.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/burnet/comments/commentRss/62852.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/burnet/services/trackbacks/62852.html</trackback:ping><description><![CDATA[昨天，16位德国JAVA专家在一起讨论<span style="font-weight: bold;">“在下面12个月中，我们应该学习什么？”</span>，如果你想知道讨论的详细内容，请看这里<a _fcksavedurl="http://www.firstpartners.net/red-piranha/knowledgebase/VirtualJavaMeetup" href="http://www.firstpartners.net/red-piranha/knowledgebase/VirtualJavaMeetup">http://www.firstpartners.net/red-piranha/knowledgebase/VirtualJavaMeetup.</a><br /><br />
如果你没有耐心看下去，那么请看我列出的总结：<br /><ul><li>网络服务将会膨胀，但是前提条件是必须保持整洁的情况下。</li><li>EJB 3 和 Netbeans 是非常值得我们在上面花费时间的, 它们都比以前的版本要完善得多，虽然之前它们的名声并不是那么好。<br /></li><li>Middleware (例如 workflow and Rules Engines) 关注的是团队开发，但是想进入这样一个团体的障碍是很高的。</li><li>Struts会继续称霸JAVA WEB frameworks, 尽管它已经不是最优秀的技术了。<br /></li><li>非常多的公司将继续使用 Java 1.4, 同时关注着Java 1.6。<br /></li><li>Service Orientated Architecuture (SOA)是一个非常不错的想法，但是目前为止并没有太多的project在使用它。<br /></li><li>IDE’s (Netbeans / Eclipse / JDeveloper) 会给我们带来很多好处, 前提条件是它们必须被low level工具支持 (例如 Ant 和 Maven).</li></ul><img src ="http://www.blogjava.net/burnet/aggbug/62852.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/burnet/" target="_blank">Burn Net</a> 2006-08-10 20:49 <a href="http://www.blogjava.net/burnet/archive/2006/08/10/62852.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>踏上国土。</title><link>http://www.blogjava.net/burnet/archive/2006/06/27/55366.html</link><dc:creator>Burn Net</dc:creator><author>Burn Net</author><pubDate>Tue, 27 Jun 2006 09:10:00 GMT</pubDate><guid>http://www.blogjava.net/burnet/archive/2006/06/27/55366.html</guid><wfw:comment>http://www.blogjava.net/burnet/comments/55366.html</wfw:comment><comments>http://www.blogjava.net/burnet/archive/2006/06/27/55366.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/burnet/comments/commentRss/55366.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/burnet/services/trackbacks/55366.html</trackback:ping><description><![CDATA[经过11个半小时的长途飞行，还有在韩国的一夜煎熬，终于踏上了祖国的国土。回家的感觉真好。<br />不得不提一下在韩国的待遇，因为要过夜，机场提供宾馆住宿，飞机于韩国当地时间晚上9点半到达，结果凌晨2点多我才躺在宾馆的床上。<br />条件还是不错，是个5星的宾馆，于是按计划给没有同行的老婆打个电话，聊了大概20分钟，可是第二天退房的时候竟然要了我1万多korean wan，合人民币100左右。我算是张记性了，以后还是买张卡再打电话吧。<br /><br />回国稍微休息了一天，把Dojo book第一章补充翻译了出来。<br /><img src ="http://www.blogjava.net/burnet/aggbug/55366.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/burnet/" target="_blank">Burn Net</a> 2006-06-27 17:10 <a href="http://www.blogjava.net/burnet/archive/2006/06/27/55366.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dojo book第一章补充 I/O </title><link>http://www.blogjava.net/burnet/archive/2006/06/27/55339.html</link><dc:creator>Burn Net</dc:creator><author>Burn Net</author><pubDate>Tue, 27 Jun 2006 08:56:00 GMT</pubDate><guid>http://www.blogjava.net/burnet/archive/2006/06/27/55339.html</guid><wfw:comment>http://www.blogjava.net/burnet/comments/55339.html</wfw:comment><comments>http://www.blogjava.net/burnet/archive/2006/06/27/55339.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/burnet/comments/commentRss/55339.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/burnet/services/trackbacks/55339.html</trackback:ping><description><![CDATA[译者序：<br />Dojo book目前还在不断更新和补充中，我会尽量跟上原著的脚步，给大家最新的信息。<br />更新我会用随笔写出来，同时也会更新原文章。<br /><hr size="2" width="100%" /><b>I/O<br /><br />dojo.io.blind介绍</b><br /><br />在我们制作dojo的时候，目的是让用户和开发者都能享受到DHTML程序。在很多朋友的支持下，特别是Aaron
Boodman和Mark Anderson，我们已经找到了解决可用性的方法。我们提供了一个单独的易用的API和一个包装类，这个类只需要两个文件。dojo.io包提供了对XMLHTTP和一些其他更复杂的传输结构的支持。<br /><br />在dojo.io包中我们一般最常使用的是dojo.io.bind()方法。dojo.io.blind()是一个标准的异步的请求API，它包含了各种传输层（transport layers），包括queues of iFrames,XMLHTTP,mod_pubsub,LivePage等等。Dojo会试图为当前的请求选择最合适的传输方法，因为在做网站时一般不会使用到其他传输，所以我们只用到XMLHTTP。dojo接受一个匿名的类，但是在知道这个类的属性的情况下，把它作为方法参数（function argument）。下面的代码是创建一个请求（request），这个请求会从URL返回原始的字符串。<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">dojo.io.bind({<br />    url: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">http://foo.bar.com/sampleData.txt</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,<br />    load: </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(type, data, evt){ </span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);">do something w/ the data </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"> },<br />    mimetype: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">text/plain</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />});</span></div><br />这就是全部，你提供了一个数据地址，还有一个当你得到返回值时要执行的function。但是如果在请求过程中出错了怎么办呢？我们再来创建一个register来解决：<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">dojo.io.bind({<br />    url: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">http://foo.bar.com/sampleData.txt</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,<br />    load: </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(type, data, evt){ </span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);">do something w/ the data </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"> },<br />    error: </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(type, error){ </span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);">do something w/ the error</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"> },<br />    mimetype: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">text/plain</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />});</span></div><br />同样也可以只创建一个单独的handler来解决：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">dojo.io.bind({<br />    url: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">http://foo.bar.com/sampleData.txt</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,<br />    handle: </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(type, data, evt){<br />        </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(type </span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">load</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">){<br />            </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> do something with the data object</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">        }</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(type </span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">error</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">){<br />            </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> here, "data" is our error object</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">            </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> respond to the error here</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">        }</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">{<br />            </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> other types of events might get passed, handle them here</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">        }<br />    },<br />    mimetype: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">text/plain</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />});</span></div><br />下面的代码提交一段javascript程序段，然后让服务器运行它，一般我们这么做是为了加速程序运行，注意<u>mimetype：<br /></u><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">dojo.io.bind({<br />    url: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">http://foo.bar.com/sampleData.js</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,<br />    load: </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(type, evaldObj){ </span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);"> do something </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"> },<br />    mimetype: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">text/javascript</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />});</span></div><u><br /></u>如果你想确保程序使用XMLHTTP，可以这样写：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">dojo.io.bind({<br />    url: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">http://foo.bar.com/sampleData.js</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,<br />    load: </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(type, evaldObj){ </span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);"> do something </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"> },<br />    mimetype: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">text/plain</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> get plain text, don't eval()</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">    transport: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">XMLHTTPTransport</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />});</span></div>Being a jack-of-all-trades, <tt class="docutils literal"><span class="pre">bind()</span></tt> also supports the submission of forms via a
request (with the single caveat that it won't do file upload over XMLHTTP):<br />作为一个jack-of-all-trades（万事通），bind()同样支持来自于表单提交的数据。<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">dojo.io.bind({<br />    url: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">http://foo.bar.com/processForm.cgi</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,<br />    load: </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(type, evaldObj){ </span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);"> do something </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"> },<br />    formNode: document.getElementById(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">formToSubmit</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)<br />});</span></div>以上只是一些最基本的，其实这些可以不用全部由开发者自定义。<br /><br /><b>RPC</b><br />你可以看到，Dojo通过dojo.io.bind提供了简单，强大的方法使用多种多样的I/O functions。但是在开发过程中，程序员会调用很多很多I/O，这同时会给服务器和客户端加重负担。Dojo的RPC服务就是为了减少负担，易用，精简代码而生的。<br /><br />RPC的全名是Remote Procedre Calls,或者Remote Method Invocation,（译者：远程method调用）。最基本的，RPC允许开发者调用在远程服务器上的方法（method）。Dojo不仅提供了基本的RPC client包，而且还扩展了它，使它支持JSON-RPC服务和YAHOO服务。同时你也可以自己写出相对于其他服务的类。<br /><br />我们假定有一个需要调用服务器端程序的小程序，假设要调用add(x,y)和subtract(x,y)。在没有特殊情况的条件下，我们的客户端会这样写：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">add </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(x,y) {<br /><br />    request </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> {x: x, y: y};<br /><br />    dojo.io.bind({<br />            url: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">add.php</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,<br />            load: onAddResults,<br />            mimetype: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">text/plain</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,<br />        content: request<br />    });<br />}<br /><br />subtract </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(x,y) {<br /><br />    request </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> {x: x, y: y};<br />    <br />    dojo.io.bind({<br />            url: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">subract</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,<br />            load: onSubtractResults,<br />            mimetype: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">text/plain</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"><br />        content: request<br />    });<br />}</span></div><br /><img src="file:///C:/DOCUME%7E1/user/LOCALS%7E1/Temp/moz-screenshot.jpg" alt="" /><br />你看，这不是很难。但是无论是我们让服务器运行add和subtract还是让客户端自己计算，这只是一个非常简单的程序。如果我们要调用在服务器上30个不同method会怎么样呢？我猜我们可能要重复的写几乎一样的代码一遍又一遍，每次都要创建一个请求类（request object),设定URL，设定变量等等。这不仅容易出错，而且还很枯燥。<br />Dojo的RPC客户端简化了这个过程：<p></p><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">{<br />    </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">serviceType</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">JSON-RPC</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, <br />    </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">serviceURL</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">rpcProcessor.php</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, <br />    </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">methods</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:[ <br />        {<br />            </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">name</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">add</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, <br />            </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">parameters</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:[<br />                {</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">name</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">x</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">},<br />                {</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">name</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">y</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">}    <br />            ]<br />        },<br />        {<br />            </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">name</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">subtract</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, <br />            </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">parameters</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:[<br />                {</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">name</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">x</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">},<br />                {</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">name</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">y</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">}    <br />            ]<br />        }<br /><br />    ]<br />}</span></div><br />以上就是对于服务器的定义。一旦定义创建完毕，其他的事情就简单了，我们还可以创建一个类：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> myObject </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> dojo.rpc.JsonService</span><span style="color: rgb(0, 0, 0);">?</span><span style="color: rgb(0, 0, 0);">(defintion);</span></div>要使用服务器的方法：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">myObject.add(</span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);">);</span></div><br />我敢打赌你会在想“我不是只调用方法就够了，我还有得到计算的结果。”你是对的，但这也是非常容易的。服务器端的myObject.add()会返回一个延缓类（deferred object）。Twisted Python用户可能对延缓类（deferred object）很熟悉，延缓类（deferred object）允许开发者根据返回数据的类型附加一个或更多的回叫（callbacks）和错误处理（errbacks）。这里有一个简单的例子：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> myDeferred </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> myObject.add(</span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);">);<br />myDeferred.addCallback(myCallbackMethod);</span></div><br />我们把mycallbackmethod作为回叫添加到我们的延缓类mydeferred。这时，8会被传递进mycallbackmethod。另一方面，我们也可以添加一个errback method来处理服务器返回的出错信息。我们随意添加回叫方法（callback），多少都可以，它们会按照我们定义的顺序被调用。<br /><br />以上的例子都是围绕dojo.rpc.JsonService展开的。我们还可以使用dojo.rpc.YahooService，规范和结构都是一样的。这两个类都是继承了dojo.rpc.RpcService。要创建自己的类会在第二章中详细介绍。（译者：第二章原著还没有完成）<br /><img src ="http://www.blogjava.net/burnet/aggbug/55339.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/burnet/" target="_blank">Burn Net</a> 2006-06-27 16:56 <a href="http://www.blogjava.net/burnet/archive/2006/06/27/55339.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>旅途</title><link>http://www.blogjava.net/burnet/archive/2006/06/23/54778.html</link><dc:creator>Burn Net</dc:creator><author>Burn Net</author><pubDate>Fri, 23 Jun 2006 12:55:00 GMT</pubDate><guid>http://www.blogjava.net/burnet/archive/2006/06/23/54778.html</guid><wfw:comment>http://www.blogjava.net/burnet/comments/54778.html</wfw:comment><comments>http://www.blogjava.net/burnet/archive/2006/06/23/54778.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/burnet/comments/commentRss/54778.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/burnet/services/trackbacks/54778.html</trackback:ping><description><![CDATA[明天中午12点我将坐上飞往祖国的航班。<br />想想11个半小时的飞行就烦。计划在飞机上完成Dojo.Book第二章的翻译。<br />幻想10年后的飞机会有多么舒适，有床，可以上网我就满足了。<br />现在我都快有恐飞症了。<br /><img src ="http://www.blogjava.net/burnet/aggbug/54778.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/burnet/" target="_blank">Burn Net</a> 2006-06-23 20:55 <a href="http://www.blogjava.net/burnet/archive/2006/06/23/54778.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个“笑话”引发的思考</title><link>http://www.blogjava.net/burnet/archive/2006/06/22/54566.html</link><dc:creator>Burn Net</dc:creator><author>Burn Net</author><pubDate>Thu, 22 Jun 2006 11:11:00 GMT</pubDate><guid>http://www.blogjava.net/burnet/archive/2006/06/22/54566.html</guid><wfw:comment>http://www.blogjava.net/burnet/comments/54566.html</wfw:comment><comments>http://www.blogjava.net/burnet/archive/2006/06/22/54566.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/burnet/comments/commentRss/54566.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/burnet/services/trackbacks/54566.html</trackback:ping><description><![CDATA[抱歉引用了“馒头”的经典格式<img alt="" src="http://blog.csdn.net/fckeditor/editor/images/smiley/msn/teeth_smile.gif" />。<br />技术是枯燥的，如果我们玩技术的再不自娱自乐一下，那可真没救儿了。<br />言归正传，“笑话”是这样的：<br /><br /><div style="MARGIN-LEFT: 40px"><font style="BACKGROUND-COLOR: #a9a9a9"><font style="BACKGROUND-COLOR: #d3d3d3">当美国人第一次成功发射载人卫星后，美国宇航员发现因为太空缺少地球引力，原来方便的圆珠笔不能用了。于是美国花巨资组成了一个研发小组，经过半年后终于研制出了一种可以不受引力限制的圆珠笔，美国宇航局（NASA）非常满意。<br />与此同时，俄罗斯宇航员也遇到了同样难题，圆珠笔不好用了！<br />结果俄罗斯宇航员决定使用铅笔。</font><br /></font><br /></div>我突然想起了我在不久之前研究ajax的时候，为了使用Net Beans＋GWT来开发ajax，查阅了很多文档，找了很多资料，就是没想起来其实可以用textpad写class的。<br /><br />这也是我为什么喜欢上dojo的原因，本来简洁的东西就让它简洁下去，何必让它那么复杂？<br /><br />当然，如果能熟练的用Net Beans＋GWT或者DWR开发ajax也不乏是件美事。<br /><br />但是也许有的时候我们没有象“美国”那样的实力或者精力，在想简单的作一个小项目的时候不妨试试“俄罗斯”的办事方法，该简单的事情别搞复杂了。<br /><img src ="http://www.blogjava.net/burnet/aggbug/54566.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/burnet/" target="_blank">Burn Net</a> 2006-06-22 19:11 <a href="http://www.blogjava.net/burnet/archive/2006/06/22/54566.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最近爱上Dojo</title><link>http://www.blogjava.net/burnet/archive/2006/06/22/54564.html</link><dc:creator>Burn Net</dc:creator><author>Burn Net</author><pubDate>Thu, 22 Jun 2006 11:10:00 GMT</pubDate><guid>http://www.blogjava.net/burnet/archive/2006/06/22/54564.html</guid><wfw:comment>http://www.blogjava.net/burnet/comments/54564.html</wfw:comment><comments>http://www.blogjava.net/burnet/archive/2006/06/22/54564.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/burnet/comments/commentRss/54564.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/burnet/services/trackbacks/54564.html</trackback:ping><description><![CDATA[也许是因为Dojo的简洁，强大，或者是我真的没有耐心自己一点一点写javascript。<br /><br />以前研究过gwt，dwr，最后还是感觉dojo用得最舒服，dojo不会象dwr限制我的server side。<br /><br />以后我会写很多关于dojo的文章，当然还包括如何自由使用dojo链接到servlet/jsp/php/sql。<img src ="http://www.blogjava.net/burnet/aggbug/54564.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/burnet/" target="_blank">Burn Net</a> 2006-06-22 19:10 <a href="http://www.blogjava.net/burnet/archive/2006/06/22/54564.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dojo.Book第一章翻译完成。(链接修正，抱歉）</title><link>http://www.blogjava.net/burnet/archive/2006/06/21/54190.html</link><dc:creator>Burn Net</dc:creator><author>Burn Net</author><pubDate>Wed, 21 Jun 2006 05:09:00 GMT</pubDate><guid>http://www.blogjava.net/burnet/archive/2006/06/21/54190.html</guid><wfw:comment>http://www.blogjava.net/burnet/comments/54190.html</wfw:comment><comments>http://www.blogjava.net/burnet/archive/2006/06/21/54190.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/burnet/comments/commentRss/54190.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/burnet/services/trackbacks/54190.html</trackback:ping><description><![CDATA[今天突然发现原来wordpress.com的blog在中国访问有问题，为了能跟更多的朋友一起学习，于是决定转到这个blog，开始我的新研究旅程。<br /><br />这里的第一感觉是气氛很好，没有程序员的牢骚，只有技术，技术第一。<br /><br />把刚刚完成的Dojo.Book第一章翻译转过来，给有需要的朋友一些帮助，我会抓紧把下两章翻译出来。<br /><a target="" class="" title="" href="/burnet/articles/54186.html">Dojo.Book第一章</a><br />以后我还会写更多关于Dojo的文章。<br />我个人比较看好Dojo，简洁，强大，最近Sun也加入了Dojo开发组。<br /><br />抱歉，刚刚修正链接。<br /><img src ="http://www.blogjava.net/burnet/aggbug/54190.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/burnet/" target="_blank">Burn Net</a> 2006-06-21 13:09 <a href="http://www.blogjava.net/burnet/archive/2006/06/21/54190.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>