讨论Web开发技术的历史,当然要先说说Web的起源。众所周知,Web这个Internet上最热门的应用架构是由TimBerners-Lee发明的。Web的前身是1980年Tim Berners-Lee负责的Enquire(Enquire WithinUpon Everything的简称)项目。1990年11月,第一个Web服务器nxoc01.cern.ch开始运行,TimBerners-Lee在自己编写的图形化Web浏览器"WorldWideWeb"上看到了最早的Web页面。1991年,CERN(EuropeanParticle PhysicsLaboratory)正式发布了Web技术标准。目前,与Web相关的各种技术标准都由著名的W3C组织(World Wide WebConsortium)管理和维护。3 A' X) F Q1 B, r) B
9 ~' L& E. ?6 x& X5 e 从技术层面看,Web架构的精华有三处:用超文本技术(HTML)实现信息与信息的连接;用统一资源定位技术(URI)实现全球信息的精确定位;用新的应用层协议(HTTP)实现分布式的信息共享。这三个特点无一不与信息的分发、获取和利用有关。其实,TimBerners-Lee早就明确无误地告诉我们:"Web是一个抽象的(假想的)信息空间。"也就是说,作为Internet上的一种应用架构,Web的首要任务就是向人们提供信息和信息服务。 6 o7 j o; u$ I2 n' M2 B: w& n4 r1 e6 x% V7 s5 l6 J
很可惜,在Web应用日新月异的今天,许多搞技术的人似乎已经忘记了Web架构的设计初衷。他们在自己开发的网站或Web应用中大肆堆砌各种所谓的"先进"技术,但最终用户能够在这些网站或应用中获得的有价值信息却寥寥无几。这个问题绝不像评论者常说的"有路无车"或"信息匮乏"那么简单。一个Web开发者倘若忘记了Web技术的最终目标是提供信息和信息服务,他的愚蠢程度就丝毫不亚于一个在足球场上只知道卖弄技巧,却忘记了射门得分的大牌球星。从这个角度来说,评价一种Web开发技术优劣的标准只有一个,那就是看这种技术能否在最恰当的时间和最恰当的地点,以最恰当的方式,为最需要信息的人提供最恰当的信息服务。- E! Q; l* _. i! a* G. f6 S8 s
& ?, }* `3 ~- T w' n* f! G# l6 N6 e N客户端技术的萌芽和演进6 @) T6 f3 L2 h
' U6 t) P+ d% r+ ?6 C
Web是一种典型的分布式应用架构。Web应用中的每一次信息交换都要涉及到客户端和服务端两个层面。因此,Web开发技术大体上也可以被分为客户端技术和服务端技术两大类。我们先来谈谈客户端技术的萌芽和演进过程。/ u H( ?9 Q: k5 \& E
' V' M4 h# l- E w! r8 {( Z- b! P: U
Web客户端的主要任务是展现信息内容,而HTML语言则是信息展现的最有效载体之一。作为一种实用的超文本语言,HTML的历史最早可以追溯到上世纪四十年代。1945年,VannevarBush在一篇文章中阐述了文本和文本之间通过超级链接相互关联的思想,并在文中给出了一种能实现信息关联的计算机Memex的设计方案。DougEngelbart等人则在1960年前后,对信息关联技术做了最早的实验。与此同时,TedNelson正式将这种信息关联技术命名为超文本(Hypertext)技术。1969年,IBM的CharlesGoldfarb发明了可用于描述超文本信息的GML(Generalized MarkupLanguage)语言。1978到1986年间,在ANSI等组织的努力下,GML语言进一步发展成为著名的SGML语言标准。当TimBerners-Lee和他的同事们在1989年试图创建一个基于超文本的分布式应用系统时,TimBerners-Lee意识到,SGML是描述超文本信息的一个上佳方案,但美中不足的是,SGML过于复杂,不利于信息的传递和解析。于是,TimBerners-Lee对SGML语言做了大刀阔斧的简化和完善。1990年,第一个图形化的Web浏览器"WorldWideWeb"终于可以使用一种为Web度身定制的语言--HTML来展现超文本信息了。& w' X4 L0 w8 p! f) x* p
8 `0 G+ K+ U- M' P4 T3 d% [
最初的HTML语言只能在浏览器中展现静态的文本或图像信息,这满足不了人们对信息丰富性和多样性的强烈需求--这件事情最终的结果是,由静态技术向动态技术的转变成为了Web客户端技术演进的永恒定律。 ) D6 o2 G7 }2 V) R 0 M6 {5 E' E. p' w$ o7 c Y& N% R 能存储、展现二维动画的GIF图像格式早在1989年就已发展成熟。Web出现后,GIF第一次为HTML页面引入了动感元素。但更大的变革来源于1995年Java语言的问世。Java语言天生就具备的平台无关的特点,让人们一下子找到了在浏览器中开发动态应用的捷径。1996年,著名的Netscape浏览器在其2.0版中增加了对JavaApplets和javascript的支持。Netscape的冤家对头,Microsoft的IE3.0也在这一年开始支持Java技术。现在,喜欢动画、喜欢交互操作、喜欢客户端应用的开发人员可以用Java或javascript语言随心所欲地丰富HTML页面的功能了。顺便说一句,javascript语言在所有客户端开发技术中占有非常独特的地位:它是一种以脚本方式运行的,简化了的Java语言,这也是脚本技术第一次在Web世界里崭露头角。为了用纯Microsoft的技术与javascript抗衡,Microsoft还为1996年的IE 3.0设计了另一种后来也声名显赫的脚本语言--VBScript语言。 ' q# a- K; j; j' `( A/ z" d( B 7 Q- r2 y' z8 @8 T4 }6 _% F Y 真正让HTML页面又酷又炫、动感无限的是CSS(Cascading Style Sheets)和DHTML(DynamicHTML)技术。1996年底,W3C提出了CSS的建议标准,同年,IE3.0引入了对CSS的支持。CSS大大提高了开发者对信息展现格式的控制能力。1997年的Netscape4.0不但支持CSS,而且增加了许多Netscape公司自定义的动态HTML标记,这些标记在CSS的基础上,让HTML页面中的各种要素"活动"了起来。1997年,Microsoft发布了IE 4.0,并将动态HTML标记、CSS和动态对象模型(DHTML ObjectModel)发展成了一套完整、实用、高效的客户端开发技术体系,Microsoft称其为DHTML。同样是实现HTML页面的动态效果,DHTML技术无需启动Java虚拟机或其他脚本环境,可以在浏览器的支持下,获得更好的展现效果和更高的执行效率。今天,已经很少有哪个HTML页面的开发者还会对CSS和DHTML技术视而不见了。9 Y" a6 _) i7 u* o% g; C
4 ^4 Z! o, M5 J2 l! ^
为了在HTML页面中实现音频、视频等更为复杂的多媒体应用,1996年的Netscape2.0成功地引入了对QuickTime插件的支持,插件这种开发方式也迅速风靡了浏览器的世界。在Windows平台上,Microsoft将客户端应用集成的赌注押到了1990年代中期刚刚问世的COM和ActiveX身上。1996年,IE3.0正式支持在HTML页面中插入ActiveX控件的功能,这为其他厂商扩展Web客户端的信息展现方式开辟了一条自由之路。1999年,Realplayer插件先后在Netscape和IE浏览器中取得了成功,与此同时,Microsoft自己的媒体播放插件MediaPlayer也被预装到了各种Windows版本之中。同样值得纪念的还有Flash插件的横空出世:1990年代初期,JonathanGay在FutureWave公司开发了一种名为Future SplashAnimator的二维矢量动画展示工具,1996年,Macromedia公司收购了FutureWave,并将JonathanGay的发明改名为我们熟悉的Flash。从此,Flash动画成了Web开发者表现自我、展示个性的最佳方式。 0 N1 x9 r. V% ^7 X6 O4 L3 [* U * D& d; f+ m' O' v- N% E! G9 f 除了编写HTML页面之外,客户端应用的开发者还可以利用一些成熟的技术将浏览器的功能添加到自己的应用程序中。从1992年开始,W3C就免费向开发者提供libwww开发库。借助libwww,我们可以自己编写Web浏览器和Web搜索工具,也可以分析、编辑或显示HTML页面。1999年,Microsoft在IE 5.0中引入的HTAs(HTMLApplications)技术则允许我们直接将HTML页面转换为一个真正的应用程序。从1997年的IE4.0开始,Microsoft为开发者提供了WebBrowser控件和其他相关的COM接口,允许程序员在自己的程序中直接嵌入浏览器窗口,或调用各种浏览器的功能,如分析或编辑HTML页面等。Windows 98及其后的Windows操作系统甚至还利用WSH(Windows ScriptHost)技术将原本只在浏览器中运行的javascript、VBScript变成了可以在WIN32环境下使用的通用脚本语言,这大概也可算作我们对Web客户端开发技术的一种巧妙利用吧。: k! W) s% x; s& W8 G
7 v! k, E( @/ S7 \4 E& `3 o 服务端技术的成熟与发展6 |2 U9 \" v7 ~# h- k
; q# \1 @0 U2 P7 t5 _* G 与客户端技术从静态向动态的演进过程类似,Web服务端的开发技术也是由静态向动态逐渐发展、完善起来的。' C' x- K3 {/ F x2 |
: I0 S" M* ?7 h
最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器。一种名为SSI(Server SideIncludes)的技术可以让Web服务器在返回HTML文件前,更新HTML文件的某些内容,但其功能非常有限。第一种真正使服务器能根据运行时的具体情况,动态生成HTML页面的技术是大名鼎鼎的CGI(Common Gateway Interface)技术。1993年,CGI1.0的标准草案由NCSA(National Center for SupercomputingApplications)提出,1995年,NCSA开始制定CGI 1.1标准,1997年,CGI1.2也被纳入了议事日程。CGI技术允许服务端的应用程序根据客户端的请求,动态生成HTML页面,这使客户端和服务端的动态信息交换成为了可能。随着CGI技术的普及,聊天室、论坛、电子商务、信息查询、全文检索等各式各样的Web应用蓬勃兴起,人们终于可以享受到信息检索、信息交换、信息处理等更为便捷的信息服务了。 1 g1 n$ W0 [" m. v# G+ Q . W8 x2 [; M n5 ?6 a 早期的CGI程序大多是编译后的可执行程序,其编程语言可以是C、C++、Pascal等任何通用的程序设计语言。为了简化CGI程序的修改、编译和发布过程,人们开始探寻用脚本语言实现CGI应用的可行方式。在此方面,不能不提的是LarryWall于1987年发明的Perl语言。Perl结合了C语言的高效以及sh、awk等脚本语言的便捷,似乎天生就适用于CGI程序的编写。1995年,第一个用Perl写成的CGI程序问世。很快,Perl在CGI编程领域的风头就盖过了它的前辈C语言。随后,Python等著名的脚本语言也陆续加入了CGI编程语言的行列。 + a3 R, S ]! W * ^$ D, ~* r0 \1 c a 1994年,Rasmus Lerdorf发明了专用于Web服务端编程的PHP(PersonalHome PageTools)语言。与以往的CGI程序不同,PHP语言将HTML代码和PHP指令合成为完整的服务端动态页面,Web应用的开发者可以用一种更加简便、快捷的方式实现动态Web功能。1996年,Microsoft借鉴PHP的思想,在其Web服务器IIS3.0中引入了ASP技术。ASP使用的脚本语言是我们熟悉的VBScript和javascript。借助Microsoft VisualStudio等开发工具在市场上的成功,ASP迅速成为了Windows系统下Web服务端的主流开发技术。当然,以Sun公司为首的Java阵营也不会示弱。1997年,Servlet技术问世,1998年,JSP技术诞生。Servlet和JSP的组合(还可以加上JavaBean技术)让Java开发者同时拥有了类似CGI程序的集中处理功能和类似PHP的HTML嵌入功能,此外,Java的运行时编译技术也大大提高了Servlet和JSP的执行效率--这也正是Servlet和JSP被后来的J2EE平台吸纳为核心技术的原因之一。 . ~ `0 S6 X* e 两种重要的企业开发平台# z+ d+ t3 Z) _9 ?$ w& j
5 s; ^1 i v1 G c4 P7 A Web服务端开发技术的完善使开发复杂的Web应用成为了可能。在此起彼伏的电子商务大潮中,为了适应企业级应用开发的各种复杂需求,为了给最终用户提供更可靠、更完善的信息服务,两个最重要的企业级开发平台--J2EE和.NET在2000年前后分别诞生于Java和Windows阵营,它们随即就在企业级Web开发领域展开了你死我活的拼争。平台之争让整个Web世界在最近的几年里不得安宁,但从某种意义上说,也正是这种针锋相对的竞争关系促使了Web开发技术以前所未有的速度提高和跃进。 3 i: N' ~/ C: h& t0 y7 M! W" H T6 ~+ ^% k$ L* H
J2EE是纯粹基于Java的解决方案。1998年,Sun发布了EJB1.0标准。EJB为企业级应用中必不可少的数据封装、事务处理、交易控制等功能提供了良好的技术基础。至此,J2EE平台的三大核心技术Servlet、JSP和EJB都已先后问世。1999年,Sun正式发布了J2EE的第一个版本。紧接着,遵循J2EE标准,为企业级应用提供支撑平台的各类应用服务软件争先恐后地涌现了出来。IBM的WebSphere、BEA的WebLogic都是这一领域里最为成功的商业软件平台。随着开源运动的兴起,JBoss等开源世界里的应用服务新秀也吸引了许多用户的注意力。到2003年时,Sun的J2EE版本已经升级到了1.4版,其中三个关键组件的版本也演进到了Servlet 2.4、JSP 2.0和EJB2.1。至此,J2EE体系及相关的软件产品已经成为了Web服务端开发的一个强有力的支撑环境。2 F( [2 p B; @ Q
i& s+ @3 F- {" I
和J2EE不同的是,Microsoft的.NET平台是一个强调多语言间交互的通用运行环境。尽管.NET的设计者试图以.NET平台作为绝大多数Windows应用的首选运行环境,但.NET首先吸引的却是Web开发者的目光。2001年,ECMA通过了Microsoft提交的C#语言和CLI标准,这两个技术标准构成了.NET平台的基石,它们也于2003年成为了ISO的国际标准。2002年,Microsoft正式发布.NETFramework和Visual Studio.NET开发环境。早在.NET发布之前,就已经有许多Windows平台的Web开发者迫不及待地利用Beta版本开发Web应用了。这大概是因为,.NET平台及相关的开发环境不但为Web服务端应用提供了一个支持多种语言的、通用的运行平台,而且还引入了ASP.NET这样一种全新的Web开发技术。ASP.NET超越了ASP的局限,可以使用VB.NET、C#等编译型语言,支持Web Form、.NET ServerControl、ADO.NET等高级特性。客观地讲,.NET平台,尤其是.NET平台中的ASP.NET的确不失为Web开发技术在Windows平台上的一个集大成者。 6 y) E/ t3 Q- V2 D0 m" Y" R3 ~ l! i% |+ \, w; N z XML语言及相关技术. Q+ R2 [+ [- ?" R, N4 W1 H' N
3 v8 R5 O& d, @
如果说HTML语言给Web世界赋予了无限生机的话,那么,XML语言的出现大概就可以算成是Web的一次新生了。按照TimBerners-Lee的说法,Web是一个"信息空间"。HTML语言具有较强的表现力,但也存在结构过于灵活、语法不规范的弱点。当信息都以HTML语言的面貌出现时,Web这个信息空间是杂乱无章、没有秩序的。为了让Web世界里的所有信息都有章可循、有法可依,我们需要一种更为规范、更能够体现信息特点的语言。 # n2 R* y2 M8 _& J- z1 D 3 r9 ^: _! e+ N 1996年,W3C在SGML语言的基础上,提出了XML(Extensible MarkupLanguage)语言草案。1998年,W3C正式发布了XML1.0标准。XML语言对信息的格式和表达方法做了最大程度的规范,应用软件可以按照统一的方式处理所有XML信息。这样一来,信息在整个Web世界里的共享和交换就有了技术上的保障。HTML语言关心的是信息的表现形式,而XML语言关心的是信息本身的格式和数据内容。从这个意义上说,XML语言不但可以将客户端的信息展现技术提高到一个新的层次,而且可以显著提高服务端的信息获取、生成、发布和共享能力。为了将XML信息转换为HTML等不同的信息展现形式,1999年,W3C制定出了XSLT标准。同一年,IE 5.0增加了对XML和XSLT的支持。; O2 r% X# @4 N2 r