投递文章投递文章 投稿指南 RSS订阅RSS订阅

Ajax基础教程(阿斯利森版)第一章

来源:CSDN 发布时间:2008-05-15 收藏 投稿 字体:【
 
内容介绍:
Ajax技术可以提供高度交互的Web应用,给予用户更丰富的页面浏览体验。本书重点介绍Ajax及相关的工具和技术,主要内容包括XMLHttpRequest对象及其属性和方法、发送请求和处理响应、构建完备的Ajax开发工具、使用JsUnit测试JavaScript、分析JavaScript调试工具和技术,以及Ajax开发模式和框架等。本书中所有例子的代码都可以从Apress网站本书主页的源代码(Source Code)免费得到。本书适合各层次Web应用开发人员和网页设计人员阅读。
  • 书名:Ajax基础教程
  • 作者:(美)阿斯利森 舒塔
  • 来源:人民邮电出版社
  • 出版时间:2006年02月
  • ISBN:7-115-14481-8/TP·5211

第1章 Ajax简介

1.1 Web应用简史  

混沌初开,一切都那么简单。为了连接美国的少数几个顶尖研究机构,人们设计了最早的“Internet”,以便共同开展科学研究。不论是图书馆员、核物理学家,还是计算机科学家,都必须学习一个相当复杂的系统。1962年,麻省理工学院(MIT)的J.C.R. Licklider最早提出他的“Galactic Network”(超大网络)思想时,FirefoxIE之类的便捷工具连概念都未产生。

Licklider后来继续在美国国防高级研究计划局(DARPA)从事计算机研究,在那里他积极地宣扬网络化思想的重要性。几乎与此同时,MITLeonard KleinrockLawrence G. Roberts正在开展分组交换理论的研究,这是计算机联网的一个核心概念。在Thomas Merrill的帮助之下,Roberts1965年进而创建了第一个广域网,他通过一个拨号连接使马萨诸塞州的一台TX-2连上了加利福尼亚州的一台Q-32

1966年底,Roberts带着他的实验结果来到DARPA,在这里他构思了高级研究项目管理网络(Advanced Research Projects Administration NetworkARPANET)的计划。此时,Kleinrock正在加州大学洛杉矶分校网络测量中心(Network Measurement Center),这里被选作ARPANET的第一个节点。正是在这里,1969BBN公司成功地安装了第一个分组交换器,称为接口消息处理器(Interface Message ProcessorsIMP)。斯坦福研究中心被选为第二个节点,196910月,在此首次实现了主机到主机的消息交换。此后不久,又将加州大学圣巴巴拉分校和犹他大学增加为节点,这就是我们现在所称因特网的前身。

这个时期小型机刚开始出现,DEC公司推出了PDP-1,其后又相继推出了PDP-8PDP-11VAX-11/780,并取得了巨大成功。计算机能力得到了极大增强,而且使用也越来越方便,不像最初只有极少的几台大型机时,人们须排队使用。计算机已经更加平民化;不过,这时个人计算机革命还未到来。

最初,研究人员认为TCP协议只适用于大型系统,因为TCP就是为大型系统设计的。不过,麻省理工学院David Clark的研究小组发现,工作站也可以与大型机互联。Clark的研究,再加上20世纪80年代和90年代个人计算机领域的爆炸式发展,为网络的发展铺平了道路。

20世纪80年代出现了几个大变化。随着主机数量从很少发展到成千上万,需要为主机指定不同的名字,这样人们就不用费劲地去记它们的数字地址。这个变化,以及主机数量的飞速增长,催生了DNS。另外,ARPANET从使用NCP转为使用TCP/IP协议,后者是军方使用的标准协议。到了20世纪80年代中期,因特网已经建成为一个连接不同研究人员群体的平台,而且其他网络也开始出现:美国国家航空航天局(NASA)创建了SPAN;美国能源部建立了MFENet来研究磁聚变能源,另外在美国国家科学基金会(National Science Foundation)的资助下,还创建了CSNET来开展计算机科学研究。

1989年,欧洲粒子物理研究中心(CERN)的Tim Berners-Lee提出了一个很有意思的概念。他认为,与其简单地引用其他人的著作,不如进行实际的链接呢?读一篇文章时,读者可以打开所引用的其他文章。超文本hypertext)当时相当流行,Berners-Lee还利用了他先前在文档和文本处理方面的研究成果,发明了标准通用标记语言(Standard Generalized Markup LanguageSGML)的一个子集,称为超文本标记语言(HyperText Markup LanguageHTML)。HTML的妙处在于,它能将有关文本显示方式的信息与具体显示的实现相分离。Berners-Lee不仅创建了一个称为超文本传输协议(HyperText Transfer ProtocolHTTP)的简单协议,还发明了第一个Web浏览器,叫做WorldWideWeb

 

