( ~! y. x+ N3 }4 [& k客户端技术的萌芽和演进9 Z9 O+ i' ]4 V9 {7 c
- q0 H$ \+ i( c( Q# Z Web是一种典型的分布式应用架构。Web应用中的每一次信息交换都要涉及到客户端和服务端两个层面。因此,Web开发技术大体上也可以被分为客户端技术和服务端技术两大类。我们先来谈谈客户端技术的萌芽和演进过程。: _7 A# _' o5 j
7 Z' _: [. L! J- H
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来展现超文本信息了。 ! t* i9 |2 c& Y0 x; u8 d& t# l' {1 M: s, c9 T
最初的HTML语言只能在浏览器中展现静态的文本或图像信息,这满足不了人们对信息丰富性和多样性的强烈需求--这件事情最终的结果是,由静态技术向动态技术的转变成为了Web客户端技术演进的永恒定律。& B6 ~6 w* w7 C0 k) t8 v/ W
1 B$ U$ e: y. e! P6 Z* x
能存储、展现二维动画的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语言。 ' X& h! d# J$ \) W2 @ # J' e" h7 r" L ?/ a+ G. g0 `$ I 真正让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技术视而不见了。4 W2 H/ C, w; ~9 R/ {" h
! b; h+ r3 ~! {$ h# J5 s$ g
为了在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开发者表现自我、展示个性的最佳方式。8 `8 g5 [1 J Y
3 E+ e) k3 c$ R N8 w 除了编写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客户端开发技术的一种巧妙利用吧。" ~% A L& Z: l: R; e
0 L- W7 }5 Q+ O, E 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服务端开发的一个强有力的支撑环境。 " b/ j5 i8 r' w8 [* P* i, Z, _2 E& e
和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平台上的一个集大成者。/ X z7 ?% Z& P, t" P! G
$ W \; l: l2 u1 V0 g6 D# M XML语言及相关技术 % w7 o2 D" J6 f# u1 C) @& X8 W9 N9 p0 c2 ]* j2 z) a$ [* P4 B8 o
如果说HTML语言给Web世界赋予了无限生机的话,那么,XML语言的出现大概就可以算成是Web的一次新生了。按照TimBerners-Lee的说法,Web是一个"信息空间"。HTML语言具有较强的表现力,但也存在结构过于灵活、语法不规范的弱点。当信息都以HTML语言的面貌出现时,Web这个信息空间是杂乱无章、没有秩序的。为了让Web世界里的所有信息都有章可循、有法可依,我们需要一种更为规范、更能够体现信息特点的语言。 2 _8 k0 I3 u1 [. } , n/ M" ?( m( F+ e 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的支持。4 f4 R/ U" `+ |7 r5 T* _0 ~
3 h; S4 s" j3 d. i5 W1 x% q( E
现在,网站的开发者可以直接使用XML语言发布信息了。针对不同的应用领域,人们还制定了许多专门的XML规范。例如,2001年W3C发布的SVG(Scalable VectorGraphics)1.0标准就是一种用XML语言表达的、全新的二维矢量图形格式。开发者可以用SVG格式描述大多数已有的Flash动画。与Flash格式相比,符合XML标准的SVG格式显然更有利于信息交换和共享。/ Z8 V5 g( y2 v" J/ r
& c/ O5 ^/ F" D; s4 ?& `
Web本身就是一个最大的分布式应用系统。对于分布式开发而言,XML技术也大有用武之地。一个明显的事实是,如果能让分布式应用借助XML格式交换信息,那么,以往横亘在分布式架构上的信息交换难题也就迎刃而解了。1999年,W3C和相关的企业开始讨论设计基于XML的通信协议,2000年,W3C发布SOAP(Simple Object AccessProtocol)协议的1.1版。人们把利用SOAP协议传递XML信息的分布式应用模型称为WebService。2001年,W3C发布了WSDL(Web Services DescriptionLanguage)协议的1.1版。SOAP协议和WSDL协议共同构成了WebService的基础。随后,J2EE和.NET这两大企业级开发平台先后实现了Web Service,并将其视为平台的一项核心功能。- E' N O0 w0 Q( n! M. c
1 k. A7 C* D4 y4 ^& U; L. C
WebService对于Web开发者的重要意义在于,当我们需要在不同的服务端、不同的客户端乃至不同的应用类型、不同的计算设备之间传递信息的时候,以往的分布式开发技术或者因为适应性不强,或者因为扩展能力不足,都难以满足现代Web开发的需要,而Web Service正好填补了这一空白。 1 F6 I, q& F+ k% |7 D: f) Q1 B ' K A( _4 H! z1 k) J2 ]/ `+ mWeb开发框架和应用模型 : x& Y/ N1 ]- b6 f. c5 ^ 6 e, t4 S% }- B9 y# d- L) ^4 w7 m# j 2000年以后,随着Web应用的日益复杂,人们逐渐意识到,单纯依靠某种技术多半无法达到快速开发、快速验证和快速部署的最佳境界。研究者开始尝试着将已有的Web开发技术综合起来,形成完整的开发框架或应用模型,并以此来满足各种复杂的应用需求。 : A" n) G1 ~5 |% z* D' Q3 U( }! L" W1 o+ {# L a
Microsoft在客户端的技术集成方面走在了最前面。1998年时Microsoft推出的Windows98就可以在桌面上集成Web页面,这实际上是将资源管理器和Web浏览器的功能有效地结合了起来。2000年后,Microsoft陆续推出了MSNExplorer和与之相关的MSN在线服务。这一应用模型将Web浏览、视频点播、邮件处理、网上游戏、在线聊天等许多种用户常用的Web功能集成在了一个统一的界面中。从信息利用的角度看,MSN试图让用户在一个最舒适的环境中获取足够的信息,这种努力的确值得人们称道。另一个与客户端技术集成相关的例子是搜索引擎Google在2003年展示给大家的Google工具栏功能。虽然Google工具栏有炒作和广告的嫌疑,但安装Google工具栏之后的IE浏览器将信息浏览和信息检索有机地结合了起来,这种小小的功能改进确实是对用户的体贴和帮助。 : H! n) r& L: A" Z' L [ . {; U7 J) L6 _/ k8 f* {8 W: n& x 在Web服务端,2000年以后出现了几种主要的技术融合方式。首先,越来越多的Web开发环境开始支持MVC(Model-View-Contorller)的设计模型,为开发者提供了全套的开发框架。实际上,J2EE和.NET平台本身就是这种开发框架的典型代表。其次,门户服务(Portal Server)和Web内容管理(Web ContentManagement)在最近几年里成为了应用集成的重点模型。这两种应用模型可以直接为开发者或最终用户提供构建Web应用的高级平台,可以让Web开发和信息发布工作大为简化。在商业软件领域,这一类应用的例子包括Microsoft的SharePoint、IBM的WebSpherePortal、FileNet的Web ContentManager等等。开源项目在Web开发框架和应用模型方面表现得非常积极,Struts、Jetspeed、jPortlet、Cocoon、Lenya、XOOPS等都是开源世界里与MVC开发框架、门户服务和Web内容管理相关的优秀解决方案。 4 i( a* G) n- e! p2 R9 `3 z/ }" |' l
当然,技术集成绝不等于技术堆砌。一些Web站点和Web应用的开发者把XML语言、MVC框架等时髦技术拼凑起来,却不管它们是否能适应具体的应用环境,结果,他们的系统要么运行效率低下,要么功能残缺不全。反之,一个值得注意的事实是,像新浪、搜狐或网易这样的门户网站,在他们的信息发布页面(如新闻页面)里,尽管信息内容时刻都在刷新,但Web服务器上存放的始终都是静态的HTML页面。这种"落后技术"的优点是,在大量并发访问的情况下,门户网站的响应速度仍然很快。深入到技术层面,我们通常会惊讶地发现,这些网站使用的大多是自行研发的Web内容管理系统。当网站的内容编辑提交新的信息时,系统会自动将信息转换为HTML格式,发布到Web服务器集群的每一个结点上。在新浪网的一个角落里,我们可以找到"新浪网站发布系统"的研发历程:$ `% m( J* W" F) f1 r* ~3 \4 f$ ^
+ _3 k( i y7 i2 p! y7 l, B5 v V 1.0(1997):基于文件的版本,实现新闻首页、正文和专题的发布。; B G/ ~ L8 ?
V 1.1(1998/12):采用数据库后台、实现跨服务器发布,自动化程度高。 ' a N7 L, u8 b( i9 [# e' f. k V 2.0(1999/3):创立模版和域的全新概念,奠定了该系列的基本设计思路。7 S/ Y. g& B n6 C# Z" v
V 2.1(1999/9):增加周边模块,如搜索、自动采集。. A' j) c+ q2 l
V 3.0(2000/1):优化传输方式,增加相关新闻和评论。 ) J: \# V$ U5 a9 C V 3C(2000/6):V3.0的编译版,也是商业版的原型。 3 x' y5 n% }/ a: u1 ` V 3.1(2000/7):优化数据库结构,采用内存CACHE大幅提速,增加了集中监控功能。" u! E9 O, G' I5 f9 }2 k L8 K7 i
V 3.1C(2000/8):商业用测试版本。 : p; B x$ c! h+ m: x V 3.2(正在制作中):重点解决备份系统的自动化切换,在机制上实现永不宕机。 7 I( V5 U* w9 d
" v, E c+ l/ y0 c$ h( B1 u
这一份有趣的历史记录再一次印证了我关于Web开发技术的基本观点:一种技术只要能为用户提供高水平的信息服务,它就是最好、最先进的技术。 8 ?; r+ x$ j% E+ X , d% s" L/ N; }# N/ c; uWeb开发技术的未来 5 G( w( w3 K' Y9 Z2 n+ h& n0 R* ^ . I8 r# T6 ]' H# }( R 所有人都在关心Web的发展前景,所有人都想知道十年以后的Web会长成什么样子。要回答这些问题,没有谁比W3C更有权威了。W3C明确地告诉我们,Web的未来是语义化的Web(SemanticWeb)。今天的Web可以自如地生成、传递和展现各式各样的信息,但它还只是一个信息的"容器",很难揭示出信息本身的内容和特性。与此相对的是,未来的语义化Web是一种懂得信息内容的Web,是真正的"信息管理员"。5 k1 [, `' |% s
) N- t5 q+ v, N 从技术角度看,XML语言统一了信息的表达方式,但这离揭示信息内容的目标还相距甚远。1998年,W3C和一些研究机构开始对元数据(Metadata)进行研究。元数据是描述数据的数据,可以揭示信息的内容特性。1999年,NetScape提出的RSS(Rich SiteSummary)建议标准是用元数据技术描述新闻等信息内容的第一次尝试。1999年,W3C的研究小组提出了RDF(ResourceDescriptionFramework)标准草案。RDF在XML语法的基础上,规定了元数据的存储结构和相关的技术标准。使用RDF语言,我们可以用统一的、可交换的格式揭示出信息本身的各种特性。2001年,W3C又开始着手制定OWL(OWL Web OntologyLanguage)标准。OWL语言也是一种符合XML标准的语言,它比RDF又前进了一步,可以更加深入、细致地描述信息内容。在RDF和OWL语言的帮助下,我们能让Web上的信息内容变得更容易理解、更便于交换和共享。2003年,W3C成立了语义化WebService研究小组(Semantic Web Services Interest Group),研究在WebService中加入语义技术的相关问题。2004年2月,W3C宣布RDF和OWL标准正式成为W3C的建议方案,这标志着语义化Web的大厦已经破土动工。 ; L3 O6 H1 n8 [9 {2 W& @ ' R N# t$ n7 E) d, z' T/ E 随着语义化Web的诞生和发展,Web开发技术也必将经历更为重大的变革。可以预见的是,在未来的几年里,还会有许多新的开发技术或开发平台出现。从静态技术到动态技术,从开发平台到应用模型,从传统Web到语义化Web……为了让更多的人获得更有价值的信息服务,Web开发者们也许还会经历一次又一次的技术浪潮,还会面临更为严峻的技术挑战,但这和信息共享的最高目标相比,又算得了什么呢?