1. 程式人生 > >Web開發技術發展史話

Web開發技術發展史話

  討論Web開發技術的歷史,當然要先說說Web的起源。眾所周知,Web這個Internet上最熱門的應用架構是由Tim Berners-Lee發明的。Web的前身是1980年Tim Berners-Lee負責的Enquire(Enquire Within Upon Everything的簡稱)專案。1990年11月,第一個Web伺服器nxoc01.cern.ch開始執行,Tim Berners-Lee在自己編寫的圖形化Web瀏覽器"WorldWideWeb"上看到了最早的Web頁面。1991年,CERN(European Particle Physics Laboratory)正式釋出了Web技術標準。目前,與Web相關的各種技術標準都由著名的W3C組織(World Wide Web Consortium)管理和維護。

   從技術層面看,Web架構的精華有三處:用超文字技術(HTML)實現資訊與資訊的連線;用統一資源定位技術(URI)實現全球資訊的精確定位;用新的應用層協議(HTTP)實現分散式的資訊共享。這三個特點無一不與資訊的分發、獲取和利用有關。其實,Tim Berners-Lee早就明確無誤地告訴我們:"Web是一個抽象的(假想的)資訊空間。"也就是說,作為Internet上的一種應用架構,Web的首要任務就是向人們提供資訊和資訊服務。

   很可惜,在Web應用日新月異的今天,許多搞技術的人似乎已經忘記了Web架構的設計初衷。他們在自己開發的網站或Web應用中大肆堆砌各種所謂的"先進"技術,但終端使用者能夠在這些網站或應用中獲得的有價值資訊卻寥寥無幾。這個問題絕不像評論者常說的"有路無車"或"資訊匱乏"那麼簡單。一個Web開發者倘若忘記了Web技術的最終目標是提供資訊和資訊服務,他的愚蠢程度就絲毫不亞於一個在足球場上只知道賣弄技巧,卻忘記了射門得分的大牌球星。從這個角度來說,評價一種Web開發技術優劣的標準只有一個,那就是看這種技術能否在最恰當的時間和最恰當的地點,以最恰當的方式,為最需要資訊的人提供最恰當的資訊服務。

  客戶端技術的萌芽和演進


   Web是一種典型的分散式應用架構。Web應用中的每一次資訊交換都要涉及到客戶端和服務端兩個層面。因此,Web開發技術大體上也可以被分為客戶端技術和服務端技術兩大類。我們先來談談客戶端技術的萌芽和演進過程。

   Web客戶端的主要任務是展現資訊內容,而HTML語言則是資訊展現的最有效載體之一。作為一種實用的超文字語言,HTML的歷史最早可以追溯到上世紀四十年代。1945年,Vannevar Bush在一篇文章中闡述了文字和文字之間通過超級連結相互關聯的思想,並在文中給出了一種能實現資訊關聯的計算機Memex的設計方案。Doug Engelbart等人則在1960年前後,對資訊關聯技術做了最早的實驗。與此同時,Ted Nelson正式將這種資訊關聯技術命名為超文字(Hypertext)技術。1969年,IBM的Charles Goldfarb發明了可用於描述超文字資訊的GML(Generalized Markup Language)語言。1978到1986年間,在ANSI等組織的努力下,GML語言進一步發展成為著名的SGML語言標準。當Tim Berners-Lee和他的同事們在1989年試圖建立一個基於超文字的分散式應用系統時,Tim Berners-Lee意識到,SGML是描述超文字資訊的一個上佳方案,但美中不足的是,SGML過於複雜,不利於資訊的傳遞和解析。於是,Tim Berners-Lee對SGML語言做了大刀闊斧的簡化和完善。1990年,第一個圖形化的Web瀏覽器"WorldWideWeb"終於可以使用一種為Web度身定製的語言--HTML來展現超文字資訊了。

   最初的HTML語言只能在瀏覽器中展現靜態的文字或影象資訊,這滿足不了人們對資訊豐富性和多樣性的強烈需求--這件事情最終的結果是,由靜態技術向動態技術的轉變成為了Web客戶端技術演進的永恆定律。

   能儲存、展現二維動畫的GIF影象格式早在1989年就已發展成熟。Web出現後,GIF第一次為HTML頁面引入了動感元素。但更大的變革來源於1995年Java語言的問世。Java語言天生就具備的平臺無關的特點,讓人們一下子找到了在瀏覽器中開發動態應用的捷徑。1996年,著名的Netscape瀏覽器在其2.0版中增加了對JavaApplets和JavaScript的支援。Netscape的冤家對頭,Microsoft的IE 3.0也在這一年開始支援Java技術。現在,喜歡動畫、喜歡互動操作、喜歡客戶端應用的開發人員可以用Java或JavaScript語言隨心所欲地豐富HTML頁面的功能了。順便說一句,JavaScript語言在所有客戶端開發技術中佔有非常獨特的地位:它是一種以指令碼方式執行的,簡化了的Java語言,這也是指令碼技術第一次在Web世界裡嶄露頭角。為了用純Microsoft的技術與JavaScript抗衡,Microsoft還為1996年的IE 3.0設計了另一種後來也聲名顯赫的指令碼語言--VBScript語言。

   真正讓HTML頁面又酷又炫、動感無限的是CSS(Cascading Style Sheets)和DHTML(Dynamic HTML)技術。1996年底,W3C提出了CSS的建議標準,同年,IE 3.0引入了對CSS的支援。CSS大大提高了開發者對資訊展現格式的控制能力。1997年的Netscape 4.0不但支援CSS,而且增加了許多Netscape公司自定義的動態HTML標記,這些標記在CSS的基礎上,讓HTML頁面中的各種要素"活動"了起來。1997年,Microsoft釋出了IE 4.0,並將動態HTML標記、CSS和動態物件模型(DHTML Object Model)發展成了一套完整、實用、高效的客戶端開發技術體系,Microsoft稱其為DHTML。同樣是實現HTML頁面的動態效果,DHTML技術無需啟動Java虛擬機器或其他指令碼環境,可以在瀏覽器的支援下,獲得更好的展現效果和更高的執行效率。今天,已經很少有哪個HTML頁面的開發者還會對CSS和DHTML技術視而不見了。

   為了在HTML頁面中實現音訊、視訊等更為複雜的多媒體應用,1996年的Netscape 2.0成功地引入了對QuickTime外掛的支援,外掛這種開發方式也迅速風靡了瀏覽器的世界。在Windows平臺上,Microsoft將客戶端應用整合的賭注押到了1990年代中期剛剛問世的COM和ActiveX身上。1996年,IE 3.0正式支援在HTML頁面中插入ActiveX控制元件的功能,這為其他廠商擴充套件Web客戶端的資訊展現方式開闢了一條自由之路。1999年,Realplayer外掛先後在Netscape和IE瀏覽器中取得了成功,與此同時,Microsoft自己的媒體播放外掛Media Player也被預裝到了各種Windows版本之中。同樣值得紀念的還有Flash外掛的橫空出世:1990年代初期,Jonathan Gay在FutureWave公司開發了一種名為Future Splash Animator的二維向量動畫展示工具,1996年,Macromedia公司收購了FutureWave,並將Jonathan Gay的發明改名為我們熟悉的Flash。從此,Flash動畫成了Web開發者表現自我、展示個性的最佳方式。

   除了編寫HTML頁面之外,客戶端應用的開發者還可以利用一些成熟的技術將瀏覽器的功能新增到自己的應用程式中。從1992年開始,W3C就免費向開發者提供libwww開發庫。藉助libwww,我們可以自己編寫Web瀏覽器和Web搜尋工具,也可以分析、編輯或顯示HTML頁面。1999年,Microsoft在IE 5.0中引入的HTAs(HTML Applications)技術則允許我們直接將HTML頁面轉換為一個真正的應用程式。從1997年的IE 4.0開始,Microsoft為開發者提供了WebBrowser控制元件和其他相關的COM介面,允許程式設計師在自己的程式中直接嵌入瀏覽器視窗,或呼叫各種瀏覽器的功能,如分析或編輯HTML頁面等。Windows 98及其後的Windows作業系統甚至還利用WSH(Windows Script Host)技術將原本只在瀏覽器中執行的JavaScript、VBScript變成了可以在WIN32環境下使用的通用指令碼語言,這大概也可算作我們對Web客戶端開發技術的一種巧妙利用吧。

  服務端技術的成熟與發展


   與客戶端技術從靜態向動態的演進過程類似,Web服務端的開發技術也是由靜態向動態逐漸發展、完善起來的。

   最早的Web伺服器簡單地響應瀏覽器發來的HTTP請求,並將儲存在伺服器上的HTML檔案返回給瀏覽器。一種名為SSI(Server Side Includes)的技術可以讓Web伺服器在返回HTML檔案前,更新HTML檔案的某些內容,但其功能非常有限。第一種真正使伺服器能根據執行時的具體情況,動態生成HTML頁面的技術是大名鼎鼎的CGI(Common Gateway Interface)技術。1993年,CGI 1.0的標準草案由NCSA(National Center for Supercomputing Applications)提出,1995年,NCSA開始制定CGI 1.1標準,1997年,CGI 1.2也被納入了議事日程。CGI技術允許服務端的應用程式根據客戶端的請求,動態生成HTML頁面,這使客戶端和服務端的動態資訊交換成為了可能。隨著CGI技術的普及,聊天室、論壇、電子商務、資訊查詢、全文檢索等各式各樣的Web應用蓬勃興起,人們終於可以享受到資訊檢索、資訊交換、資訊處理等更為便捷的資訊服務了。

   早期的CGI程式大多是編譯後的可執行程式,其程式語言可以是C、C++、Pascal等任何通用的程式設計語言。為了簡化CGI程式的修改、編譯和釋出過程,人們開始探尋用指令碼語言實現CGI應用的可行方式。在此方面,不能不提的是Larry Wall於1987年發明的Perl語言。Perl結合了C語言的高效以及sh、awk等指令碼語言的便捷,似乎天生就適用於CGI程式的編寫。1995年,第一個用Perl寫成的CGI程式問世。很快,Perl在CGI程式設計領域的風頭就蓋過了它的前輩C語言。隨後,Python等著名的指令碼語言也陸續加入了CGI程式語言的行列。

   1994年,Rasmus Lerdorf發明了專用於Web服務端程式設計的PHP(Personal Home Page Tools)語言。與以往的CGI程式不同,PHP語言將HTML程式碼和PHP指令合成為完整的服務端動態頁面,Web應用的開發者可以用一種更加簡便、快捷的方式實現動態Web功能。1996年,Microsoft借鑑PHP的思想,在其Web伺服器IIS 3.0中引入了ASP技術。ASP使用的指令碼語言是我們熟悉的VBScript和JavaScript。藉助Microsoft Visual Studio等開發工具在市場上的成功,ASP迅速成為了Windows系統下Web服務端的主流開發技術。當然,以Sun公司為首的Java陣營也不會示弱。1997年,Servlet技術問世,1998年,JSP技術誕生。Servlet和JSP的組合(還可以加上JavaBean技術)讓Java開發者同時擁有了類似CGI程式的集中處理功能和類似PHP的HTML嵌入功能,此外,Java的執行時編譯技術也大大提高了Servlet和JSP的執行效率--這也正是Servlet和JSP被後來的J2EE平臺吸納為核心技術的原因之一。

  兩種重要的企業開發平臺


   Web服務端開發技術的完善使開發複雜的Web應用成為了可能。在此起彼伏的電子商務大潮中,為了適應企業級應用開發的各種複雜需求,為了給終端使用者提供更可靠、更完善的資訊服務,兩個最重要的企業級開發平臺--J2EE和.NET在2000年前後分別誕生於Java和Windows陣營,它們隨即就在企業級Web開發領域展開了你死我活的拼爭。平臺之爭讓整個Web世界在最近的幾年裡不得安寧,但從某種意義上說,也正是這種針鋒相對的競爭關係促使了Web開發技術以前所未有的速度提高和躍進。

   J2EE是純粹基於Java的解決方案。1998年,Sun釋出了EJB 1.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和EJB 2.1。至此,J2EE體系及相關的軟體產品已經成為了Web服務端開發的一個強有力的支撐環境。

   和J2EE不同的是,Microsoft的.NET平臺是一個強調多語言間互動的通用執行環境。儘管.NET的設計者試圖以.NET平臺作為絕大多數Windows應用的首選執行環境,但.NET首先吸引的卻是Web開發者的目光。2001年,ECMA通過了Microsoft提交的C#語言和CLI標準,這兩個技術標準構成了.NET平臺的基石,它們也於2003年成為了ISO的國際標準。2002年,Microsoft正式釋出.NET Framework和Visual Studio .NET開發環境。早在.NET釋出之前,就已經有許多Windows平臺的Web開發者迫不及待地利用Beta版本開發Web應用了。這大概是因為,.NET平臺及相關的開發環境不但為Web服務端應用提供了一個支援多種語言的、通用的執行平臺,而且還引入了ASP.NET這樣一種全新的Web開發技術。ASP.NET超越了ASP的侷限,可以使用VB.NET、C#等編譯型語言,支援Web Form、.NET Server Control、ADO.NET等高階特性。客觀地講,.NET平臺,尤其是.NET平臺中的ASP.NET的確不失為Web開發技術在Windows平臺上的一個集大成者。

  XML語言及相關技術

   如果說HTML語言給Web世界賦予了無限生機的話,那麼,XML語言的出現大概就可以算成是Web的一次新生了。按照Tim Berners-Lee的說法,Web是一個"資訊空間"。HTML語言具有較強的表現力,但也存在結構過於靈活、語法不規範的弱點。當資訊都以HTML語言的面貌出現時,Web這個資訊空間是雜亂無章、沒有秩序的。為了讓Web世界裡的所有資訊都有章可循、有法可依,我們需要一種更為規範、更能夠體現資訊特點的語言。

   1996年,W3C在SGML語言的基礎上,提出了XML(Extensible Markup Language)語言草案。1998年,W3C正式釋出了XML 1.0標準。XML語言對資訊的格式和表達方法做了最大程度的規範,應用軟體可以按照統一的方式處理所有XML資訊。這樣一來,資訊在整個Web世界裡的共享和交換就有了技術上的保障。HTML語言關心的是資訊的表現形式,而XML語言關心的是資訊本身的格式和資料內容。從這個意義上說,XML語言不但可以將客戶端的資訊展現技術提高到一個新的層次,而且可以顯著提高服務端的資訊獲取、生成、釋出和共享能力。為了將XML資訊轉換為HTML等不同的資訊展現形式,1999年,W3C制定出了XSLT標準。同一年,IE 5.0增加了對XML和XSLT的支援。

   現在,網站的開發者可以直接使用XML語言釋出資訊了。針對不同的應用領域,人們還制定了許多專門的XML規範。例如,2001年W3C釋出的SVG(Scalable Vector Graphics)1.0標準就是一種用XML語言表達的、全新的二維向量圖形格式。開發者可以用SVG格式描述大多數已有的Flash動畫。與Flash格式相比,符合XML標準的SVG格式顯然更有利於資訊交換和共享。

   Web本身就是一個最大的分散式應用系統。對於分散式開發而言,XML技術也大有用武之地。一個明顯的事實是,如果能讓分散式應用藉助XML格式交換資訊,那麼,以往橫亙在分散式架構上的資訊交換難題也就迎刃而解了。1999年,W3C和相關的企業開始討論設計基於XML的通訊協議,2000年,W3C釋出SOAP(Simple Object Access Protocol)協議的1.1版。人們把利用SOAP協議傳遞XML資訊的分散式應用模型稱為Web Service。2001年,W3C釋出了WSDL(Web Services Description Language)協議的1.1版。SOAP協議和WSDL協議共同構成了Web Service的基礎。隨後,J2EE和.NET這兩大企業級開發平臺先後實現了Web Service,並將其視為平臺的一項核心功能。

   Web Service對於Web開發者的重要意義在於,當我們需要在不同的服務端、不同的客戶端乃至不同的應用型別、不同的計算裝置之間傳遞資訊的時候,以往的分散式開發技術或者因為適應性不強,或者因為擴充套件能力不足,都難以滿足現代Web開發的需要,而Web Service正好填補了這一空白。

  Web開發框架和應用模型

   2000年以後,隨著Web應用的日益複雜,人們逐漸意識到,單純依靠某種技術多半無法達到快速開發、快速驗證和快速部署的最佳境界。研究者開始嘗試著將已有的Web開發技術綜合起來,形成完整的開發框架或應用模型,並以此來滿足各種複雜的應用需求。

   Microsoft在客戶端的技術整合方面走在了最前面。1998年時Microsoft推出的Windows 98就可以在桌面上整合Web頁面,這實際上是將資源管理器和Web瀏覽器的功能有效地結合了起來。2000年後,Microsoft陸續推出了MSN Explorer和與之相關的MSN線上服務。這一應用模型將Web瀏覽、視訊點播、郵件處理、網上游戲、線上聊天等許多種使用者常用的Web功能整合在了一個統一的介面中。從資訊利用的角度看,MSN試圖讓使用者在一個最舒適的環境中獲取足夠的資訊,這種努力的確值得人們稱道。另一個與客戶端技術整合相關的例子是搜尋引擎Google在2003年展示給大家的Google工具欄功能。雖然Google工具欄有炒作和廣告的嫌疑,但安裝Google工具欄之後的IE瀏覽器將資訊瀏覽和資訊檢索有機地結合了起來,這種小小的功能改進確實是對使用者的體貼和幫助。

   在Web服務端,2000年以後出現了幾種主要的技術融合方式。首先,越來越多的Web開發環境開始支援MVC(Model-View-Contorller)的設計模型,為開發者提供了全套的開發框架。實際上,J2EE和.NET平臺本身就是這種開發框架的典型代表。其次,門戶服務(Portal Server)和Web內容管理(Web Content Management)在最近幾年裡成為了應用整合的重點模型。這兩種應用模型可以直接為開發者或終端使用者提供構建Web應用的高階平臺,可以讓Web開發和資訊釋出工作大為簡化。在商業軟體領域,這一類應用的例子包括Microsoft的SharePoint、IBM的WebSphere Portal、FileNet的Web Content Manager等等。開源專案在Web開發框架和應用模型方面表現得非常積極,Struts、Jetspeed、jPortlet、Cocoon、Lenya、XOOPS等都是開源世界裡與MVC開發框架、門戶服務和Web內容管理相關的優秀解決方案。

   當然,技術整合絕不等於技術堆砌。一些Web站點和Web應用的開發者把XML語言、MVC框架等時髦技術拼湊起來,卻不管它們是否能適應具體的應用環境,結果,他們的系統要麼執行效率低下,要麼功能殘缺不全。反之,一個值得注意的事實是,像新浪、搜狐或網易這樣的入口網站,在他們的資訊釋出頁面(如新聞頁面)裡,儘管資訊內容時刻都在重新整理,但Web伺服器上存放的始終都是靜態的HTML頁面。這種"落後技術"的優點是,在大量併發訪問的情況下,入口網站的響應速度仍然很快。深入到技術層面,我們通常會驚訝地發現,這些網站使用的大多是自行研發的Web內容管理系統。當網站的內容編輯提交新的資訊時,系統會自動將資訊轉換為HTML格式,釋出到Web伺服器叢集的每一個結點上。在新浪網的一個角落裡,我們可以找到"新浪網站釋出系統"的研發歷程:

  V 1.0(1997):基於檔案的版本,實現新聞首頁、正文和專題的釋出。
  V 1.1(1998/12):採用資料庫後臺、實現跨伺服器釋出,自動化程度高。
  V 2.0(1999/3):創立模版和域的全新概念,奠定了該系列的基本設計思路。
  V 2.1(1999/9):增加周邊模組,如搜尋、自動採集。
  V 3.0(2000/1):優化傳輸方式,增加相關新聞和評論。
  V 3C(2000/6):V3.0的編譯版,也是商業版的原型。
  V 3.1(2000/7):優化資料庫結構,採用記憶體CACHE大幅提速,增加了集中監控功能。
  V 3.1C(2000/8):商業用測試版本。
  V 3.2(正在製作中):重點解決備份系統的自動化切換,在機制上實現永不宕機。

  這一份有趣的歷史記錄再一次印證了我關於Web開發技術的基本觀點:一種技術只要能為使用者提供高水平的資訊服務,它就是最好、最先進的技術。

   Web開發技術的未來

  所有人都在關心Web的發展前景,所有人都想知道十年以後的Web會長成什麼樣子。要回答這些問題,沒有誰比W3C更有權威了。W3C明確地告訴我們,Web的未來是語義化的Web(Semantic Web)。今天的Web可以自如地生成、傳遞和展現各式各樣的資訊,但它還只是一個資訊的"容器",很難揭示出資訊本身的內容和特性。與此相對的是,未來的語義化Web是一種懂得資訊內容的Web,是真正的"資訊管理員"。

  從技術角度看,XML語言統一了資訊的表達方式,但這離揭示資訊內容的目標還相距甚遠。1998年,W3C和一些研究機構開始對元資料(Metadata)進行研究。元資料是描述資料的資料,可以揭示資訊的內容特性。1999年,NetScape提出的RSS(Rich Site Summary)建議標準是用元資料技術描述新聞等資訊內容的第一次嘗試。1999年,W3C的研究小組提出了RDF(Resource Description Framework)標準草案。RDF在XML語法的基礎上,規定了元資料的儲存結構和相關的技術標準。使用RDF語言,我們可以用統一的、可交換的格式揭示出資訊本身的各種特性。2001年,W3C又開始著手製定OWL(OWL Web Ontology Language)標準。OWL語言也是一種符合XML標準的語言,它比RDF又前進了一步,可以更加深入、細緻地描述資訊內容。在RDF和OWL語言的幫助下,我們能讓Web上的資訊內容變得更容易理解、更便於交換和共享。2003年,W3C成立了語義化Web Service研究小組(Semantic Web Services Interest Group),研究在Web Service中加入語義技術的相關問題。2004年2月,W3C宣佈RDF和OWL標準正式成為W3C的建議方案,這標誌著語義化Web的大廈已經破土動工。

  隨著語義化Web的誕生和發展,Web開發技術也必將經歷更為重大的變革。可以預見的是,在未來的幾年裡,還會有許多新的開發技術或開發平臺出現。從靜態技術到動態技術,從開發平臺到應用模型,從傳統Web到語義化Web……為了讓更多的人獲得更有價值的資訊服務,Web開發者們也許還會經歷一次又一次的技術浪潮,還會面臨更為嚴峻的技術挑戰,但這和資訊共享的最高目標相比,又算得了什麼呢?