提到Web浏览器,大多数人都会想到无处不在的Microsoft Internet Explorer,直到最近像FirefoxSafariOpera之类的浏览器日益兴起,这种情况才稍有改观。许多新手可能会误认为IE是市场上的第一个浏览器,其实不然。实际上,第一个Web浏览器出自Berners-Lee之手,这是他为NeXT计算机创建的(这个Web浏览器原来取名叫WorldWideWeb,后来改名为Nexus),并在1990年发布给CERN的人员使用。Berners-LeeJean-Francois GroffWorldWideWeb移植到C,并把这个浏览器改名为libwww20世纪90年代初出现了许多浏览器,包括Nicola Pellow编写的行模式浏览器(这个浏览器允许任何系统的用户都能访问Internet,从UnixMicrosoft DOS都涵盖在内),还有Samba,这是第一个面向Macintosh的浏览器。

19932月,伊利诺伊大学Urbana-Champaign分校美国国家超级计算应用中心的Marc AndreessenEric Bina发布了Unix版本的Mosaic。几个月之后,Aleks Totic发布了MosaicMacintosh版本,这使得Mosaic成为第一个跨平台浏览器,它很快得到普及,并成为最流行的Web浏览器[1]。这项技术后来卖给了Spyglass,最后又归入Microsoft的门下,并应用在Internet Explorer中。

1993年,堪萨斯大学的开发人员编写了一个基于文本的浏览器,叫做Lynx,它成为了字符终端的标准。1994年,挪威奥斯陆的一个小组开发了Opera,到1996年这个浏览器得到了广泛使用。199412月,Netscape发布了Mozilla1.0版,第一个盈利性质的浏览器从此诞生。2002年又发布了一个开源的版本,这最终发展为200411月发布的、现在十分流行的Firefox浏览器。

Microsoft发布Windows 95时,IE 1.0是作为Microsoft Plus!包的一部分同时发布的。尽管这个浏览器与操作系统集成在一起,但大多数人还是坚持使用NetscapeLynxOperaIE 2.0有了很大起色,增加了对cookie、安全套接字层(Secure Socket LayerSSL)和其他新兴标准的支持。2.0版还可以用于Macintosh,从而成为Microsoft的第一个跨平台浏览器。不过,大多数用户还是很执着,仍然坚持使用他们习用的浏览器。

不过到了1996年夏天,Microsoft发布了IE 3.0版。几乎一夜之间,人们纷纷拥向IE。当时,Netscape的浏览器是要收费的,Microsoft则免费提供IE。关于浏览器领域谁主沉浮,因特网社区发生了两极分化,很多人担心Microsoft会像在桌面领域一样,在Web领域也一统天下。有些人则考虑到安全因素——果然不出所料,发布3.09天之后就报告了第一个安全问题。但是到1999年发布IE 5时,它已经成为使用最广的浏览器。

最初,所有Web页面都是静态的,用户请求一个资源,服务器再返回这个资源。什么都不动,什么都不闪。坦率地讲,对于许多Web网站来说,这样也是可以的,这些网站的Web页面只是电子形式的文本,在一处生成,内容固定,再发布到多处。在浏览器发展的最初阶段,Web页面的这种静态性不成问题,科学家只是使用因特网来交换研究论文,大学院校也只是通过因特网在线发布课程信息。企业界还没有发现这个新“渠道”会提供什么商机。实际上,以前公司主页显示的信息通常很少,无非是一些联系信息或者只是一些文档。不过没过多久,Web用户就开始有新的要求了,希望能得到更动态的网上体验。个人计算机成为企业不可或缺的资源,而且从个人宿舍到住家办公室开始出现越来越多的计算机。随着Windows 95的问世,随着人们已经领教了Corel WordPerfectMicrosoft Excel丰富的功能,用户的期望也越来越高。

1.3.1  CGI

要让Web更为动态,第一个办法是公共网关接口(Common Gateway InterfaceCGI)。与静态的Web获取不同,使用CGI可以创建程序,当用户发出请求时就会执行这个程序。假设要在Web网站上显示销售的商品,你可以利用CGI脚本来访问商品数据库,并显示结果。通过使用简单的HTML表单和CGI脚本,可以创建简单的网上店面,这样别人就可以通过浏览器来购买商品。编写CGI脚本可以用多种语言,从PerlVisual Basic都可以,这使得掌握不同编程语言的人都能编写CGI脚本。

