﻿<?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>博客园-bailingewei</title><link>http://www.cnblogs.com/bailingewei/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 22 Nov 2008 23:30:40 GMT</lastBuildDate><pubDate>Sat, 22 Nov 2008 23:30:40 GMT</pubDate><ttl>60</ttl><item><title>1.7 设计考虑 1.8 小结</title><link>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123200.html</link><dc:creator>bailingewei</dc:creator><author>bailingewei</author><pubDate>Wed, 26 Mar 2008 07:31:00 GMT</pubDate><guid>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123200.html</guid><wfw:comment>http://www.cnblogs.com/bailingewei/comments/1123200.html</wfw:comment><comments>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123200.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/bailingewei/comments/commentRss/1123200.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/bailingewei/services/trackbacks/1123200.html</trackback:ping><description><![CDATA[<p style="margin-top: 4.6pt; text-indent: 20.6pt"><span style="font-family: 宋体; letter-spacing: -0.1pt">既然对在哪里使用</span><span style="letter-spacing: -0.1pt">Ajax</span><span style="font-family: 宋体; letter-spacing: -0.1pt">已经有所认识，下面再来谈谈应用</span><span style="letter-spacing: -0.1pt">Ajax</span><span style="font-family: 宋体; letter-spacing: -0.1pt">的一些设计考虑。许多原则与</span><span style="letter-spacing: -0.1pt">Web</span><span style="font-family: 宋体; letter-spacing: -0.1pt">应用的原则并无不同，不过还是有必要强调一下。要尽力减少客户和服务器之间的通信量。如果应用得当，</span><span style="letter-spacing: -0.1pt">Ajax</span><span style="font-family: 宋体; letter-spacing: -0.1pt">会使你的应用响应更快，但是如果每次用户从一个域移到另一个域时你都来回传递超量的数据，用户肯定不会满意。如果有疑问，按标准约定行事。如果大多数应用都那么做，可能你也应该那么做。如果还有问题，可以看看</span><span style="letter-spacing: -0.1pt">Web</span><span style="font-family: 宋体; letter-spacing: -0.1pt">桌面应用的有关标准。为此已经建立了一些模式，而且以后还会有更多的模式</span><span style="font-family: 宋体">（</span><span style="font-size: 10pt"><font face="Courier New">www.ajaxpatterns.org</font></span><span style="font-family: 宋体">）。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">在刚开始使用</span>Ajax<span style="font-family: 宋体">时，你的用户可能不清楚应用的工作机理的。多年来我们一直在告诉用户：</span>Web<span style="font-family: 宋体">是以某种（同步）方式工作的，而</span>Ajax<span style="font-family: 宋体">则增加了异步组件，可能与之背道而驰。简单地说，不要让用户觉得奇怪。当用户用跳格键离开最后一个域时，如果以前的应用（没有使用</span>Ajax<span style="font-family: 宋体">的应用）没有保存表单，那么使用</span>Ajax<span style="font-family: 宋体">之后的应用也不要保存表单。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">实现</span>Ajax<span style="font-family: 宋体">时最重要的问题是要力求简单，完全从用户出发，要尽量&#8220;傻瓜化&#8221;。要把用户放在心上，不要去做&#8220;简历驱动的设计&#8221;</span><a title="" href="file:///C:/Documents%20and%20Settings/shenyi/桌面/邮电图书章节/邮电图书章节/AJAX基础教程1-3/1new.htm#_ftn4" name="_ftnref4"><span style="font-size: 10.5pt; font-family: 'Times New Roman'">[4]</span></a><span style="font-family: 宋体">。如果只是想让新老板接受你，并因此在应用中使用</span>Ajax<span style="font-family: 宋体">，这是不合适的；如果使用</span>Ajax<span style="font-family: 宋体">能让你的用户有更丰富的体验，那就义无反顾地使用</span>Ajax<span style="font-family: 宋体">吧。但是别忘了，你会做，并不意味着你应该做。要理智一些，先考虑你的用户才对。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">我们后面还会更多地谈到安全，但是这里需要先说明一点，</span>Ajax<span style="font-family: 宋体">有一些安全考虑。记住，可以在浏览器中查看源代码，这说明任何人都能知道你是怎么创建小部件的。建立</span>XHR<span style="font-family: 宋体">对象时必须包含统一资源定位符（</span>uniform resource locators<span style="font-family: 宋体">，</span>URL<span style="font-family: 宋体">），所以可能会有恶意用户修改你的网站，运行他们自己的代码。谨慎地使用</span>Ajax<span style="font-family: 宋体">可以降低这种风险。<br />
<br />
1.8 小结<br />
</p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">因特网最初只是为连接研究人员，使他们共享信息，时至今日，因特网已经得到了巨大的发展。因特网开始时只有简单的文本浏览器和静态页面，但是如今几乎每家公司都有一个亮丽的网站，想找到一个粗糙的网站倒是很不容易。最早谁能想得到，有一天人们能在网上共同研究新型汽车，或者购买最新的斯蒂芬&#183;金的小说呢？</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">胖客户应用的开发人员都饱受部署之苦，因为要把应用部署到数以千计的用户机器上，他们急切地希望</span>Web<span style="font-family: 宋体">能够减轻他们的负担。多年以来，已经出现了许多</span>Web<span style="font-family: 宋体">应用技术，有些是专用的，有些需要高超的编程能力。尽管这些技术在用户体验方面各有千秋，但没有哪个技术能使瘦客户应用达到桌面应用的水平。不过，由于很容易部署，有更大的客户群体，而且维护开销更低，这说明尽管浏览器存在一定的局限性，但仍是许多应用的首选目标平台。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">开发人员可以使用一些技巧来绕过因特网的麻烦限制。利用各种远程脚本方法和</span>HTML<span style="font-family: 宋体">元素，开发人员可以与服务器异步地通信，但是直到有主流浏览器对</span>XMLHttpRequest<span style="font-family: 宋体">对象提供了支持，真正的跨浏览器方法才有可能。</span>Google<span style="font-family: 宋体">、</span>Yahoo<span style="font-family: 宋体">和</span>Amazon<span style="font-family: 宋体">等公司已经走在前面，我们终于看到基于浏览器的应用也能与胖客户应用不相上下。利用</span>Ajax<span style="font-family: 宋体">，你可以尽享这两方面的好处：代码位于你能控制的服务器上，而且只要客户有浏览器就能访问一个能提供丰富用户体验的应用。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><a href="http://book.csdn.net/bookfiles/11/10011440.shtml"><br />
</a><br />
</span></p>
<img src ="http://www.cnblogs.com/bailingewei/aggbug/1123200.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43629/" target="_blank">[新闻][译稿]微软将 jQuery IntelliSense整合到Visual Studio</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>1.6 使用场合</title><link>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123190.html</link><dc:creator>bailingewei</dc:creator><author>bailingewei</author><pubDate>Wed, 26 Mar 2008 07:27:00 GMT</pubDate><guid>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123190.html</guid><wfw:comment>http://www.cnblogs.com/bailingewei/comments/1123190.html</wfw:comment><comments>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123190.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/bailingewei/comments/commentRss/1123190.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/bailingewei/services/trackbacks/1123190.html</trackback:ping><description><![CDATA[<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">既然你已经对</span>Ajax<span style="font-family: 宋体">产生了兴趣，还要知道重要的一点，即什么时候应该使用</span>Ajax<span style="font-family: 宋体">技术，而什么时候不该用。首先，不要害怕在应用中尝试新的方法。我们相信，几乎每个</span>Web<span style="font-family: 宋体">应用都能从</span>Ajax<span style="font-family: 宋体">技术中获益，只不过不要矫枉过正，过于离谱就行了。从验证开始就很合适，但是不要限制你的主动性。你当然可以使用</span>Ajax<span style="font-family: 宋体">提交数据，但也许不能把它作为提交数据的主要方法。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">其次，惟一会影响你应用</span>Ajax<span style="font-family: 宋体">的就是浏览器问题。如果大量用户（或者特别重要的用户）还在使用比较旧的浏览器，如</span>IE 5<span style="font-family: 宋体">、</span>Safari 1.2<span style="font-family: 宋体">或</span>Mozilla 1.0<span style="font-family: 宋体">之前的版本，</span>Ajax<span style="font-family: 宋体">技术就不能奏效。如果这是一些很重要的用户，你就要使用针对目标用户的跨浏览器的方法，而放弃</span>Ajax<span style="font-family: 宋体">，或者开发一个可以妥善降级的网站。浏览器支持可能不是一个重要因素，因为</span>Netscape Navigator 4<span style="font-family: 宋体">在市场上的份额很小。不过，还是应该查看</span>Web<span style="font-family: 宋体">日志，看看你的应用适用什么技术。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">如前所述，验证和表单填写就非常适合采用</span>Ajax<span style="font-family: 宋体">实现。还可以使用</span>DOM<span style="font-family: 宋体">的&#8220;拖&#8221;技术建立真正动态的网站，如</span>Google<span style="font-family: 宋体">的个性化主页（见图</span>1-9<span style="font-family: 宋体">）。</span></p>
<br />
<img height="372" alt="" src="http://www.cnblogs.com/images/cnblogs_com/bailingewei/1-9.jpg" width="411" border="0" /><br />
<p style="margin: 7.7pt 0cm"><span style="font-family: 宋体">图</span>1-9<strong><span style="font-family: 宋体">　</span></strong>Google<span style="font-family: 宋体">的个性化主页</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">可以看到，</span>Ajax<span style="font-family: 宋体">为</span>Web<span style="font-family: 宋体">应用开发提供了新的机会。你不会再因为以往的专用技术或技术折中方案而受到妨碍。利用</span>Ajax<span style="font-family: 宋体">，胖客户与瘦客户之间的界限不再分明，真正的赢家则是你的用户。</span></p>
<img src ="http://www.cnblogs.com/bailingewei/aggbug/1123190.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43629/" target="_blank">[新闻][译稿]微软将 jQuery IntelliSense整合到Visual Studio</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>1.5 相关技术</title><link>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123178.html</link><dc:creator>bailingewei</dc:creator><author>bailingewei</author><pubDate>Wed, 26 Mar 2008 07:23:00 GMT</pubDate><guid>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123178.html</guid><wfw:comment>http://www.cnblogs.com/bailingewei/comments/1123178.html</wfw:comment><comments>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123178.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/bailingewei/comments/commentRss/1123178.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/bailingewei/services/trackbacks/1123178.html</trackback:ping><description><![CDATA[<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">当你看到本书时，可能已经了解了在应用中实现</span>Ajax<span style="font-family: 宋体">所需的大多数技术。重申一句，我们想强调的是，</span>Ajax<span style="font-family: 宋体">是一个客户端技术，不论你现在使用何种服务器端技术，都能使用</span>Ajax<span style="font-family: 宋体">，而不管使用的是</span>Java<span style="font-family: 宋体">、</span>.NET<span style="font-family: 宋体">、</span>Ruby<span style="font-family: 宋体">、</span>PHP<span style="font-family: 宋体">还是</span>CGI<span style="font-family: 宋体">。实际上，在这本书中我们并不考虑服务器端，而且假设你已经很清楚如何结合日常工作中使用的服务器端技术。在后面的几百页中，我们强调的重点是客户端技术和方法，创建丰富的基于浏览器的应用时需要用到这些技术。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">尽管可以使用你喜欢的任何服务器端技术，但当使用</span>Ajax<span style="font-family: 宋体">时还是需要转变一下思想。在一般的</span>Web<span style="font-family: 宋体">应用中，服务器端代码会呈现一个完整的页面，并涉及一个完整的工作单元。利用</span>Ajax<span style="font-family: 宋体">，可能只返回一点点文本，而且只涉及一个业务应用的很小子集。对于大多数有经验的</span>Web<span style="font-family: 宋体">开发人员来说，理解起来没有什么问题，但是一定要记住这一点。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">一些新兴的框架有助于开发人员跳出</span>Ajax<span style="font-family: 宋体">的一些细节。不过，你还是要对</span>JavaScript<span style="font-family: 宋体">有所了解。我们知道，</span>JavaScript<span style="font-family: 宋体">用起来可能很费劲。但很遗憾，对此没有什么办法。我们大多数人都学过这么一招，把&#8220;</span>alert<span style="font-family: 宋体">&#8221;作为一种系统类型输出来帮助调试，糟糕的是，这种技术使用得还很广。不过，现在我们有了新的利器。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">除了</span>JavaScript<span style="font-family: 宋体">，你还要熟悉其他一些与表示相关的技术，如</span>HTML<span style="font-family: 宋体">、</span>DOM<span style="font-family: 宋体">和</span>CSS<span style="font-family: 宋体">。你不必是这方面的专家，但是基本了解还是必要的。本书中我们会谈到你需要知道的大多数内容，没有谈到的内容可以参考网上的资源。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">关于测试驱动（你肯定写过单元测试，对不对？），我们会介绍</span>JsUnit<span style="font-family: 宋体">和</span>Selenium<span style="font-family: 宋体">（见图</span>1-8<span style="font-family: 宋体">）。利用这些工具，可以先开发</span>JavaScript<span style="font-family: 宋体">测试，并检查浏览器兼容性测试。通常认为，下一代开发环境会对</span>JavaScript<span style="font-family: 宋体">提供更好的支持，另外一些与</span>Ajax<span style="font-family: 宋体">相关的技术会进一步减轻开发人员的负担。正在不断出现的脚本和框架也会使开发变得更为简单。</span></p>
<br />
<img height="290" alt="" src="http://www.cnblogs.com/images/cnblogs_com/bailingewei/1-8.jpg" width="414" border="0" /><br />
<span style="font-family: 宋体">图</span><span lang="EN-US">1-8</span><span style="font-family: 宋体">　</span><span lang="EN-US">Selenium</span>
<img src ="http://www.cnblogs.com/bailingewei/aggbug/1123178.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43629/" target="_blank">[新闻][译稿]微软将 jQuery IntelliSense整合到Visual Studio</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>1.5 相关技术</title><link>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123179.html</link><dc:creator>bailingewei</dc:creator><author>bailingewei</author><pubDate>Wed, 26 Mar 2008 07:23:00 GMT</pubDate><guid>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123179.html</guid><wfw:comment>http://www.cnblogs.com/bailingewei/comments/1123179.html</wfw:comment><comments>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123179.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/bailingewei/comments/commentRss/1123179.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/bailingewei/services/trackbacks/1123179.html</trackback:ping><description><![CDATA[<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">当你看到本书时，可能已经了解了在应用中实现</span>Ajax<span style="font-family: 宋体">所需的大多数技术。重申一句，我们想强调的是，</span>Ajax<span style="font-family: 宋体">是一个客户端技术，不论你现在使用何种服务器端技术，都能使用</span>Ajax<span style="font-family: 宋体">，而不管使用的是</span>Java<span style="font-family: 宋体">、</span>.NET<span style="font-family: 宋体">、</span>Ruby<span style="font-family: 宋体">、</span>PHP<span style="font-family: 宋体">还是</span>CGI<span style="font-family: 宋体">。实际上，在这本书中我们并不考虑服务器端，而且假设你已经很清楚如何结合日常工作中使用的服务器端技术。在后面的几百页中，我们强调的重点是客户端技术和方法，创建丰富的基于浏览器的应用时需要用到这些技术。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">尽管可以使用你喜欢的任何服务器端技术，但当使用</span>Ajax<span style="font-family: 宋体">时还是需要转变一下思想。在一般的</span>Web<span style="font-family: 宋体">应用中，服务器端代码会呈现一个完整的页面，并涉及一个完整的工作单元。利用</span>Ajax<span style="font-family: 宋体">，可能只返回一点点文本，而且只涉及一个业务应用的很小子集。对于大多数有经验的</span>Web<span style="font-family: 宋体">开发人员来说，理解起来没有什么问题，但是一定要记住这一点。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">一些新兴的框架有助于开发人员跳出</span>Ajax<span style="font-family: 宋体">的一些细节。不过，你还是要对</span>JavaScript<span style="font-family: 宋体">有所了解。我们知道，</span>JavaScript<span style="font-family: 宋体">用起来可能很费劲。但很遗憾，对此没有什么办法。我们大多数人都学过这么一招，把&#8220;</span>alert<span style="font-family: 宋体">&#8221;作为一种系统类型输出来帮助调试，糟糕的是，这种技术使用得还很广。不过，现在我们有了新的利器。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">除了</span>JavaScript<span style="font-family: 宋体">，你还要熟悉其他一些与表示相关的技术，如</span>HTML<span style="font-family: 宋体">、</span>DOM<span style="font-family: 宋体">和</span>CSS<span style="font-family: 宋体">。你不必是这方面的专家，但是基本了解还是必要的。本书中我们会谈到你需要知道的大多数内容，没有谈到的内容可以参考网上的资源。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">关于测试驱动（你肯定写过单元测试，对不对？），我们会介绍</span>JsUnit<span style="font-family: 宋体">和</span>Selenium<span style="font-family: 宋体">（见图</span>1-8<span style="font-family: 宋体">）。利用这些工具，可以先开发</span>JavaScript<span style="font-family: 宋体">测试，并检查浏览器兼容性测试。通常认为，下一代开发环境会对</span>JavaScript<span style="font-family: 宋体">提供更好的支持，另外一些与</span>Ajax<span style="font-family: 宋体">相关的技术会进一步减轻开发人员的负担。正在不断出现的脚本和框架也会使开发变得更为简单。</span></p>
<br />
<img height="290" alt="" src="http://www.cnblogs.com/images/cnblogs_com/bailingewei/1-8.jpg" width="414" border="0" /><br />
<span style="font-family: 宋体">图</span><span lang="EN-US">1-8</span><span style="font-family: 宋体">　</span><span lang="EN-US">Selenium</span>
<img src ="http://www.cnblogs.com/bailingewei/aggbug/1123179.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43629/" target="_blank">[新闻][译稿]微软将 jQuery IntelliSense整合到Visual Studio</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>学习</title><link>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123161.html</link><dc:creator>bailingewei</dc:creator><author>bailingewei</author><pubDate>Wed, 26 Mar 2008 07:16:00 GMT</pubDate><guid>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123161.html</guid><wfw:comment>http://www.cnblogs.com/bailingewei/comments/1123161.html</wfw:comment><comments>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123161.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/bailingewei/comments/commentRss/1123161.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/bailingewei/services/trackbacks/1123161.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 刚刚开始工作,在工作中遇到很多不懂甚至不知道的东西.领导交给个任务,过了很几天才在网上问别人得到了答案.其中就有--Ajax.完全没接触过.所以从现在开始学习.<br />
&nbsp;&nbsp;&nbsp; 在随笔里贴出来的是找到的一本书--&lt;&lt;Ajax基础教程 &gt;&gt;.作者：(美)阿斯利森 舒塔 ,出版时间：2006年02月.放到这来,一来怕自己忘记,还有想跟同样刚接触的朋友一起学习,大家相互交流,共同进步.<br />
&nbsp;&nbsp; 书的内容我会陆续贴出来的.我在分类里写了转贴处,为了方便每一篇我就不再重复了.
<img src ="http://www.cnblogs.com/bailingewei/aggbug/1123161.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43629/" target="_blank">[新闻][译稿]微软将 jQuery IntelliSense整合到Visual Studio</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>1.4 可用性问题</title><link>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123119.html</link><dc:creator>bailingewei</dc:creator><author>bailingewei</author><pubDate>Wed, 26 Mar 2008 07:00:00 GMT</pubDate><guid>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123119.html</guid><wfw:comment>http://www.cnblogs.com/bailingewei/comments/1123119.html</wfw:comment><comments>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123119.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/bailingewei/comments/commentRss/1123119.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/bailingewei/services/trackbacks/1123119.html</trackback:ping><description><![CDATA[<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">前面谈到的都是用户的期望，除此以外，可用性也不能不提。</span>Ajax<span style="font-family: 宋体">方法相当新，还没有多少成熟的最佳实践。不过，标准</span>Web<span style="font-family: 宋体">设计原则还是适用的。随着时间推移，当越来越多的人开始尝试这种方法时，就会发现可能存在哪些限制，并建立适当的指导原则。也就是说，你应该让用户来指导你。根据在应用中使用</span>Ajax<span style="font-family: 宋体">的方式，你可能会动态地改变页面中的某些部分，习惯于整个浏览器刷新的用户可能不会注意到与以前相比有什么变化。这个问题引出了一些新的特性，如</span>37signals<span style="font-family: 宋体">所普及的黄褪技术（</span>Yellow Fade Technique<span style="font-family: 宋体">，</span>YFT<span style="font-family: 宋体">），这个特性已经用在</span>Ajax<span style="font-family: 宋体">的招牌应用</span>Basecamp<span style="font-family: 宋体">中了。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">基本说来，</span>YFT<span style="font-family: 宋体">是指&#8220;取页面中有变化的部分，并置为黄色&#8221;。假设你的应用原本没有大量使用黄色，用户就很可能会注意到这种改变。过一段时间后，再让黄色逐渐褪色，直到恢复为原来的背景色。当然，你也可以选用你喜欢的其他颜色，只要能把用户的注意力吸引到有变化的部分。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">可能</span>YTF<span style="font-family: 宋体">并不适用于你的应用，你也可以选择用一种不那么张扬但仍很有用的方式来提醒用户。</span>Gmail<span style="font-family: 宋体">在右上角显示了一个闪动的红色&#8220;</span>Loading<span style="font-family: 宋体">&#8221;加载记号，提醒用户正在获取数据（见图</span>1-7<span style="font-family: 宋体">）。</span></p>
<br />
<img height="24" alt="" src="http://www.cnblogs.com/images/cnblogs_com/bailingewei/1-7.jpg" width="133" border="0" /><br />
<p style="margin: 7.7pt 0cm"><span style="font-family: 宋体">图</span>1-7<span style="font-family: 宋体">　</span>Gmail<span style="font-family: 宋体">的&#8220;</span>Loading<span style="font-family: 宋体">&#8221;记号</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">究竟要使用</span>YFT<span style="font-family: 宋体">还是其他类似的技术，实际上取决于你的用户。最简单的方法是让一组用户代表来进行测试。可以通过文字问卷，也可以使用基于</span>Web<span style="font-family: 宋体">的原型应用，这要看你处在设计过程的哪个阶段。但是不论如何测试，在真正采用</span>Ajax<span style="font-family: 宋体">完成复杂设计之前都应该取得一些用户反馈。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">而且要从小处做起。在刚开始使用</span>Ajax<span style="font-family: 宋体">时，不应该马上就创建一个可调整列的动态门户网站，而是应该先试着处理客户端验证，逐步转向服务器端。待有所了解后，可以再尝试更动态的使用，如填写一个下拉列表，或者设置某些默认文本。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">不管你要如何应用</span>Ajax<span style="font-family: 宋体">，记住别做稀奇古怪的事情。我们知道，这不算是一个学术性的建议。不过，目前这方面还没有严格的规则。先听听用户怎么说，部署之前一定要先做测试，而且要记住，如果太过古怪，用户很快就会点击&#8220;跳过本页&#8221;链接跳过你精心设计的这些部分。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">要知道使用</span>Ajax <span style="font-family: 宋体">时有几个常犯的错误。我们已经讨论过，有变化时如何向用户提供可视化的提示，不仅如此，</span>Ajax<span style="font-family: 宋体">还会以其他方式改变标准的</span>Web<span style="font-family: 宋体">方法。首先，不同于</span>IFRAME<span style="font-family: 宋体">和隐藏框架，通过</span>XHR<span style="font-family: 宋体">做出请求不会修改浏览器的历史栈。在许多情况下这没有什么问题（你可能会点击后退箭头，只是要看看是不是什么都没有改变，但这么做能有几次呢？），不过，如果你的用户确实想用后退按钮，就有问题了。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">其次，与其他基于浏览器的方法不同，</span>Ajax<span style="font-family: 宋体">不会修改地址栏中显示的链接，这表明你不能轻松地为一个页面建立书签，或者向朋友发送一个链接。对于许多应用来说，可能没有这个要求，但是如果你的网站专门为人提供行车路线之类的东西，就要针对这个问题提供一个解决方案。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">有一点很重要，使用</span>Ajax<span style="font-family: 宋体">不要过度。记住，</span>JavaScript<span style="font-family: 宋体">会在客户端的浏览器上运行，如果有数千行</span>JavaScript<span style="font-family: 宋体">代码，可能会让用户感觉速度太慢。如果脚本编写不当，就会很快失去控制，特别是当通信量增加时。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt">Ajax<span style="font-family: 宋体">允许你异步地完成操作，这个最大的优点同时也是它最突出的缺点。我们以前总是告诉用户，</span>Web<span style="font-family: 宋体">应用是以一种请求</span>/<span style="font-family: 宋体">响应模式完成操作的，用户也已经接受了这种思想。但是用了</span>Ajax<span style="font-family: 宋体">，就不再有这个限制。我们可以只修改页面的一部分，如果用户没想到这一点，他们很可能会被搞糊涂。所以，你要注意一定要让用户明白这一点，不要想当然地以为他们知道。记住，只要有疑问，就要请用户代表进行测试！</span></p>
<br />
转自:<font face="Verdana">http://book.csdn.net/bookfiles/11/10011436.shtml</font>
<img src ="http://www.cnblogs.com/bailingewei/aggbug/1123119.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43629/" target="_blank">[新闻][译稿]微软将 jQuery IntelliSense整合到Visual Studio</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>1.3 Web应用的发展历程  </title><link>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123010.html</link><dc:creator>bailingewei</dc:creator><author>bailingewei</author><pubDate>Wed, 26 Mar 2008 05:58:00 GMT</pubDate><guid>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123010.html</guid><wfw:comment>http://www.cnblogs.com/bailingewei/comments/1123010.html</wfw:comment><comments>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1123010.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/bailingewei/comments/commentRss/1123010.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/bailingewei/services/trackbacks/1123010.html</trackback:ping><description><![CDATA[<p style="margin-top: 4.6pt; 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>Web<span style="font-family: 宋体">页面的这种静态性不成问题，科学家只是使用因特网来交换研究论文，大学院校也只是通过因特网在线发布课程信息。企业界还没有发现这个新&#8220;渠道&#8221;会提供什么商机。实际上，以前公司主页显示的信息通常很少，无非是一些联系信息或者只是一些文档。不过没过多久，</span>Web<span style="font-family: 宋体">用户就开始有新的要求了，希望能得到更动态的网上体验。个人计算机成为企业不可或缺的资源，而且从个人宿舍到住家办公室开始出现越来越多的计算机。随着</span>Windows 95<span style="font-family: 宋体">的问世，随着人们已经领教了</span>Corel WordPerfect<span style="font-family: 宋体">和</span>Microsoft Excel<span style="font-family: 宋体">丰富的功能，用户的期望也越来越高。</span></p>
<p style="margin: 12.35pt 0cm 7.7pt">1.3.1&nbsp; CGI</p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">要让</span>Web<span style="font-family: 宋体">更为动态，第一个办法是公共网关接口（</span>Common Gateway Interface<span style="font-family: 宋体">，</span>CGI<span style="font-family: 宋体">）。与静态的</span>Web<span style="font-family: 宋体">获取不同，使用</span>CGI<span style="font-family: 宋体">可以创建程序，当用户发出请求时就会执行这个程序。假设要在</span>Web<span style="font-family: 宋体">网站上显示销售的商品，你可以利用</span>CGI<span style="font-family: 宋体">脚本来访问商品数据库，并显示结果。通过使用简单的</span>HTML<span style="font-family: 宋体">表单和</span>CGI<span style="font-family: 宋体">脚本，可以创建简单的网上店面，这样别人就可以通过浏览器来购买商品。编写</span>CGI<span style="font-family: 宋体">脚本可以用多种语言，从</span>Perl<span style="font-family: 宋体">到</span>Visual Basic<span style="font-family: 宋体">都可以，这使得掌握不同编程语言的人都能编写</span>CGI<span style="font-family: 宋体">脚本。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">不过，要创建动态的</span>Web<span style="font-family: 宋体">页面，</span>CGI<span style="font-family: 宋体">并不是最安全的方法。如果采用</span>CGI<span style="font-family: 宋体">，将允许别人在你的系统上执行程序。大多数情况下这可能没有问题，但是倘若某个用户有恶意企图，则很可能会利用这一点，让系统运行你本来不想运行的程序。尽管存在这个缺陷，到如今</span>CGI<span style="font-family: 宋体">仍在使用。</span></p>
<p style="margin: 12.35pt 0cm 7.7pt">1.3.2&nbsp; applet</p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">很显然，</span>CGI<span style="font-family: 宋体">可以有所改进。</span>1995<span style="font-family: 宋体">年</span>5<span style="font-family: 宋体">月，</span>Sun<span style="font-family: 宋体">公司的</span>John Gage<span style="font-family: 宋体">和</span>Andreessen<span style="font-family: 宋体">（目前在</span>Netscape<span style="font-family: 宋体">通信公司）宣布一种新的编程语言诞生，这就是</span>Java<span style="font-family: 宋体">。</span>Netscape Navigator<span style="font-family: 宋体">为这种新语言提供了支持，最初是为了支持机顶盒。（你可能原认为最早涉足智能家居的公司是</span>Microsoft<span style="font-family: 宋体">和</span>Sony<span style="font-family: 宋体">其实不然。）就像所有革命都机缘巧合一样，</span>Java<span style="font-family: 宋体">和因特网的出现恰到好处，在适当的时间、适当的地点横空出世，</span>Java<span style="font-family: 宋体">在</span>Web<span style="font-family: 宋体">上发布仅几个月，就已经有成千上万的人下载。由于</span>Netscape<span style="font-family: 宋体">的</span>Navigator<span style="font-family: 宋体">支持</span>Java<span style="font-family: 宋体">，动态</span>Web<span style="font-family: 宋体">页面掀开了新的一页：</span>applet<span style="font-family: 宋体">时代到来了。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt">applet<span style="font-family: 宋体">允许开发人员编写可嵌入在</span>Web<span style="font-family: 宋体">页面上的小应用程序。只要用户使用支持</span>Java<span style="font-family: 宋体">的浏览器，就可以在浏览器的</span>Java<span style="font-family: 宋体">虚拟机（</span>Java Virtual Machine<span style="font-family: 宋体">，</span>JVM<span style="font-family: 宋体">）中运行</span>applet<span style="font-family: 宋体">。尽管</span>applet<span style="font-family: 宋体">可以做很多事情，但它也存在一些限制：通常不允许它读写文件系统，它也不能加载本地库，而且可能无法启动客户端上的程序。除了这些限制外，</span>applet<span style="font-family: 宋体">是在一个沙箱安全模型中运行的，这是为了有助于防止用户运行恶意代码。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">对许多人来说，最初接触</span>Java<span style="font-family: 宋体">编程语言就是从</span>applet<span style="font-family: 宋体">开始的，当时这是创建动态</span>Web<span style="font-family: 宋体">应用的一种绝好的方法。</span>applet<span style="font-family: 宋体">允许你在浏览器中创建一个胖客户应用，不过要在平台的安全限制范围内。当时，在很多领域都广泛使用了</span>applet<span style="font-family: 宋体">，但是，</span>Web<span style="font-family: 宋体">社区并没有完全被</span>applet<span style="font-family: 宋体">&#8220;征服&#8221;</span><a title="" href="file:///C:/Documents%20and%20Settings/shenyi/桌面/邮电图书章节/邮电图书章节/AJAX基础教程1-3/1new.htm#_ftn2" name="_ftnref2"><span style="font-size: 10.5pt; font-family: 'Times New Roman'">[2]</span></a><span style="font-family: 宋体">。胖客户的开发人员都很熟悉一个问题：必须在客户端上部署适当的</span>Java<span style="font-family: 宋体">版本。因为</span>applet<span style="font-family: 宋体">在浏览器的虚拟机中运行，所以开发人员必须确保客户端安装了适当版本的</span>Java<span style="font-family: 宋体">。尽管这个问题也可以解决，但它确实妨碍了</span>applet<span style="font-family: 宋体">技术的进一步推广。而且如果</span>applet<span style="font-family: 宋体">写得不好，很可能对客户主机造成影响，这使许多客户对于是否采用基于</span>applet<span style="font-family: 宋体">的解决方案犹豫不定。如果你还不太熟悉</span>applet<span style="font-family: 宋体">，请看图</span>1-1<span style="font-family: 宋体">，图中显示了</span>Sun<span style="font-family: 宋体">公司提供的时钟</span>applet<span style="font-family: 宋体">。</span></p>
<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/bailingewei/1-1.jpg" border="0" /><br />
<p style="margin: 7.7pt 0cm"><span style="font-family: 宋体">图</span>1-1<span style="font-family: 宋体">　</span>Sun<span style="font-family: 宋体">的时钟</span>applet</p>
<p style="margin: 12.35pt 0cm 7.7pt">1.3.3&nbsp; JavaScript</p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">与此同时，</span>Netscape<span style="font-family: 宋体">创建了一种脚本语言，并最终命名为</span>JavaScript<span style="font-family: 宋体">（建立原型时叫做</span>Mocha<span style="font-family: 宋体">，正式发布之前曾经改名为</span>LiveWire<span style="font-family: 宋体">和</span>LiveScript<span style="font-family: 宋体">，不过最后终于确定为</span>JavaScript<span style="font-family: 宋体">）。设计</span>JavaScript<span style="font-family: 宋体">是为了让不太熟悉</span>Java<span style="font-family: 宋体">的</span>Web<span style="font-family: 宋体">设计人员和程序员能够更轻松地开发</span>applet<span style="font-family: 宋体">（当然，</span>Microsoft<span style="font-family: 宋体">也推出了与</span>JavaScript<span style="font-family: 宋体">相对应的脚本语言，称为</span>VBScript<span style="font-family: 宋体">）。</span>Netscape<span style="font-family: 宋体">请</span>Brendan Eich<span style="font-family: 宋体">来设计和实现这种新语言，他认为市场需要的是一种动态类型脚本语言。由于缺乏开发工具，缺少有用的错误消息和调试工具，</span>JavaScript<span style="font-family: 宋体">很受非议，但尽管如此，</span>JavaScript<span style="font-family: 宋体">仍然是一种创建动态</span>Web<span style="font-family: 宋体">应用的强大方法。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">最初，创建</span>JavaScript<span style="font-family: 宋体">是为了帮助开发人员动态地修改页面上的标记，以便为客户提供更丰富的体验。人们越来越认识到，页面也可以当作对象，因此文档对象模型（</span>Document Object Model<span style="font-family: 宋体">，</span>DOM<span style="font-family: 宋体">）应运而生。刚开始，</span>JavaScript<span style="font-family: 宋体">和</span>DOM<span style="font-family: 宋体">紧密地交织在一起，但最后它们还是&#8220;分道扬镳&#8221;，并各自发展。</span>DOM<span style="font-family: 宋体">是页面的一个完全面向对象的表示，该页面可以用某种脚本语言（如</span>JavaScript<span style="font-family: 宋体">或</span>VBScript<span style="font-family: 宋体">）进行修改。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">最后，万维网协会（</span>World Wide Web Consortium<span style="font-family: 宋体">，</span>W3C<span style="font-family: 宋体">）介入，并完成了</span>DOM<span style="font-family: 宋体">的标准化，而欧洲计算机制造商协会（</span>ECMA<span style="font-family: 宋体">）批准</span>JavaScript<span style="font-family: 宋体">作为</span>ECMAScript<span style="font-family: 宋体">规约。根据这些标准编写的页面和脚本，在遵循相应原则的任何浏览器上都应该有相同的外观和表现。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">在最初的几年中，</span>JavaScript<span style="font-family: 宋体">的发展很是坎坷，这是许多因素造成的。首先，浏览器支持很不一致，即使是今天，同样的脚本在不同浏览器上也可能有不同的表现；其次，客户可以自由地把</span>JavaScript<span style="font-family: 宋体">关闭，由于存在一些已知的安全漏洞，往往鼓励用户把</span>JavaScript<span style="font-family: 宋体">关掉。由于开发</span>JavaScript<span style="font-family: 宋体">很有难度（你会用</span>alert<span style="font-family: 宋体">吗？），许多开发人员退避三舍，有些开发人员干脆不考虑</span> JavaScript<span style="font-family: 宋体">，认为这是图形设计人员使用的一种&#8220;玩具&#8221;语言。许多人曾试图使用、测试和调试复杂的</span>JavaScript<span style="font-family: 宋体">，并为此身心俱疲，所以大多数人在经历了这种痛苦之后，最终只能满足于用</span>JavaScript<span style="font-family: 宋体">创建简单的基于表单的应用。</span></p>
<p style="margin: 12.35pt 0cm 7.7pt">1.3.4&nbsp; servlet<span style="font-family: 黑体">、</span>ASP<span style="font-family: 黑体">和</span>PHP<span style="font-family: 黑体">&#8230;&#8230;</span><span style="font-family: 黑体">哦</span><span style="font-family: 黑体">，</span><span style="font-family: 黑体">太多了</span><span style="font-family: 黑体">！</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">尽管</span>applet<span style="font-family: 宋体">是基于</span>Web<span style="font-family: 宋体">的，但胖客户应用存在的许多问题在</span>applet<span style="font-family: 宋体">上也有所体现。在大量使用拨号连接的年代（就算是今天，拨号连接也很普遍），要下载一个复杂</span>applet<span style="font-family: 宋体">的完整代码，要花很多时间，用户不能承受。开发人员还要考虑客户端上的</span>Java<span style="font-family: 宋体">版本，有些虚拟机还有更多的要求</span><a title="" href="file:///C:/Documents%20and%20Settings/shenyi/桌面/邮电图书章节/邮电图书章节/AJAX基础教程1-3/1new.htm#_ftn3" name="_ftnref3"><span style="font-size: 10.5pt; font-family: 'Times New Roman'">[3]</span></a><span style="font-family: 宋体">。理想情况下只需提供静态的</span>Web<span style="font-family: 宋体">页面就够了，毕竟，这正是设计因特网的本来目的。当然，尽管静态页面是静态的，但是如果能在服务器上</span><span style="font-family: 楷体_GB2312">动态地</span><span style="font-family: 宋体">生成内容，再把静态的内容</span><span style="font-family: 楷体_GB2312">返回</span><span style="font-family: 宋体">，这就太好了。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">在</span>Java<span style="font-family: 宋体">问世一年左右，</span>Sun<span style="font-family: 宋体">引入了</span>servlet<span style="font-family: 宋体">。现在</span>Java<span style="font-family: 宋体">代码不用再像</span>applet<span style="font-family: 宋体">那样在客户端浏览器中运行了，它可以在你控制的一个应用服务器上运行。这样，开发人员就能充分利用现有的业务应用，而且，如果需要升级为最新的</span>Java<span style="font-family: 宋体">版本，只需要考虑服务器就行了。</span>Java<span style="font-family: 宋体">推崇&#8220;一次编写，到处运行&#8221;，这一点使得开发人员可以选择最先进的应用服务器和服务器环境，这也是这种新技术的另一个优点。</span>servlet<span style="font-family: 宋体">还可以取代</span>CGI<span style="font-family: 宋体">脚本。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt">servlet<span style="font-family: 宋体">向前迈出了很大一步。</span>servlet<span style="font-family: 宋体">提供了对整个</span>Java<span style="font-family: 宋体">应用编程接口（</span>API<span style="font-family: 宋体">）的完全访问，而且提供了一个完备的库可以处理</span>HTTP<span style="font-family: 宋体">。不过，</span>servlet<span style="font-family: 宋体">不是十全十美的。使用</span>servlet<span style="font-family: 宋体">设计界面可能很困难。在典型的</span>servlet<span style="font-family: 宋体">交互中，先要从用户那里得到一些信息，完成某种业务逻辑，然后使用一些&#8220;打印行&#8221;创建</span>HTML<span style="font-family: 宋体">，为用户显示结果。代码清单</span>1-1<span style="font-family: 宋体">所示的代码就相当常见。</span></p>
<p style="margin: 11.55pt 2.1pt 7.7pt; text-indent: 18.9pt"><span style="font-family: 黑体">代码清单<font face="Arial">1-1</font></span><span style="font-family: 宋体">　简单的</span>servlet<span style="font-family: 宋体">代码</span></p>
<p>response.setContentType("text/html;charset=UTF-8");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrintWriter out = response.getWriter();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;html&gt;");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;head&gt;");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;title&gt;Servlet SimpleServlet&lt;/title&gt;");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;/head&gt;");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;body&gt;");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;h1&gt;Hello World&lt;/h1&gt;");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;p&gt;Imagine if this were more complex.&lt;/p&gt;");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;/body&gt;");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("&lt;/html&gt;");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.close();</p>
<p style="margin-top: 7.7pt; text-indent: 21pt"><span style="font-family: 宋体">以上这一小段代码可以生成图</span>1-2<span style="font-family: 宋体">所示的一个相当简单的</span>Web<span style="font-family: 宋体">页面。</span></p>
<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/bailingewei/1-2.jpg" border="0" /><br />
<p style="margin: 7.7pt 0cm"><span style="font-family: 宋体">图</span>1-2<span style="font-family: 宋体">　代码清单</span>1-1<span style="font-family: 宋体">中简单</span>servlet<span style="font-family: 宋体">的输出</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt">servlet<span style="font-family: 宋体">不仅容易出错，很难生成可视化显示，而且还无法让开发者尽展其才。一般地，编写服务器端代码的人往往是软件开发人员，他们只是对算法和编译器很精通，但不是能设计公司精美网站的图形设计人员。业务开发人员不仅要编写业务逻辑，还必须考虑怎么创建一致的设计。因此，很有必要将表示与业务逻辑分离。因此</span>JSP<span style="font-family: 宋体">（</span>JavaServer Pages<span style="font-family: 宋体">）出现了。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">在某种程度上，</span>JSP<span style="font-family: 宋体">是对</span> Microsoft<span style="font-family: 宋体">的</span> Active Server Pages (ASP<span style="font-family: 宋体">）做出的回应。</span>Microsoft<span style="font-family: 宋体">从</span>Sun<span style="font-family: 宋体">在</span>servlet<span style="font-family: 宋体">规约上所犯的错误汲取了教训，并创建了</span>ASP<span style="font-family: 宋体">来简化动态页面的开发。</span>Microsoft<span style="font-family: 宋体">增加了非常好的工具支持，并与其</span>Web<span style="font-family: 宋体">服务器紧密集成。</span>JSP<span style="font-family: 宋体">和</span>ASP<span style="font-family: 宋体">的设计目的都是为了将业务处理与页面外观相分离，从这个意义上讲，二者是相似的。虽然存在一些技术上的差别（</span>Sun<span style="font-family: 宋体">也从</span>Microsoft<span style="font-family: 宋体">那里学到了教训），但它们有一个最大的共同点，即</span>Web<span style="font-family: 宋体">设计人员能够专心设计页面外观，而软件开发人员可以专心开发业务逻辑。代码清单</span>1-2<span style="font-family: 宋体">显示了一个简单的</span>JSP<span style="font-family: 宋体">。</span></p>
<p style="margin: 11.55pt 2.1pt 7.7pt; text-indent: 18.9pt"><span style="font-family: 黑体">代码清单<font face="Arial">1-2</font></span><span style="font-family: 宋体">　简单的</span>JSP</p>
<p>&lt;%@page contentType="text/html"%&gt;</p>
<p>&lt;%@page pageEncoding="UTF-8"%&gt;</p>
<p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"</p>
<p>&nbsp;&nbsp;&nbsp; "http://www.w3.org/TR/html4/loose.dtd"&gt;</p>
<p>&lt;html&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;head&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="letter-spacing: -0.2pt">&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;Hello World&lt;/title&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/head&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;body&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;h1&gt;Hello World&lt;/h1&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;This code is more familiar for Web developers.&lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<p style="margin-top: 7.7pt; text-indent: 21pt"><span style="font-family: 宋体">这个代码会生成图</span>1-3<span style="font-family: 宋体">所示的输出。</span></p>
<br />
<img height="157" alt="" src="http://www.cnblogs.com/images/cnblogs_com/bailingewei/1-3.jpg" width="343" border="0" /><br />
<p style="margin: 7.7pt 0cm"><span style="font-family: 宋体">图</span>1-3<span style="font-family: 宋体">　简单</span>JSP<span style="font-family: 宋体">的输出</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">当然，</span>Microsoft<span style="font-family: 宋体">和</span>Sun<span style="font-family: 宋体">并没有垄断服务器端解决方案。还有许多其他的方案在这个领域都有一席之地，如</span>PHP<span style="font-family: 宋体">和</span>ColdFusion<span style="font-family: 宋体">等等。有些开发人员喜欢新奇的工具，还有一些则倾向于更简单的语言。目前来看，所有这些解决方案完成的任务都是一样的，它们都是要动态生成</span>HTML<span style="font-family: 宋体">。在服务器端生成内容可以解决发布问题。不过，与使用胖客户或</span>applet<span style="font-family: 宋体">所做的工作相比，用户从原始</span>HTML<span style="font-family: 宋体">得到的体验就太过单调和苍白了。下面几节将介绍几种力图提供更丰富用户体验的解决方案。</span></p>
<p style="margin: 12.35pt 0cm 7.7pt">1.3.5&nbsp; Flash</p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">并不是只有</span>Microsoft<span style="font-family: 宋体">和</span>Sun<span style="font-family: 宋体">在努力寻找办法来解决动态</span>Web<span style="font-family: 宋体">页面问题。</span>1996<span style="font-family: 宋体">年夏天，</span>FutureWave<span style="font-family: 宋体">发布了一个名叫</span>FutureSplash Animator<span style="font-family: 宋体">的产品。这个产品起源于一个基于</span>Java<span style="font-family: 宋体">的动画播放器，</span>FutureWave<span style="font-family: 宋体">很快被</span>Macromedia<span style="font-family: 宋体">兼并，</span>Macromedia<span style="font-family: 宋体">则将这个产品改名为</span>Flash<span style="font-family: 宋体">。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">利用</span>Flash<span style="font-family: 宋体">，设计人员可以创建令人惊叹的动态应用。公司可以在</span>Web<span style="font-family: 宋体">上发布高度交互性的应用，几乎与胖客户应用相差无几（见图</span>1-4<span style="font-family: 宋体">）。不同于</span>applet<span style="font-family: 宋体">、</span>servlet<span style="font-family: 宋体">和</span>CGI<span style="font-family: 宋体">脚本，</span>Flash<span style="font-family: 宋体">不需要编程技巧，很容易上手。在</span>20<span style="font-family: 宋体">世纪</span>90<span style="font-family: 宋体">年代末期，掌握</span>Flash<span style="font-family: 宋体">是一个很重要的特长，因为许多老板都非常需要有这种技能的员工。不过，这种易用性也是有代价的。</span></p>
<br />
<img height="364" alt="" src="http://www.cnblogs.com/images/cnblogs_com/bailingewei/1-4.jpg" width="440" border="0" /><br />
<p style="margin: 7.7pt 0cm"><span style="font-family: 宋体">图</span>1-4<span style="font-family: 宋体">　</span>Flash<span style="font-family: 宋体">应用</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">像许多解决方案一样，</span>Flash<span style="font-family: 宋体">需要客户端软件。尽管许多流行的操作系统和浏览器上都内置有所需的</span>Shockwave<span style="font-family: 宋体">播放器插件，但并非普遍都有。虽然能免费下载，但由于担心感染病毒，使得许多用户都拒绝安装这个软件。</span>Flash<span style="font-family: 宋体">应用可能还需要大量网络带宽才能正常地工作，另外，由于没有广泛的宽带连接，</span>Flash<span style="font-family: 宋体">的推广受到局限（因此产生了&#8220;跳过本页&#8221;之类的链接）。虽然确有一些网站选择建立多个版本的</span>Web<span style="font-family: 宋体">应用，分别适应于不同的连接速度，但是许多公司都无法承受支持两个或更多网站所增加的开发开销。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">总之，创建</span>Flash<span style="font-family: 宋体">应用需要专用的软件和浏览器插件。</span>applet<span style="font-family: 宋体">可以用文本编辑器编写，而且有一个免费的</span>Java<span style="font-family: 宋体">开发包，</span>Flash<span style="font-family: 宋体">则不同，使用完整的</span>Flash<span style="font-family: 宋体">工具包需要按用户数付费，每个用户需要数百美元。尽管这些因素不是难以逾越的障碍，但它们确实减慢了</span>Flash<span style="font-family: 宋体">在动态</span>Web<span style="font-family: 宋体">应用道路上的前进脚步。</span></p>
<p style="margin: 12.35pt 0cm 7.7pt">1.3.6&nbsp; DHTML<span style="font-family: 黑体">革命</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">当</span>Microsoft<span style="font-family: 宋体">和</span>Netscape<span style="font-family: 宋体">发布其各自浏览器的第</span>4<span style="font-family: 宋体">版时，</span>Web<span style="font-family: 宋体">开发人员有了一个新的选择：动态</span>HTML<span style="font-family: 宋体">（</span>Dynamic HTML<span style="font-family: 宋体">，</span>DHTML<span style="font-family: 宋体">）。与有些人想像的不同</span>DHTML<span style="font-family: 宋体">不是一个</span>W3C<span style="font-family: 宋体">标准，它更像是一种营销手段。实际上，</span>DHTML<span style="font-family: 宋体">结合了</span>HTML<span style="font-family: 宋体">、层叠样式表（</span>Cascading Style Sheets<span style="font-family: 宋体">，</span>CSS<span style="font-family: 宋体">）、</span>JavaScript<span style="font-family: 宋体">和</span>DOM<span style="font-family: 宋体">。这些技术的结合使得开发人员可以动态地修改</span>Web<span style="font-family: 宋体">页面的内容和结构。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">最初</span>DHTML<span style="font-family: 宋体">的反响很好。不过，它需要的浏览器版本还没有得到广泛采用。尽管</span>IE<span style="font-family: 宋体">和</span>Netscape<span style="font-family: 宋体">都支持</span>DHTML<span style="font-family: 宋体">，但是它们的实现大相径庭，这要求开发人员必须知道他们的客户使用什么浏览器。而这通常意味着需要大量代码来检查浏览器的类型和版本，这就进一步增加了开发的开销。有些人对于尝试这种方法很是迟疑，因为</span>DHTML<span style="font-family: 宋体">还没有一个官方的标准。不过，将来新标准有可能会出现。</span></p>
<p style="margin: 12.35pt 0cm 7.7pt">1.3.7&nbsp; XML<span style="font-family: 黑体">衍生语言</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt">20<span style="font-family: 宋体">世纪</span>90<span style="font-family: 宋体">年代中期，基于</span>SGML<span style="font-family: 宋体">衍生出了</span>W3C<span style="font-family: 宋体">的可扩展标记语言（</span>eXtensible Markup Language<span style="font-family: 宋体">，</span>XML<span style="font-family: 宋体">），自此以后，</span>XML<span style="font-family: 宋体">变得极为流行。许多人把</span>XML<span style="font-family: 宋体">视为解决所有计算机开发问题的灵丹妙药，以至于</span>XML<span style="font-family: 宋体">几乎无处不在。实际上，</span>Microsoft<span style="font-family: 宋体">就已经宣布，</span>Office 12<span style="font-family: 宋体">将支持</span>XML<span style="font-family: 宋体">文件格式。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">如今，我们至少有</span>4<span style="font-family: 宋体">种</span>XML<span style="font-family: 宋体">衍生语言可以用来创建</span>Web<span style="font-family: 宋体">应用（</span>W3C<span style="font-family: 宋体">的</span>XHTML<span style="font-family: 宋体">不包括在内）：</span>Mozilla<span style="font-family: 宋体">的</span>XUL<span style="font-family: 宋体">；</span>XAMJ<span style="font-family: 宋体">，这是结合</span>Java<span style="font-family: 宋体">的一种开源语言；</span>Macromedia<span style="font-family: 宋体">的</span>MXML<span style="font-family: 宋体">；</span> Microsoft<span style="font-family: 宋体">的</span>XAML<span style="font-family: 宋体">。</span></p>
<p style="margin: 4.6pt 0cm 0pt 21pt; text-indent: 21pt">XUL<span style="font-family: 宋体">：</span>XUL<span style="font-family: 宋体">（读作&#8220;</span>zool<span style="font-family: 宋体">&#8221;）代表</span>XML<span style="font-family: 宋体">用户界面语言（</span>XML User Interface Language<span style="font-family: 宋体">），由</span>Mozilla<span style="font-family: 宋体">基金会推出。流行的</span>Firefox<span style="font-family: 宋体">浏览器和</span>Thunderbird<span style="font-family: 宋体">邮件客户端都是用</span>XUL<span style="font-family: 宋体">编写的。利用</span>XUL<span style="font-family: 宋体">，开发人员能构建功能很丰富的应用，这个应用可以与因特网连接，也可以不与因特网连接。为了方便那些熟悉</span>DHTML<span style="font-family: 宋体">的开发人员使用，</span>XUL<span style="font-family: 宋体">设计为可以跨平台支持诸如窗口和按钮等标准界面部件。虽然</span>XUL<span style="font-family: 宋体">本身不是标准，但它是基于各种标准的，如</span>HTML 4.0<span style="font-family: 宋体">、</span>CSS<span style="font-family: 宋体">、</span>DOM<span style="font-family: 宋体">、</span>XML<span style="font-family: 宋体">和</span>ECMAScript<span style="font-family: 宋体">等等。</span>XUL<span style="font-family: 宋体">应用可以在浏览器上运行，也可以安装在客户端主机上。</span></p>
<p style="margin: 4.6pt 0cm 0pt 21pt; text-indent: 21pt"><span style="font-family: 宋体">当然，</span>XUL<span style="font-family: 宋体">也不是没有缺点。它需要</span>Gecko<span style="font-family: 宋体">引擎，而且目前</span>IE<span style="font-family: 宋体">还没有相应的插件。尽管</span>Firefox<span style="font-family: 宋体">在浏览器市场中已经有了一定的份额，但少了</span>IE<span style="font-family: 宋体">的支持还是影响很大，大多数应用都无法使用</span>XUL<span style="font-family: 宋体">。目前开展的很多项目都是力图在多个平台上使用</span>XUL<span style="font-family: 宋体">，包括</span>Eclipse<span style="font-family: 宋体">。</span></p>
<p style="margin: 4.6pt 0cm 0pt 21pt; text-indent: 21pt">XAML<span style="font-family: 宋体">：</span>XAML<span style="font-family: 宋体">（读作&#8220;</span>zammel<span style="font-family: 宋体">&#8221;）是</span>Microsoft<span style="font-family: 宋体">即将推出的操作系统（名为</span>Windows Vista<span style="font-family: 宋体">）的一个组件。</span>XAML<span style="font-family: 宋体">是可扩展应用标记语言（</span>eXtensible Application Markup Language<span style="font-family: 宋体">）的缩写，它为使用</span>Vista<span style="font-family: 宋体">创建用户界面定义了标准。与</span>HTML<span style="font-family: 宋体">类似，</span>XAML<span style="font-family: 宋体">使用标记来创建标准<span style="letter-spacing: 0.1pt">元素，如按钮和文本框等。</span></span><span style="letter-spacing: 0.1pt">XAML</span><span style="font-family: 宋体; letter-spacing: 0.1pt">建立在</span><span style="letter-spacing: 0.1pt">Microsoft</span><span style="font-family: 宋体; letter-spacing: 0.1pt">的</span><span style="letter-spacing: 0.1pt"> .NET</span><span style="font-family: 宋体; letter-spacing: 0.1pt">平台之上，而且可以编译为</span><span style="letter-spacing: 0.2pt">.NET</span><span style="font-family: 宋体; letter-spacing: 0.2pt">类。</span></p>
<p style="margin: 4.6pt 0cm 0pt 21pt; text-indent: 21pt">XAML<span style="font-family: 宋体">的局限应当很清楚。作为</span>Microsoft<span style="font-family: 宋体">的产品，它要求必须使用</span>Microsoft<span style="font-family: 宋体">的操作系统。多数情况下特别是在大公司中，这可能不成问题，但是有些小公司使用的不是</span>Microsoft<span style="font-family: 宋体">的操作系统，总不能削足适履吧，就像是没有哪家公司会因为买家没有开某种牌子的车来就把他拒之门外。</span>Vista<span style="font-family: 宋体">交付的日期一再推迟，与此同时</span>XAML<span style="font-family: 宋体">也有了很大变化，不再只是一个播放器。据说，在未来几年内，我们可能会看到一个全新的</span>XAML<span style="font-family: 宋体">。</span></p>
<p style="margin: 4.6pt 0cm 0pt 21pt; text-indent: 21pt">MXML<span style="font-family: 宋体">：</span>Macromedia<span style="font-family: 宋体">创建了</span>MXML<span style="font-family: 宋体">，作为与其</span>Flex<span style="font-family: 宋体">技术一同使用的一种标记语言。</span>MXML<span style="font-family: 宋体">是最佳体验标记语言（</span>Maximum eXperience Markup Language<span style="font-family: 宋体">）的缩写，它与</span>HTML<span style="font-family: 宋体">很相似，可以以声明的方式来设计界面。与</span>XUL<span style="font-family: 宋体">和</span>XAML<span style="font-family: 宋体">类似，</span>MXML<span style="font-family: 宋体">提供了更丰富的界面组件，如</span>DataGrid<span style="font-family: 宋体">和</span>TabNavigator<span style="font-family: 宋体">，利用这些组件可以创建功能丰富的因特网应用。不过，</span>MXML<span style="font-family: 宋体">不能独立使用，它依赖于</span>Flex<span style="font-family: 宋体">和</span>ActionScript<span style="font-family: 宋体">编程语言来编写业务逻辑。</span></p>
<p style="margin: 4.6pt 0cm 0pt 21pt; text-indent: 21pt">MXML<span style="font-family: 宋体">与</span>Flash<span style="font-family: 宋体">有同样的一些限制。它是专用的，而且依赖于价格昂贵的开发和部署环境。尽管将来</span>.NET<span style="font-family: 宋体">可能会对</span>MXML<span style="font-family: 宋体">提供支持，但现在</span>Flex<span style="font-family: 宋体">只能在</span>J2EE<span style="font-family: 宋体">应用服务器上运行，如</span>Tomcat<span style="font-family: 宋体">和</span>IBM<span style="font-family: 宋体">的</span>WebSphere<span style="font-family: 宋体">，这就进一步限制了</span>MXML<span style="font-family: 宋体">的广泛采用。</span></p>
<p style="margin: 4.6pt 0cm 0pt 21pt; text-indent: 21pt">XAMJ<span style="font-family: 宋体">：让人欣喜的是，开源社区又向有关界面设计的</span>XML<span style="font-family: 宋体">衍生语言领域增加了新的成员。</span>XAMJ<span style="font-family: 宋体">作为另一种跨平台的语言，为</span>Web<span style="font-family: 宋体">应用开发人员又提供了一个工具。这种衍生语言基于</span>Java<span style="font-family: 宋体">，而</span>Java<span style="font-family: 宋体">是当前最流行的面向对象语言之一，</span>XAMJ<span style="font-family: 宋体">也因此获得了面向对象语言的强大功能。</span>XAMJ<span style="font-family: 宋体">实际上想要替代基于</span>XAML<span style="font-family: 宋体">或</span>HTML<span style="font-family: 宋体">的应用，力图寻找一种更为安全的方法，既不依赖于某种特定的框架，也不需要高速的因特网连接。</span>XAMJ<span style="font-family: 宋体">是一种编译型语言，建立在&#8220;</span>clientlet<span style="font-family: 宋体">&#8221;（小客户端）体系结构之上，尽管基于</span>XAMJ<span style="font-family: 宋体">的程序也可以是独立的应用，但通常都是基于</span>Web<span style="font-family: 宋体">的应用。在撰写本书时，</span>XAMJ<span style="font-family: 宋体">还太新，我们还没有听到太多批评的声音。不过，批评是肯定会有的，让我们拭目以待。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">当谈到&#8220;以</span>X<span style="font-family: 宋体">开头的东西&#8221;时，别忘了</span>W3C XForms<span style="font-family: 宋体">规约。</span>XForms<span style="font-family: 宋体">设计为支持更丰富的用户界面，而且能够将数据与表示解耦合。毋庸置疑，</span>XForms<span style="font-family: 宋体">数据是</span>XML<span style="font-family: 宋体">，这样你就能使用现有的</span>XML<span style="font-family: 宋体">技术，如</span>XPath<span style="font-family: 宋体">和</span>XML Schema<span style="font-family: 宋体">。标准</span>HTML<span style="font-family: 宋体">能做的，</span>XForms<span style="font-family: 宋体">都能做，而且</span>XForms<span style="font-family: 宋体">还有更多功能，包括动态检查域值、与</span>Web<span style="font-family: 宋体">服务集成等等。不同于其他的许多</span>W3C<span style="font-family: 宋体">规约，</span>XForms<span style="font-family: 宋体">不需要新的浏览器，你可以使用现在已有的许多浏览器去实现。与大多数</span>XML<span style="font-family: 宋体">衍生语言一样，</span>XForms<span style="font-family: 宋体">是一种全新的方法，所以它要得到采纳尚需时日。</span></p>
<p style="margin: 12.35pt 0cm 7.7pt">1.3.8&nbsp; <span style="font-family: 黑体">基本问题</span></p>
<p style="margin-top: 4.6pt; 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>Linux<span style="font-family: 宋体">和</span>Mac OS X<span style="font-family: 宋体">）的人能运行你的应用程序，而且你也不必考虑针对不同的操作系统开发和维护多个安装包。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">既然基于</span>Web<span style="font-family: 宋体">的应用是前所未有的好东西，那我们为什么还要写这本书？如果回头看看因特网的起源就可以知道，最初因特网实际上就是为了科学家们和学术机构间交换文章和研究成果，这是一种简单的请求</span>/<span style="font-family: 宋体">响应模式。那时不需要会话状态，也不需要购物车，人们只是在交换文档。但现在你有很多办法来创建动态的</span>Web<span style="font-family: 宋体">应用，如果想让应用真正深入人心，赢得大量的用户，就必须在浏览器上大做文章，这说明，因特网以请求</span>/<span style="font-family: 宋体">响应模式作为基础，由此带来的同步性对你造成了妨碍。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">与</span>Microsoft Word<span style="font-family: 宋体">或</span>Intuit Quicken<span style="font-family: 宋体">之类的胖客户应用相比，</span>Web<span style="font-family: 宋体">模型当然只能根据一般用户需要做折中考虑。不过，由于</span>Web<span style="font-family: 宋体">应用很容易部署，而且浏览器的发展相当迅速，这意味着大多数用户都已经学会了适应。但是，还是有许多人认为</span>Web<span style="font-family: 宋体">应用只能算&#8220;二等公民&#8221;，给人的用户体验不是太好。因为因特网是一个同步的请求</span>/<span style="font-family: 宋体">响应系统，所以浏览器中的整个页面会进行刷新。最初，这种简单的请求并没有什么问题。如果用户做了一两处修改，就必须向服务器发回整个文档，而且要重新绘制整个页面。尽管这样是可行的，但是这种完全刷新的局限，意味着应用确实还很粗糙。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">这并不是说开发人员只是袖手旁观，全然接受这种状况。</span>Microsoft<span style="font-family: 宋体">对于交互式应用有一定了解，而且对于这种标准请求</span>/<span style="font-family: 宋体">响应模式的限制一直都不满意，因此提出了远程脚本（</span>remote scripting<span style="font-family: 宋体">）的概念。远程脚本看似神奇，其实很简单：它允许开发人员创建以异步方式与服务器交互的页面。例如，顾客可以从下拉列表中选择状态，这样就会在服务器上运行一个脚本，计算顾客的运费。更重要的是，显示这些运费时</span><span style="font-family: 楷体_GB2312">无需刷新整个页面</span><span style="font-family: 宋体">！当然，</span>Microsoft<span style="font-family: 宋体">的方案只适用于它自己的技术，而且需要</span>Java<span style="font-family: 宋体">，但有了这个进步，说明更丰富的浏览器应用并不是海市蜃楼。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">对于同步页面刷新问题还有其他一些解决方案。针对</span>Microsoft<span style="font-family: 宋体">的远程脚本，</span>Brent Ashley<span style="font-family: 宋体">在创建</span>JavaScript<span style="font-family: 宋体">远程脚本（</span>JavaScript Remote Scripting<span style="font-family: 宋体">，</span>JSRS<span style="font-family: 宋体">）时开发了一个平台中立（独立于平台）的方案。</span>JSRS<span style="font-family: 宋体">依赖于一个客户端</span>JavaScript<span style="font-family: 宋体">库和</span>DHTML<span style="font-family: 宋体">，可以向服务器做异步的调用。与此同时，许多人利用了</span>IFRAME<span style="font-family: 宋体">标记，可以只加载页面中的某些部分，或者向服务器做&#8220;隐藏&#8221;的调用。尽管这是一个可行的方法，而且也为很多人所用，但它肯定不是最理想的，还有待改善。</span></p>
<p style="margin: 12.35pt 0cm 7.7pt">1.3.9&nbsp; Ajax</p>
<p style="margin-top: 4.6pt; text-indent: 21.4pt"><span style="font-family: 宋体; letter-spacing: 0.1pt">终于谈到这里了：客户希望得到一个功能更完备的应用，而开发人员想避开繁琐的部署工作，不想把可执行文件逐个地部署到数以千计的工作站上。我们已经做过很多尝试，但是任何方法都不像它原来标榜的那么完美。不过，最近一个极其强大的工具横空出世了。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">是的，我们又有了一个新的选择，新的工具，可以创建的确丰富的基于浏览器的应用。这就是</span>Ajax<span style="font-family: 宋体">。</span>Ajax<span style="font-family: 宋体">不只是一个特定的技术，更应算是一种技巧，不过前面提到的</span>JavaScript<span style="font-family: 宋体">是其主要组件。我们知道，你可能会说&#8220;</span>JavaScript<span style="font-family: 宋体">根本不值一提&#8221;，但是由于</span>Ajax<span style="font-family: 宋体">的出现，人们对这种语言又有了新的兴趣，应用和测试框架再加上更优秀的工具支持，减轻了开发人员肩头的重担。随着</span>Atlas<span style="font-family: 宋体">的引入，</span>Microsoft<span style="font-family: 宋体">对</span>Ajax<span style="font-family: 宋体">投入了大力支持，而名声不太好的</span>Rails Web<span style="font-family: 宋体">框架也预置了充分的</span>Ajax<span style="font-family: 宋体">支持。在</span>Java<span style="font-family: 宋体">世界中，</span>Sun<span style="font-family: 宋体">已经在其</span>BluePrints Solutions Catalog<span style="font-family: 宋体">中增加了许多</span>Ajax<span style="font-family: 宋体">组件。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">坦率地讲，</span>Ajax<span style="font-family: 宋体">并不是什么新鲜玩艺。实际上，与这个词相关的&#8220;最新&#8221;术语就是</span>XMLHttpRequest<span style="font-family: 宋体">对象（</span>XHR<span style="font-family: 宋体">），它早在</span>IE 5<span style="font-family: 宋体">（于</span>1999<span style="font-family: 宋体">年春天发布）中就已经出现了，是作为</span> Active X<span style="font-family: 宋体">控件露面的。不过，最近出现的新现象是浏览器的支持。原先，</span>XHR<span style="font-family: 宋体">对象只在</span>IE<span style="font-family: 宋体">中得到支持（因此限制了它的使用），但是从</span>Mozilla 1.0<span style="font-family: 宋体">和</span>Safari 1.2<span style="font-family: 宋体">开始，对</span>XHR<span style="font-family: 宋体">对象的支持开始普及。这个很少使用的对象和相关的基本概念甚至已经出现在</span>W3C<span style="font-family: 宋体">标准中：</span>DOM Level 3 <span style="font-family: 宋体">加载和保存规约（</span>DOM Level 3 Load and Save Specification<span style="font-family: 宋体">）。现在，特别是随着</span>Google Maps<span style="font-family: 宋体">、</span>Google Suggest<span style="font-family: 宋体">、</span>Gmail<span style="font-family: 宋体">、</span>Flickr<span style="font-family: 宋体">、</span>Netflix<span style="font-family: 宋体">和</span>A9<span style="font-family: 宋体">等应用变得越来越炙手可热，</span>XHR<span style="font-family: 宋体">也已经成为事实上的标准。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">与前面几页提到的方法不同，</span>Ajax<span style="font-family: 宋体">在大多数现代浏览器中都能使用，而且不需要任何专门的软件或硬件。实际上，这种方法的一大优势就是开发人员不需要学习一种新的语言，也不必完全丢掉他们原先掌握的服务器端技术。</span>Ajax<span style="font-family: 宋体">是一种客户端方法，可以与</span>J2EE<span style="font-family: 宋体">、</span>.NET<span style="font-family: 宋体">、</span>PHP<span style="font-family: 宋体">、</span>Ruby<span style="font-family: 宋体">和</span>CGI<span style="font-family: 宋体">脚本交互，它并不关心服务器是什么。尽管存在一些很小的安全限制，你还是可以现在就开始使用</span>Ajax<span style="font-family: 宋体">，而且能充分利用你原有的知识。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">你可能会问：&#8220;谁在使用</span>Ajax<span style="font-family: 宋体">？&#8221;前面已经提到，</span>Google<span style="font-family: 宋体">显然是最早采用</span>Ajax<span style="font-family: 宋体">的公司之一，而且已经用在很多技术上，随便说几个应用，如</span>Google Maps<span style="font-family: 宋体">、</span>Google Suggest<span style="font-family: 宋体">和</span>Gmail<span style="font-family: 宋体">。</span>Yahoo!<span style="font-family: 宋体">也开始引入</span>Ajax<span style="font-family: 宋体">控件，另外</span>Amazon<span style="font-family: 宋体">提供了一个简洁的搜索工具，其中大量使用了这个技术，例如，在钻石的某一方面上移动滑块，这会带来动态更新的结果（见图</span>1-5<span style="font-family: 宋体">）。并不是每次改变你的查询标准时都会更新页面，而是在移动滑块时就会查询服务器，从而更快、更容易地缩小你的选择范围。</span></p>
<br />
<img height="441" alt="" src="http://www.cnblogs.com/images/cnblogs_com/bailingewei/1-5.jpg" width="453" border="0" /><br />
<p class="ac" style="margin: 7.7pt 0cm"><span style="font-family: 宋体">图</span><span lang="EN-US">1-5</span><span style="font-family: 宋体">　</span><span lang="EN-US">Amazon</span><span style="font-family: 宋体">的钻石搜索页面</span></p>
<p class="MsoNormal" style="margin-top: 4.6pt; text-indent: 21pt"><span lang="EN-US">Netflix</span><span style="font-family: 宋体">是一家很有名的</span><span lang="EN-US">DVD</span><span style="font-family: 宋体">租借公司，它也使用了</span><span lang="EN-US">Ajax</span><span style="font-family: 宋体">。当用户浏览影片时，可以得到更详细的信息。当顾客把鼠标放在一个影片的图片上时，这个影片的</span><span lang="EN-US">ID</span><span style="font-family: 宋体">就会发送到中心服务器，然后会出现一个&#8220;气泡&#8221;，提供这个影片的更多细节（见图</span><span lang="EN-US">1-6</span><span style="font-family: 宋体">）。同样，页面并不会刷新，每个影片的详细信息并不是放在隐藏的表单域中。利用这种方法，</span><span lang="EN-US">Netflix</span><span style="font-family: 宋体">可以提供影片的更多信息，而不会把页面弄乱。顾客浏览起来也更容易，他们不必点击影片，看完影片详细信息后再点击回到影片列表页面；他们只需把鼠标停在影片上，就这么简单！我们想要强调的是，</span><span lang="EN-US">Ajax</span><span style="font-family: 宋体">并不限于</span><span class="50"><span lang="EN-US" style="font-size: 10pt"><font face="Courier New">.com</font></span></span><span style="font-family: 宋体">之类的网站使用，普通公司的开发人员也开始涉足这个技术，有些人已经在使用</span><span lang="EN-US">Ajax</span><span style="font-family: 宋体">来改善原来很丑陋的验证方案，或者用于动态地获取数据了。</span></p>
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/bailingewei/1-6.jpg" border="0" /><br />
<p style="margin: 7.7pt 0cm"><span style="font-family: 宋体">图</span>1-6<strong><span style="font-family: 宋体">　</span></strong>Netflix<span style="font-family: 宋体">的浏览页面特性</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">关键在于，因特网默认的请求</span>/<span style="font-family: 宋体">响应模式有了重大转变，这正是</span>Ajax<span style="font-family: 宋体">的核心所在，尽管这并非全新的内容。</span>Web<span style="font-family: 宋体">应用开发人员现在可以自由地与服务器异步交互，这说明他们可以完成许多原本只能在胖客户上完成的任务。例如，当用户输入邮政编码时，可以验证它是否正确，然后自动用相应的城市名和州名填充到表单中的其他部分；或者，当用户选择美国时，可以引入美国各个州的一个下拉列表。以前也可以用其他方式模拟这些工作，但是使用</span>Ajax<span style="font-family: 宋体">的话，这些工作会更加简单。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">那么，是谁发明了</span>Ajax<span style="font-family: 宋体">？要找出真正的源头，总免不了一场争论。不过有一点是确定的，</span>2005<span style="font-family: 宋体">年</span>2<span style="font-family: 宋体">月，</span>Adaptive Path<span style="font-family: 宋体">的</span>Jesse James Garrett<span style="font-family: 宋体">最早创造了这个词。在他的文章</span><em>Ajax: A New Approach to Web Applications</em><span style="font-family: 宋体">（</span>Ajax<span style="font-family: 宋体">：</span>Web<span style="font-family: 宋体">应用的一种新方法）中，</span>Garrett<span style="font-family: 宋体">讨论了如何消除胖客户（或桌面）应用与瘦客户（或</span>Web<span style="font-family: 宋体">）应用之间的界限。当然，当</span>Google<span style="font-family: 宋体">在</span>Google Labs<span style="font-family: 宋体">发布</span>Google Maps<span style="font-family: 宋体">和</span>Google Suggest<span style="font-family: 宋体">时，这个技术才真正为人所认识，而且此前已经有许多这方面的文章了。但确实是</span>Garrett<span style="font-family: 宋体">最早提出了这个好名字，否则我们就得啰啰嗦嗦地说上一大堆：异步（</span>Asynchronous<span style="font-family: 宋体">）、</span>XMLHttpRequest<span style="font-family: 宋体">、</span>JavaScript<span style="font-family: 宋体">、</span>CSS<span style="font-family: 宋体">、</span>DOM<span style="font-family: 宋体">等等。尽管原来把</span>Ajax<span style="font-family: 宋体">认为是</span>Asynchronous JavaScript + XML<span style="font-family: 宋体">（异步</span>JavaScript + XML<span style="font-family: 宋体">）的缩写，但如今，这个词的覆盖面有所扩展，把允许浏览器与服务器通信而无需刷新当前页面的技术都涵盖在内。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">你可能会说：&#8220;哦，那有什么大不了的？&#8221;这么说吧，使用</span>XHR<span style="font-family: 宋体">而且与服务器异步通信，就能创建更加动态的</span>Web<span style="font-family: 宋体">应用。例如，假设你有一个下拉列表，它是根据另外一个域或下拉列表的输入来填写的。在正常情况下，必须在加载第一个页面时把所有数据都发送给客户端，然后使用</span>JavaScript<span style="font-family: 宋体">根据输入来填写下拉列表。这么做并不困难，但是会让页面变得很臃肿，取决于这个下拉列表到底有多&#8220;动态&#8221;，页面有可能膨胀得过大，从而出现问题。利用</span>Ajax<span style="font-family: 宋体">，当作为触发源的域有变化，或者失去了输入焦点，就可以向服务器发一个简单的请求，只要求得到更新下拉列表所需的部分信息即可。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">来单独考虑一下验证。你写过多少次</span>JavaScript<span style="font-family: 宋体">验证逻辑？用</span>Java<span style="font-family: 宋体">或</span>C#<span style="font-family: 宋体">编写验证逻辑可能很简单，但是由于</span>JavaScript<span style="font-family: 宋体">缺乏很好的调试工具，再加上它是一种弱类型语言，所以用</span>JavaScript<span style="font-family: 宋体">编写验证逻辑实在是一件让人头疼的事情，而且很容易出错。服务器上还很有可能重复这些客户端验证规则。使用</span>XHR<span style="font-family: 宋体">，可以对服务器做一个调用，触发某一组验证规则。这些规则可能比你用</span>JavaScript<span style="font-family: 宋体">编写的任何规则都更丰富、更复杂，而且你还能得到功能强大的调试工具和集成开发环境（</span>IDE<span style="font-family: 宋体">）。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">你现在可能又会说：&#8220;这些事情我早已经用</span>IFRAME<span style="font-family: 宋体">或隐藏框架做到了。&#8221;我们甚至还使用这种技术来提交或刷新过页面的一部分，而不是整个浏览器（页面）。不能不承认，这确实可行。不过，许多人认为这种方法只是一种修补手段，以弥补</span>XHR<span style="font-family: 宋体">原来缺乏对跨浏览器的支持。作为</span>Ajax<span style="font-family: 宋体">的核心，</span>XHR<span style="font-family: 宋体">对象设计为允许从服务器异步地获取任意的数据。</span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-family: 宋体">我们讨论过，传统的</span>Web<span style="font-family: 宋体">应用遵循一种请求</span>/<span style="font-family: 宋体">响应模式。如果没有</span>Ajax<span style="font-family: 宋体">，对于每个请求都会重新加载整个页面（或者利用</span>IFRAME<span style="font-family: 宋体">，则是部分页面）。原来查看的页面会放到浏览器的历史栈中（不过，如果使用了</span>IFRAME<span style="font-family: 宋体">，点击&#8220;后退&#8221;按钮不一定能得到用户期望的历史页面）。与此不同，用</span>XHR<span style="font-family: 宋体">做出的请求不会记录在浏览器的历史中。如果你的用户习惯于使用&#8220;后退&#8221;按钮在</span>Web<span style="font-family: 宋体">应用中进行导航，就可能会产生问题。</span></p>
<br />
<br />
转自:<font face="Verdana">http://book.csdn.net/bookfiles/11/10011435.shtml</font>
<img src ="http://www.cnblogs.com/bailingewei/aggbug/1123010.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43629/" target="_blank">[新闻][译稿]微软将 jQuery IntelliSense整合到Visual Studio</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>1.2 浏览器历史</title><link>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1122559.html</link><dc:creator>bailingewei</dc:creator><author>bailingewei</author><pubDate>Wed, 26 Mar 2008 01:53:00 GMT</pubDate><guid>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1122559.html</guid><wfw:comment>http://www.cnblogs.com/bailingewei/comments/1122559.html</wfw:comment><comments>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1122559.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/bailingewei/comments/commentRss/1122559.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/bailingewei/services/trackbacks/1122559.html</trackback:ping><description><![CDATA[<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-size: 12pt"><span style="color: #99cc00"><span style="color: #800000"><span style="font-family: 宋体">提到</span>Web<span style="font-family: 宋体">浏览器，大多数人都会想到无处不在的</span>Microsoft Internet Explorer<span style="font-family: 宋体">，直到最近像</span>Firefox<span style="font-family: 宋体">、</span>Safari<span style="font-family: 宋体">和</span>Opera<span style="font-family: 宋体">之类的浏览器日益兴起，这种情况才稍有改观。许多新手可能会误认为</span>IE<span style="font-family: 宋体">是市场上的第一个浏览器，其实不然。实际上，第一个</span>Web<span style="font-family: 宋体">浏览器出自</span>Berners-Lee<span style="font-family: 宋体">之手，这是他为</span>NeXT<span style="font-family: 宋体">计算机创建的（这个</span>Web<span style="font-family: 宋体">浏览器原来取名叫</span>WorldWideWeb<span style="font-family: 宋体">，后来改名为</span>Nexus<span style="font-family: 宋体">），并在</span>1990<span style="font-family: 宋体">年发布给</span>CERN<span style="font-family: 宋体">的人员使用。</span>Berners-Lee<span style="font-family: 宋体">和</span>Jean-Francois Groff<span style="font-family: 宋体">将</span>WorldWideWeb<span style="font-family: 宋体">移植到</span>C<span style="font-family: 宋体">，并把这个浏览器改名为</span>libwww<span style="font-family: 宋体">。</span>20<span style="font-family: 宋体">世纪</span>90<span style="font-family: 宋体">年代初出现了许多浏览器，包括</span>Nicola Pellow<span style="font-family: 宋体">编写的行模式浏览器（这个浏览器允许任何系统的用户都能访问</span>Internet<span style="font-family: 宋体">，从</span>Unix<span style="font-family: 宋体">到</span>Microsoft DOS<span style="font-family: 宋体">都涵盖在内），还有</span>Samba<span style="font-family: 宋体">，这是第一个面向</span>Macintosh<span style="font-family: 宋体">的浏览器。</span></span></span></span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-size: 12pt"><span style="color: #00ffff"><span style="color: #99cc00"><span style="color: #800000">1993<span style="font-family: 宋体">年</span>2<span style="font-family: 宋体">月，</span><span style="font-family: 宋体">伊利诺伊大学</span>Urbana-Champaign<span style="font-family: 宋体">分校美国国家超级计算应用中心的</span>Marc Andreessen<span style="font-family: 宋体">和</span>Eric Bina<span style="font-family: 宋体">发布了</span>Unix<span style="font-family: 宋体">版本的</span>Mosaic<span style="font-family: 宋体">。几个月之后，</span>Aleks Totic<span style="font-family: 宋体">发布了</span>Mosaic<span style="font-family: 宋体">的</span>Macintosh<span style="font-family: 宋体">版本，这使得</span>Mosaic<span style="font-family: 宋体">成为第一个跨平台浏览器，它很快得到普及，并成为最流行的</span>Web<span style="font-family: 宋体">浏览器</span></span></span></span></span><a title="" href="file:///C:/Documents%20and%20Settings/shenyi/桌面/邮电图书章节/邮电图书章节/AJAX基础教程1-3/1new.htm#_ftn1" name="_ftnref1"><span style="font-size: 10.5pt; font-family: 'Times New Roman'"><span style="font-size: 12pt"><span style="color: #00ffff"><span style="color: #99cc00"><span style="color: #800000">[1]</span></span></span></span></span></a><span style="font-size: 12pt"><span style="color: #00ffff"><span style="color: #99cc00"><span style="color: #800000"><span style="font-family: 宋体">。这项技术后来卖给了</span>Spyglass<span style="font-family: 宋体">，最后又归入</span>Microsoft<span style="font-family: 宋体">的门下，并应用在</span>Internet Explorer<span style="font-family: 宋体">中。</span></span></span></span></span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-size: 12pt"><span style="color: #00ffff"><span style="color: #99cc00"><span style="color: #800000">1993<span style="font-family: 宋体">年，堪萨斯大学的开发人员编写了一个基于文本的浏览器，叫做</span>Lynx<span style="font-family: 宋体">，它成为了字符终端的标准。</span>1994<span style="font-family: 宋体">年，挪威奥斯陆的一个小组开发了</span>Opera<span style="font-family: 宋体">，到</span>1996<span style="font-family: 宋体">年这个浏览器得到了广泛使用。</span>1994<span style="font-family: 宋体">年</span>12<span style="font-family: 宋体">月，</span>Netscape<span style="font-family: 宋体">发布了</span>Mozilla<span style="font-family: 宋体">的</span>1.0<span style="font-family: 宋体">版，第一个盈利性质的浏览器从此诞生。</span>2002<span style="font-family: 宋体">年又发布了一个开源的版本，这最终发展为</span>2004<span style="font-family: 宋体">年</span>11<span style="font-family: 宋体">月发布的、现在十分流行的</span>Firefox<span style="font-family: 宋体">浏览器。</span></span></span></span></span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-size: 12pt"><span style="color: #00ffff"><span style="color: #99cc00"><span style="color: #800000"><span style="font-family: 宋体">当</span>Microsoft<span style="font-family: 宋体">发布</span>Windows 95<span style="font-family: 宋体">时，</span>IE 1.0<span style="font-family: 宋体">是作为</span>Microsoft Plus!<span style="font-family: 宋体">包的一部分同时发布的。尽管这个浏览器与操作系统集成在一起，但大多数人还是坚持使用</span>Netscape<span style="font-family: 宋体">、</span>Lynx<span style="font-family: 宋体">或</span>Opera<span style="font-family: 宋体">。</span>IE 2.0<span style="font-family: 宋体">有了很大起色，增加了对</span>cookie<span style="font-family: 宋体">、安全套接字层（</span>Secure Socket Layer<span style="font-family: 宋体">，</span>SSL<span style="font-family: 宋体">）和其他新兴标准的支持。</span>2.0<span style="font-family: 宋体">版还可以用于</span>Macintosh<span style="font-family: 宋体">，从而成为</span>Microsoft<span style="font-family: 宋体">的第一个跨平台浏览器。不过，大多数用户还是很执着，仍然坚持使用他们习用的浏览器。</span></span></span></span></span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-size: 12pt"><span style="color: #00ffff"><span style="color: #99cc00"><span style="color: #800000"><span style="font-family: 宋体">不过到了</span>1996<span style="font-family: 宋体">年夏天，</span>Microsoft<span style="font-family: 宋体">发布了</span>IE 3.0<span style="font-family: 宋体">版。几乎一夜之间，人们纷纷拥向</span>IE<span style="font-family: 宋体">。当时，</span>Netscape<span style="font-family: 宋体">的浏览器是要收费的，</span>Microsoft<span style="font-family: 宋体">则免费提供</span>IE<span style="font-family: 宋体">。关于浏览器领域谁主沉浮，因特网社区发生了两极分化，很多人担心</span>Microsoft<span style="font-family: 宋体">会像在桌面领域一样，在</span>Web<span style="font-family: 宋体">领域也一统天下。有些人则考虑到安全因素——果然不出所料，发布</span>3.0<span style="font-family: 宋体">版</span>9<span style="font-family: 宋体">天之后就报告了第一个安全问题。但是到</span>1999<span style="font-family: 宋体">年发布</span>IE 5</span></span><span style="font-family: 宋体"><span style="color: #99cc00"><span style="color: #800000">时，它已经成为使用最广的浏览器。<br />
<br />
<br />
转自:http://book.csdn.net/bookfiles/11/10011434.shtml</span></span></span></span></span></p>
<img src ="http://www.cnblogs.com/bailingewei/aggbug/1122559.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43629/" target="_blank">[新闻][译稿]微软将 jQuery IntelliSense整合到Visual Studio</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>第1章 Ajax简介 1.1 Web应用简史</title><link>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1122541.html</link><dc:creator>bailingewei</dc:creator><author>bailingewei</author><pubDate>Wed, 26 Mar 2008 01:47:00 GMT</pubDate><guid>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1122541.html</guid><wfw:comment>http://www.cnblogs.com/bailingewei/comments/1122541.html</wfw:comment><comments>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1122541.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/bailingewei/comments/commentRss/1122541.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/bailingewei/services/trackbacks/1122541.html</trackback:ping><description><![CDATA[<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-size: 12pt"><span style="color: #800000"><span style="font-family: 宋体">混沌初开，一切都那么简单。为了连接美国的少数几个顶尖研究机构，人们设计了最早的&#8220;</span>Internet<span style="font-family: 宋体">&#8221;，以便共同开展科学研究。不论是图书馆员、核物理学家，还是计算机科学家，都必须学习一个相当复杂的系统。</span>1962<span style="font-family: 宋体">年，麻省理工学院（</span>MIT<span style="font-family: 宋体">）的</span>J.C.R. Licklider<span style="font-family: 宋体">最早提出他的&#8220;</span>Galactic Network<span style="font-family: 宋体">&#8221;（超大网络）思想时，</span>Firefox<span style="font-family: 宋体">和</span>IE<span style="font-family: 宋体">之类的便捷工具连概念都未产生。</span></span></span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-size: 12pt"><span style="color: #00ffff"><span style="color: #800000">Licklider<span style="font-family: 宋体">后来继续在美国国防高级研究计划局（</span>DARPA<span style="font-family: 宋体">）从事计算机研究，在那里他积极地宣扬网络化思想的重要性。几乎与此同时，</span>MIT<span style="font-family: 宋体">的</span>Leonard Kleinrock<span style="font-family: 宋体">和</span>Lawrence G. Roberts<span style="font-family: 宋体">正在开展分组交换理论的研究，这是计算机联网的一个核心概念。在</span>Thomas Merrill<span style="font-family: 宋体">的帮助之下，</span>Roberts<span style="font-family: 宋体">于</span>1965<span style="font-family: 宋体">年进而创建了第一个广域网，他通过一个拨号连接使马萨诸塞州的一台</span>TX-2<span style="font-family: 宋体">连上了加利福尼亚州的一台</span>Q-32<span style="font-family: 宋体">。</span></span></span></span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-size: 12pt"><span style="color: #00ffff"><span style="color: #800000">1966<span style="font-family: 宋体">年底，</span>Roberts<span style="font-family: 宋体">带着他的实验结果来到</span>DARPA<span style="font-family: 宋体">，在这里他构思了高级研究项目管理网络（</span>Advanced Research Projects Administration Network<span style="font-family: 宋体">，</span>ARPANET<span style="font-family: 宋体">）的计划。此时，</span>Kleinrock<span style="font-family: 宋体">正在加州大学洛杉矶分校网络测量中心（</span>Network Measurement Center<span style="font-family: 宋体">），</span><span style="font-family: 宋体">这里被选作</span>ARPANET<span style="font-family: 宋体">的第一个节点。正是在这里，</span>1969<span style="font-family: 宋体">年</span>BBN<span style="font-family: 宋体">公司成功地安装了第一个分组交换器，称为接口消息处理器（</span>Interface Message Processors<span style="font-family: 宋体">，</span>IMP<span style="font-family: 宋体">）。斯</span><span style="font-family: 宋体">坦福研究中心被选为第二个节点，</span>1969<span style="font-family: 宋体">年</span>10<span style="font-family: 宋体">月，在此首次实现了主机到主机的消息交换。此后不久，又将加州大学圣巴巴拉分校和犹他大学增加为节点，这就是我们现在所称因特网的前身。</span></span></span></span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-size: 12pt"><span style="color: #00ffff"><span style="color: #800000"><span style="font-family: 宋体">这个时期小型机刚开始出现，</span>DEC<span style="font-family: 宋体">公司推出了</span>PDP-1<span style="font-family: 宋体">，其后又相继推出了</span>PDP-8<span style="font-family: 宋体">、</span>PDP-11<span style="font-family: 宋体">和</span>VAX-11/780<span style="font-family: 宋体">，并取得了巨大成功。计算机能力得到了极大增强，而且使用也越来越方便，不像最初只有极少的几台大型机时，人们须排队使用。计算机已经更加平民化；不过，这时个人计算机革命还未到来。</span></span></span></span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-size: 12pt"><span style="color: #00ffff"><span style="color: #800000"><span style="font-family: 宋体">最初，研究人员认为</span>TCP<span style="font-family: 宋体">协议只适用于大型系统，因为</span>TCP<span style="font-family: 宋体">就是为大型系统设计的。不过，麻省理工学院</span>David Clark<span style="font-family: 宋体">的研究小组发现，工作站也可以与大型机互联。</span>Clark<span style="font-family: 宋体">的研究，再加上</span>20<span style="font-family: 宋体">世纪</span>80<span style="font-family: 宋体">年代和</span>90<span style="font-family: 宋体">年代个人计算机领域的爆炸式发展，为网络的发展铺平了道路。</span></span></span></span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-size: 12pt"><span style="color: #00ffff"><span style="color: #800000">20<span style="font-family: 宋体">世纪</span>80<span style="font-family: 宋体">年代出现了几个大变化。随着主机数量从很少发展到成千上万，需要为主机指定不同的名字，这样人们就不用费劲地去记它们的数字地址。这个变化，以及主机数量的飞速增长，催生了</span>DNS<span style="font-family: 宋体">。另外，</span>ARPANET<span style="font-family: 宋体">从使用</span>NCP<span style="font-family: 宋体">转为使用</span>TCP/IP<span style="font-family: 宋体">协议，后者是军方使用的标准协议。到了</span>20<span style="font-family: 宋体">世纪</span>80<span style="font-family: 宋体">年代中期，因特网已经建成为一个连接不同研究人员群体的平台，而且其他网络也开始出现：美国国家航空航天局（</span>NASA<span style="font-family: 宋体">）创建了</span>SPAN<span style="font-family: 宋体">；美国能源部建立了</span>MFENet<span style="font-family: 宋体">来研究磁聚变能源，另外在美国国家科学基金会（</span>National Science Foundation<span style="font-family: 宋体">）的资助下，还创建了</span>CSNET<span style="font-family: 宋体">来开展计算机科学研究。</span></span></span></span></p>
<p style="margin-top: 4.6pt; text-indent: 21pt"><span style="font-size: 12pt"><span style="color: #00ffff"><span style="color: #800000">1989<span style="font-family: 宋体">年，欧洲粒子物理研究中心（</span>CERN<span style="font-family: 宋体">）的</span>Tim Berners-Lee<span style="font-family: 宋体">提出了一个很有意思的概念。他认为，与其简单地引用其他人的著作，不如进行实际的链接呢？读一篇文章时，读者可以打开所引用的其他文章。</span><span style="font-family: 楷体_GB2312">超文本</span><span style="font-family: 宋体">（</span>hypertext<span style="font-family: 宋体">）当时相当流行，</span>Berners-Lee<span style="font-family: 宋体">还利用了他先前在文档和文本处理方面的研究成果，发明了标准通用标记语言（</span>Standard Generalized Markup Language<span style="font-family: 宋体">，</span>SGML<span style="font-family: 宋体">）的一个子集，称为超文本标记语言（</span>HyperText Markup Language<span style="font-family: 宋体">，</span>HTML<span style="font-family: 宋体">）。</span>HTML<span style="font-family: 宋体">的妙处在于，它能将有关文本显示方式的信息与具体显示的实现相分离。</span>Berners-Lee<span style="font-family: 宋体">不仅创建了一个称为超文本传输协议（</span>HyperText Transfer Protocol<span style="font-family: 宋体">，</span>HTTP<span style="font-family: 宋体">）的简单协议，还发明了第一个</span>Web<span style="font-family: 宋体">浏览器，叫做</span>WorldWideWeb<span style="font-family: 宋体">。<br />
<br />
<br />
转自:<font face="Verdana">http://book.csdn.net/bookfiles/11/10011433.shtml</font></span></span></span></span></p>
<img src ="http://www.cnblogs.com/bailingewei/aggbug/1122541.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43629/" target="_blank">[新闻][译稿]微软将 jQuery IntelliSense整合到Visual Studio</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>AJAX是什么</title><link>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1122450.html</link><dc:creator>bailingewei</dc:creator><author>bailingewei</author><pubDate>Wed, 26 Mar 2008 01:05:00 GMT</pubDate><guid>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1122450.html</guid><wfw:comment>http://www.cnblogs.com/bailingewei/comments/1122450.html</wfw:comment><comments>http://www.cnblogs.com/bailingewei/archive/2008/03/26/1122450.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/bailingewei/comments/commentRss/1122450.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/bailingewei/services/trackbacks/1122450.html</trackback:ping><description><![CDATA[<p><font face="Verdana">AJAX是什么</font><br />
转自:<font face="Verdana">http://hi.baidu.com/chenying99/blog/item/a51f9ffb92b53e264e4aeae9.html</font><br />
<br />
</p>
<p>AJAX全称为"Asynchronous JavaScript and XML"（异步JavaScript和XML），是一种创建交互式网页应用的网页开发技术。它有以下特点：</p>
<p><br />
使用XHTML+CSS来表示信息 <br />
使用JavaScript操作DOM（Document Object Model）进行动态显示及交互 <br />
使用XML和XSLT进行数据交换及相关操作 <br />
使用XMLHttpRequest对象与Web服务器进行异步数据交换 <br />
使用JavaScript将所有的东西绑定在一起 <br />
使用SOAP以XML的格式来传送方法名和方法参数<br />
类似于DHTML或LAMP，AJAX不是指一种单一的技术，而是有机地利用了一系列相关的技术。事实上，一些基于AJAX的"派生/合成"式（derivative/composite）的技术正在出现，如"AFLAX"。</p>
<p>AJAX的应用使用支持以上技术的Web浏览器作为运行平台。这些浏览器目前包括：Mozilla、Firefox、Internet Explorer、Opera、Konqueror及Mac OS的Safari。但是Opera不支持XSL格式对象，也不支持XSLT。</p>
<p>AJAX与传统的Web应用比较</p>
<p>传统的Web应用允许用户端填写表单(form)，当提交表单时就向Web服务器发送一个请求。服务器接收并处理传来的表单，然后送回一个新的网页，但这个做法浪费了许多带宽，因为在前后两个页面中的大部分HTML代码往往是相同的。由于每次应用的交互都需要向服务器发送请求，应用的响应时间就依赖于服务器的响应(回应)时间。这导致了用户界面的响应(回应)比本地应用慢得多。</p>
<p>与此不同，AJAX应用可以仅向服务器发送并取回必需的数据，它使用SOAP或其它一些基于XML的页面服务接口(接口)，并在客户端采用JavaScript处理来自服务器的响应(回应)。因为在服务器(服务器)和浏览器之间交换的数据大量减少（大约只有原来的5%），结果我们就能看到响应(服务器回应)更快的应用(结果)。同时很多的处理工作可以在发出请求的客户端机器上完成，所以Web服务器(服务器)的处理时间也减少了。</p>
<p>AJAX的核心</p>
<p>Ajax的核心是 JavaScript 对象 XmlHttpRequest。该对象在Internet Explorer 5中首次引入，它是一种支持异步请求的技术。简而言之，XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应，而不阻塞用户。 对象创建示例：<br />
[code] [/code]</p>
<p>浏览器兼容性问题</p>
<p>JavaScript编程的最大问题来自不同的浏览器对各种技术和标准的支持。<br />
XmlHttpRequest对象在不同浏览器中不同的创建方法：<br />
xmlhttp_request = new ActiveXObject("Msxml2.XMLHTTP.3.0");<br />
xmlhttp_request = new ActiveXObject("Msxml2.XMLHTTP");<br />
xmlhttp_request = new ActiveXObject("Microsoft.XMLHTTP");<br />
xmlhttp_request = new XMLHttpRequest();</p>
<p><br />
开发Ajax应用面临的挑战及解决方案</p>
<p>对程序员而言，开发Ajax应用最头痛的问题莫过于以下几点：</p>
<p>Ajax在本质上是一个浏览器端的技术，首先面临无可避免的第一个问题即是浏览器的兼容性问题。各家浏览器对于JavaScript/DOM/CSS的支持总有部分不太相同或是有Bug，甚至同一浏览器的各个版本间对于JavaScript/DOM/CSS的支持也有可能部分不一样。这导致程序员在写Ajax应用时花大部分的时间在调试浏览器的兼容性而非在应用程序本身。因此，目前大部分的Ajax链接库或开发框架大多以js链接库的形式存在，以定义更高阶的JavaScript API 、JavaScript对象（模板）、或者JavaScript Widgets来解决此问题。如prototype.js。</p>
<p>Ajax技术之主要目的在于局部交换客户端及服务器间之数据。如同传统之主从架构，无可避免的会有部分的业务逻辑会实现在客户端，或部分在客户端部分在服务器。由于业务逻辑可能分散在客户端及服务器，且以不同之程序语言实现，这导致Ajax应用程序极难维护。如有使用者接口或业务逻辑之更动需求，再加上前一个JavaScript/DOM/CSS之兼容性问题，Ajax应用往往变成程序员的梦靥。针对业务逻辑分散的问题，Ajax开发框架大致可分为两类：</p>
<p>将业务逻辑及表现层放在浏览器，数据层放在服务器：因为所有的程序以JavaScript执行在客户端，只有需要数据时才向服务器要求服务，此法又称为胖客户端（fat client）架构。服务器在此架构下通常仅用于提供及储存数据。此法的好处在于程序员可以充分利用JavaScript搭配业务逻辑来做出特殊的使用者接口，以符合终端使用者的要求。但是问题也不少，主因在:<br />
第一，JavaScript语言本身之能力可能不足以处理复杂的业务逻辑。<br />
第二，JavaScript的执行效能一向不好。<br />
第三，JavaScript存取服务器数据，仍需适当的服务器端程序之配合。<br />
第四，浏览器兼容性的问题又出现。有些Ajax开发框架如DWR企图以自动生成JavaScript之方式来避免兼容的问题，并开立通道使得JavaScript可以直接调用服务器端的Java程序来简化数据的存取。但是前述第一及第二两个问题仍然存在，程序员必须费相当的力气才能达到应用程序之规格要求，或可能根本无法达到要求。</p>
<p>将表现层、业务逻辑、及数据层放在服务器，浏览器仅有使用者接口引擎（User Interface engine）；此法又称为瘦客户端（thin client）架构，或中心服务器（server-centric）架构。浏览器的使用者接口引擎仅用于反映服务器的表现层以及传达使用者的输入回到服务器的表现层。由浏览器所触发之事件亦送回服务器处理，根据业务逻辑来更新表现层，然后反映回浏览器。因为所有应用程序完全在服务器执行，数据及表现层皆可直接存取，程序员只需使用服务器端相对较成熟之程序语言（如Java语言）即可，不需再学习JavaScript/DOM/CSS，在开发应用程序时相对容易。缺点在于使用者接口引擎以及表现层通常以标准组件的形式存在，如需要特殊组件（使用者接口）时，往往须待原框架之开发者提供，缓不济急。如开源Ajax开发框架ZK目前支持XUL及XHTML组件，尚无XAML之支持。</p>
<p>Ajax是以异步的方式向服务器提交需求。对服务器而言，其与传统的提交窗体需求并无不同，而且由于是以异步之方式提交，如果同时有多个Ajax需求及窗体提交需求，将无法保证哪一个需求先获得服务器的响应。这会造成应用程序典型的多程序（process）或多线程（thread）的竞争（racing）问题。程序员因此必须自行处理或在JavaScript里面动手脚以避免这类竞争问题的发生（如Ajax需求未响应之前，先disable送出按钮），这又不必要的增加了程序员的负担。目前已知有自动处理此问题之开发框架似乎只有ZK。</p>
<p>AJAX的优点和批评</p>
<p>使用Ajax的最大优点，就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作，并避免了在网络上发送那些没有改变过的信息。</p>
<p>Ajax不需要任何浏览器插件，但需要用户允许JavaScript在浏览器上执行。就像DHTML应用程序那样，Ajax应用程序必须在众多不同的浏览器和平台上经过严格的测试。随着Ajax的成熟，一些简化Ajax使用方法的程序库也相继问世。同样，也出现了另一种辅助程序设计的技术，为那些不支持JavaScript的用户提供替代功能。</p>
<p>对应用Ajax最主要的批评就是，它可能破坏浏览器后退按钮的正常行为（参见Jakob Nielsen's的《Web设计10大错误（1999年）》）。在动态更新页面的情况下，用户无法回到前一个页面状态，这是因为浏览器仅能记下历史记录中的静态页面。一个被完整读入的页面与一个已经被动态修改过的页面之间的差别非常微妙；用户通常都希望单击后退按钮，就能够取消他们的前一次操作，但是在Ajax应用程序中，却无法这样做。不过开发者已想出了种种办法来解决这个问题，当中大多数都是在用户单击后退按钮访问历史记录时，通过建立或使用一个隐藏的IFRAME来重现页面上的变更。（例如，当用户在Google Maps中单击后退时，它在一个隐藏的IFRAME中进行搜索，然后将搜索结果反映到Ajax元素上，以便将应用程序状态恢复到当时的状态。）</p>
<p>一个相关的观点认为，使用动态页面更新使得用户难于将某个特定的状态保存到收藏夹中。该问题的解决方案也已出现，大部分都使用URL片断标识符（通常被称为锚点，即URL中#后面的部分）来保持跟踪，允许用户回到指定的某个应用程序状态。（许多浏览器允许JavaScript动态更新锚点，这使得Ajax应用程序能够在更新显示内容的同时更新锚点。）这些解决方案也同时解决了许多关于不支持后退按钮的争论。</p>
<p>进行Ajax开发时，网络延迟--即用户发出请求到服务器发出响应之间的间隔--需要慎重考虑。不给予用户明确的回应，没有恰当的预读数据，或者对XMLHttpRequest的不恰当处理，都会使用户感到延迟，这是用户不愿看到的，也是他们无法理解的。通常的解决方案是，使用一个可视化的组件来告诉用户系统正在进行后台操作并且正在读取数据和内容。</p>
<p>一些手持设备（如手机、PDA等）现在还不能很好的支持Ajax;</p>
<p>用JavaScript作的Ajax引擎，JavaScript的兼容性和DeBug都是让人头痛的事;<br />
Ajax的无刷新重载，由于页面的变化没有刷新重载那么明显，所以容易给用户带来困扰――用户不太清楚现在的数据是新的还是已经更新过的；现有的解决有：在相关位置提示、数据更新的区域设计得比较明显、数据更新后给用户提示等;<br />
对串流媒体的支持没有FLASH、Java Applet好;</p>
<img src ="http://www.cnblogs.com/bailingewei/aggbug/1122450.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43629/" target="_blank">[新闻][译稿]微软将 jQuery IntelliSense整合到Visual Studio</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item></channel></rss>