不过,要创建动态的Web页面,CGI并不是最安全的方法。如果采用CGI,将允许别人在你的系统上执行程序。大多数情况下这可能没有问题,但是倘若某个用户有恶意企图,则很可能会利用这一点,让系统运行你本来不想运行的程序。尽管存在这个缺陷,到如今CGI仍在使用。

1.3.2  applet

很显然,CGI可以有所改进。19955月,Sun公司的John GageAndreessen(目前在Netscape通信公司)宣布一种新的编程语言诞生,这就是JavaNetscape Navigator为这种新语言提供了支持,最初是为了支持机顶盒。(你可能原认为最早涉足智能家居的公司是MicrosoftSony其实不然。)就像所有革命都机缘巧合一样,Java和因特网的出现恰到好处,在适当的时间、适当的地点横空出世,JavaWeb上发布仅几个月,就已经有成千上万的人下载。由于NetscapeNavigator支持Java,动态Web页面掀开了新的一页:applet时代到来了。

applet允许开发人员编写可嵌入在Web页面上的小应用程序。只要用户使用支持Java的浏览器,就可以在浏览器的Java虚拟机(Java Virtual MachineJVM)中运行applet。尽管applet可以做很多事情,但它也存在一些限制:通常不允许它读写文件系统,它也不能加载本地库,而且可能无法启动客户端上的程序。除了这些限制外,applet是在一个沙箱安全模型中运行的,这是为了有助于防止用户运行恶意代码。

对许多人来说,最初接触Java编程语言就是从applet开始的,当时这是创建动态Web应用的一种绝好的方法。applet允许你在浏览器中创建一个胖客户应用,不过要在平台的安全限制范围内。当时,在很多领域都广泛使用了applet,但是,Web社区并没有完全被applet“征服”[2]。胖客户的开发人员都很熟悉一个问题:必须在客户端上部署适当的Java版本。因为applet在浏览器的虚拟机中运行,所以开发人员必须确保客户端安装了适当版本的Java。尽管这个问题也可以解决,但它确实妨碍了applet技术的进一步推广。而且如果applet写得不好,很可能对客户主机造成影响,这使许多客户对于是否采用基于applet的解决方案犹豫不定。如果你还不太熟悉applet,请看图1-1,图中显示了Sun公司提供的时钟applet

1-1 Sun的时钟applet

1.3.3  JavaScript

与此同时,Netscape创建了一种脚本语言,并最终命名为JavaScript(建立原型时叫做Mocha,正式发布之前曾经改名为LiveWireLiveScript,不过最后终于确定为JavaScript)。设计JavaScript是为了让不太熟悉JavaWeb设计人员和程序员能够更轻松地开发applet(当然,Microsoft也推出了与JavaScript相对应的脚本语言,称为VBScript)。NetscapeBrendan Eich来设计和实现这种新语言,他认为市场需要的是一种动态类型脚本语言。由于缺乏开发工具,缺少有用的错误消息和调试工具,JavaScript很受非议,但尽管如此,JavaScript仍然是一种创建动态Web应用的强大方法。

最初,创建JavaScript是为了帮助开发人员动态地修改页面上的标记,以便为客户提供更丰富的体验。人们越来越认识到,页面也可以当作对象,因此文档对象模型(Document Object ModelDOM)应运而生。刚开始,JavaScriptDOM紧密地交织在一起,但最后它们还是“分道扬镳”,并各自发展。DOM是页面的一个完全面向对象的表示,该页面可以用某种脚本语言(如JavaScriptVBScript)进行修改。

最后,万维网协会(World Wide Web ConsortiumW3C)介入,并完成了DOM的标准化,而欧洲计算机制造商协会(ECMA)批准JavaScript作为ECMAScript规约。根据这些标准编写的页面和脚本,在遵循相应原则的任何浏览器上都应该有相同的外观和表现。

在最初的几年中,JavaScript的发展很是坎坷,这是许多因素造成的。首先,浏览器支持很不一致,即使是今天,同样的脚本在不同浏览器上也可能有不同的表现;其次,客户可以自由地把JavaScript关闭,由于存在一些已知的安全漏洞,往往鼓励用户把JavaScript关掉。由于开发JavaScript很有难度(你会用alert吗?),许多开发人员退避三舍,有些开发人员干脆不考虑 JavaScript,认为这是图形设计人员使用的一种“玩具”语言。许多人曾试图使用、测试和调试复杂的JavaScript,并为此身心俱疲,所以大多数人在经历了这种痛苦之后,最终只能满足于用JavaScript创建简单的基于表单的应用。

1.3.4  servletASPPHP……太多了

尽管applet是基于Web的,但胖客户应用存在的许多问题在applet上也有所体现。在大量使用拨号连接的年代(就算是今天,拨号连接也很普遍),要下载一个复杂applet的完整代码,要花很多时间,用户不能承受。开发人员还要考虑客户端上的Java版本,有些虚拟机还有更多的要求[3]。理想情况下只需提供静态的Web页面就够了,毕竟,这正是设计因特网的本来目的。当然,尽管静态页面是静态的,但是如果能在服务器上动态地生成内容,再把静态的内容返回,这就太好了。

Java问世一年左右,Sun引入了servlet。现在Java代码不用再像applet那样在客户端浏览器中运行了,它可以在你控制的一个应用服务器上运行。这样,开发人员就能充分利用现有的业务应用,而且,如果需要升级为最新的Java版本,只需要考虑服务器就行了。Java推崇“一次编写,到处运行”,这一点使得开发人员可以选择最先进的应用服务器和服务器环境,这也是这种新技术的另一个优点。servlet还可以取代CGI脚本。

servlet向前迈出了很大一步。servlet提供了对整个Java应用编程接口(API)的完全访问,而且提供了一个完备的库可以处理HTTP。不过,servlet不是十全十美的。使用servlet设计界面可能很困难。在典型的servlet交互中,先要从用户那里得到一些信息,完成某种业务逻辑,然后使用一些“打印行”创建HTML,为用户显示结果。代码清单1-1所示的代码就相当常见。

代码清单1-1 简单的servlet代码

response.setContentType("text/html;charset=UTF-8");

        PrintWriter out = response.getWriter();

 

        out.println("<html>");

        out.println("<head>");

        out.println("<title>Servlet SimpleServlet</title>");

        out.println("</head>");

        out.println("<body>");

        out.println("<h1>Hello World</h1>");

        out.println("<p>Imagine if this were more complex.</p>");

        out.println("</body>");

        out.println("</html>");

 

        out.close();

以上这一小段代码可以生成图1-2所示的一个相当简单的Web页面。

1-2 代码清单1-1中简单servlet的输出

servlet不仅容易出错,很难生成可视化显示,而且还无法让开发者尽展其才。一般地,编写服务器端代码的人往往是软件开发人员,他们只是对算法和编译器很精通,但不是能设计公司精美网站的图形设计人员。业务开发人员不仅要编写业务逻辑,还必须考虑怎么创建一致的设计。因此,很有必要将表示与业务逻辑分离。因此JSPJavaServer Pages)出现了。

在某种程度上,JSP是对 Microsoft Active Server Pages (ASP)做出的回应。MicrosoftSunservlet规约上所犯的错误汲取了教训,并创建了ASP来简化动态页面的开发。Microsoft增加了非常好的工具支持,并与其Web服务器紧密集成。JSPASP的设计目的都是为了将业务处理与页面外观相分离,从这个意义上讲,二者是相似的。虽然存在一些技术上的差别(Sun也从Microsoft那里学到了教训),但它们有一个最大的共同点,即Web设计人员能够专心设计页面外观,而软件开发人员可以专心开发业务逻辑。代码清单1-2显示了一个简单的JSP

代码清单1-2 简单的JSP

<%@page contentType="text/html"%>

<%@page pageEncoding="UTF-8"%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

    "http://www.w3.org/TR/html4/loose.dtd">

 

<html>

     <head>

          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

          <title>Hello World</title>

     </head>

     <body>

 

     <h1>Hello World</h1>

     <p>This code is more familiar for Web developers.</p>

 

     </body>

</html>

这个代码会生成图1-3所示的输出。

1-3 简单JSP的输出

当然,MicrosoftSun并没有垄断服务器端解决方案。还有许多其他的方案在这个领域都有一席之地,如PHPColdFusion等等。有些开发人员喜欢新奇的工具,还有一些则倾向于更简单的语言。目前来看,所有这些解决方案完成的任务都是一样的,它们都是要动态生成HTML。在服务器端生成内容可以解决发布问题。不过,与使用胖客户或applet所做的工作相比,用户从原始HTML得到的体验就太过单调和苍白了。下面几节将介绍几种力图提供更丰富用户体验的解决方案。

顶一下
(1)
100%
踩一下
(0)
0%
本文Tags:
  • 表情:
  •    
  • 评价:
用户名: 密码: 匿名 注册
最新评论 查看所有评论
About iTtang - 联系我们  - 专题列表 - 友情链接  -  高级搜索  -  帮助中心  -  您的意见