Web應用發展簡史

Web應用的發展簡史

剛開始時一切都那麼簡單.在美國,最初爲了連接很少的幾個頂尖研究機構,設計了最早的“Internet”,以便共同開展科學研究.不論是圖書館員、原子能物理學家,還是計算機科學家,都必須學習一個相當複雜的系統,1962年,麻省理工大學(MIT)的J.C.R. Licklider最早提出他的“Galactic Network”(超大網絡)思想時,甚至還沒有Firefox和Internet Explorer之類的概念.
Licklider後來繼續在國防部高級研究計劃局(Defense Advanced Research Projects Agency,DARPA)從事計算機研究,在那裏他積極地宣揚網絡化思想的重要性.與此同時,MIT的Leonard Kleinrock和Lawrence G. Roberts正在開展分組交換理論的研究,這是網絡計算機的一個核心概念.在Thomas Merrill的幫助之下,Roberts於1965年進一步創建了第一個廣域網,他通過一個撥號連接使麻薩諸塞州的一臺TX-2連上了加利福尼亞州的一臺Q-32.1966年底,Roberts把他的實驗結果提交給DARPA,在這裏他設計了高級研究項目管理網絡(Advanced Research Projects Administration Network,ARPANET)的計劃.此時,Kleinrock正在加州大學的洛杉磯網絡測量中心(Los Angeles Network Measurement Center),這裏被選作ARPANET的第一個節點,正是在這裏,1969年Bolt Beranek和Newman(BBN)成功地安裝了第一個分組交換器,稱爲接口消息處理器(Interface Message Processors,IMP).斯坦福研究中心選爲第二個節點,1969年10月,實現了第一個主機到主機的消息交換.此後   不久,又將加州大學的聖巴巴拉分部和猶他州大學增加爲節點,這就是我們現在所稱Internet的前身.
這個時期微機剛開始出現:數字設備公司(Digital Equipment Corporation)創建了PDP-1,其後PDP-8、PDP-11和VAX-11/780取得了巨大成功.計算機能力得到了極大提高,而且價格也越來越爲人所接受,不像最初只有極少的幾臺大型機時那樣貴得驚人.計算機已經走入平民大衆;不過,可以看到,個人計算機還在進一步發展.
最初,研究人員認爲傳輸控制協議(Transmission Control Protocol,TCP)只適用於大型系統,因爲TCP就是爲大型系統設計的.不過,麻省理工大學David Clark的研究小組發現,工作站之間可以大範圍互聯.Clark的研究,再加上20世紀80年代和90年代個人計算機領域的爆炸式發展,迅速推動了當今世界的前進.
20世紀80年代出現了幾個大變化.隨着主機數量從爲數不多的幾個發展到成千上萬,需要爲主機指定不同的名字,這樣人們就不用費勁地去記它們的數字地址.這個變化,以及主機數量的飛速增長,催生了域名系統(Domain Name System ,DNS)的問世.另外,ARPANET從使用網絡控制協議(Network Control Protocol,NCP)轉換爲使用傳輸控制協議/ Internet協議(Transmission Control Protocol/Internet Protocol,TCP/IP),這是軍方使用的標準協議.到了20世紀80年代中期,Internet已經建成爲一個連接不同研究人員的平臺,而且其他網絡也開始出現: 美國國家航空和宇宙航行局(National Aeronautics and Space Administration)創建了SPAN.美國能源部(U.S. Department of Energy)建立了MFENet來研究磁力熔合能源,另外在國家科學基金(National Science Foundation)的資助下,還創建了CSNET來開展計算機科學研究.
1989年,歐洲粒子物理研究所(European Council for Nuclear Research,CERN)的Tim Berners-Lee提出了一個很有意思的概念.他認爲,與其簡單地引用其他人的工作,爲什麼不乾脆鏈接呢?讀一篇文章時,科學家可以打開所引用的文章.超文本(hypertext)當時相當流行,並利用了他先前在文檔和文本處理方面的研究成果.Berners-Lee發明了標準通用標記語言(Standard Generalized Markup Language,SGML)的一個子集,稱爲超文本標記語言(HyperText Markup Language,HTML).HTML的妙處在於,它能把應該如何展現文本與具體如何實現顯示相分離.Berners-Lee不僅創建一個稱爲超文本傳輸協議(HyperText Transfer Protocol,HTTP)的簡單協議,還發明瞭第一個Web瀏覽器,叫做WorldWideWeb.

瀏覽器歷史

提到Web瀏覽器,大多數人都會想到無處不在的Microsoft Internet Explorer,直到最近像Firefox、Safari和Opera之類的瀏覽器日益興起,這種情況才稍有改觀.儘管許多新手可能認爲Internet Explorer是市場上的第一個瀏覽器,但事實並非如此.實際上,第一個Web瀏覽器出自Berners-Lee之手,這是他爲NeXT計算機創建的(這個Web瀏覽器原來取名叫WorldWideWeb,後來改名爲Nexus),並在1990年發佈給CERN的人員.Berners-Lee和Jean-Francois Groff將WorldWideWeb移植到C,並把這個瀏覽器改名爲libwww.20世紀90年代初出現了許多瀏覽器,包括Nicola Pellow編寫的一個行模式瀏覽器(這個瀏覽器允許任何系統的用戶都能訪問Internet,從Unix到Microsoft DOS都涵蓋在內),還有Samba,這是第一個面向Macintosh的瀏覽器.
1993年2月,Illinois–Urbana-Champaign大學超計算應用國家中心的Marc Andreessen和Eric Bina爲Unix發佈了Mosaic.幾個月之後,Aleks Totic爲Macintosh發佈了Mosaic的一個版本,這使得Mosaic成爲第一個跨平臺瀏覽器,它很快得到普及,併成爲最流行的Web瀏覽器 .這個技術賣給了Spyglass,後來又歸入Microsoft的門下,並用在Internet Explorer中.
1993年,塂薩斯大學的開發人員編寫了一個基於文本的瀏覽器,叫做Lynx,它成爲了字符終端的標準.1994年,挪威奧斯陸的一個小組開發了Opera,1996年這個瀏覽器得到了廣泛使用.1994年12月,Netscape發佈了Mozilla的1.0 版,第一個盈利性質的瀏覽器誕生.2002年又發佈了一個開源的版本,這發展爲後來流行的Firefox瀏覽器,於2004年11月發佈.
Microsoft發佈Windows 95時,把Internet Explorer 1.0作爲Microsoft Plus!包的一部分同時發佈.儘管這個瀏覽器與操作系統集成在一起,但大多數人還是堅持使用Netscape、Lynx或Opera.IE 2.0有了很大起色,增加了對cookie、安全套接字層(Secure Socket Layer,SSL)和其他新興標準的支持.這個第二版還可以用於Macintosh,使之成爲Microsoft的第一個跨平臺瀏覽器.不過,大多數用戶還是很執着,仍然使用他們用慣了的瀏覽器.
不過到了1996年夏天,Microsoft發佈了3.0版本.幾乎一夜之間,人們紛紛擁向Internet Explorer.當然,Netscape的瀏覽器還是要收費,Microsoft仍然免費提供Internet Explorer.關於瀏覽器領域誰主沉浮,Internet羣體發生了兩極分化,很多人擔心Microsoft會像在桌面領域一樣,在Web領域也一統天下.有些人則考慮到安全問題,而且不出所料,發佈3.0版9天之後,就報告了第一個安全問題.到1999年發佈Internet Explorer 5時,它已經成爲使用最廣的瀏覽器.

Web應用的發展歷程

最初,所有Web頁面都是靜態的;用戶請求一個資源,服務再返回這個資源.什麼都不動,什麼都不閃.坦率地講,對於許多Web網站來說,這樣也是可以的,這些網站的Web頁面只是電子形式的文本,在一處生成,內容固定,再發布到多處.在瀏覽器發展的最初階段,Web頁面的這種靜態性不成問題;科學家只是使用Internet來交換研究論文,大學院校也只是通過Internet在線發佈課程信息.企業界還沒有發現這個新“渠道”會提供什麼商機.實際上,剛開始時,公司主頁顯示的信息通常很少,無非是一些聯繫信息,或者只是一些文檔.不過,沒過多久,Web用戶就開始有新的要求,希望能得到更動態的網上體驗.個人計算機成爲企業的強勁後盾,從個人宿舍到住家辦公室開始出現越來越多的計算機.隨着Windows 95的問世,人們已經領教了Corel Word-Perfect和Microsoft Excel豐富的功能,所以用戶的期望也越來越高.

  -CGI

要讓Web更爲動態,第一個辦法是通用網關接口(Common Gateway Interface,CGI).與靜態的Web獲取不同,可以使用CGI創建程序,用戶發出請求時就會執行這個程序.假設你想在Web網站上顯示銷售的商品,可以利用一個CGI腳本來訪問商品數據庫,並顯示結果.通過使用簡單的HTML表單和CGI腳本,可以創建簡單的前臺應用,這樣別人就可以通過瀏覽器來購買你的商品.可以用多種語言編寫CGI腳本,從Perl到Visual Basic都可以,這使得掌握不同語言的人都能編寫CGI腳本.
不過,要創建動態的Web頁面,CGI並不是最安全的方法.如果採用CGI,任何人都可以在你的系統上執行程序.大多數情況下這可能沒有問題,但是倘若一個用戶有惡意企圖,很可能利用這一點,讓你的系統運行你本來不想運行的程序.儘管存在這個缺陷,但如今CGI仍在使用.

  -Applet

很顯然,CGI可以有所改進.1995年5月,Sun的John Gage和Andreessen(目前在Netscape通信公司)宣佈一種新的編程語言誕生,這就是Java.Netscape Navigator爲這種新語言提供了支持,最初是爲了支持機頂盒( 你可能認爲,爲了搶佔在居室電子化方面的發展先機,最早涉足的公司是Microsoft和Sony).就像所有革命一樣,Java和Internet的出現恰到好處,在適當的時間、適當的地點橫空出世,Java在Web上發佈僅幾個月,就已經有數以千計的人下載Java.由於Netscape的Navigator支持Java,動態Web頁面掀開了新的一頁:applet時代到來了.
Applet允許開發人員編寫小應用,這些小應用可以嵌入在Web頁面上.只要用戶使用支持Java的瀏覽器,就可以在瀏覽器的Java虛擬機(Java Virtual Machine,JVM)中運行applet.儘管applet可以做很多事情,但它們也存在一些限制:通常不允許讀寫文件系統,不能加載本地庫,而且可能無法啓動客戶端上的程序.除了這些限制外,applet還會在一個沙箱安全模型中運行,這有助於防止用戶運行惡意代碼.
對許多人來說,最初接觸Java編程語言就是從applet開始的,當時這是創建動態Web應用的一種絕好的辦法.Applet允許你在瀏覽器中創建一個“胖”客戶應用,不過要在平臺的安全限制範圍內.當時,在很多領域都廣泛使用了applet;但是,Web羣體並沒有完全被applet“征服” .胖客戶的開發人員都很熟悉一個問題:必須在客戶端上部署適當的Java版本.因爲applet在瀏覽器的虛擬機中運行,所以開發人員必須確保客戶端安裝了適當版本的Java.儘管這個問題並非無法解決,但確實妨礙了applet技術的進一步推廣.而且如果applet寫得不好,很可能對客戶主機造成影響,這使許多客戶對於是否採用基於applet的解決方案猶豫不定.

  -JavaScript

與此同時,Netscape創建了一種腳本語言,並最終稱之爲JavaScript.(建立原型時本來叫做Mocha,正式發佈之前曾經改名爲LiveWire和LiveScript,不過最後終於確定爲JavaScript).設計JavaScript是爲了讓不太熟悉Java的網頁設計人員和程序員能夠更輕鬆地開發applet.(當然,Microsoft也推出了與JavaScript相對應的腳本語言,稱爲VBScript).Netscape請Brendan Eich來設計和實現這種新語言,他認爲需要的是一種動態類型腳本語言.由於缺乏開發工具,缺少有用的錯誤消息和調試工具,JavaScript很受非議,儘管如此,JavaScript仍然是一種創建動態Web應用的強大方法.
最初,創建JavaScript是爲了幫助開發人員動態地修改頁面上的標記,以便爲客戶提供更豐富的體驗.人們越來越認識到,頁面也可以當作對象,因此文檔對象模型(Document Object Model,DOM)應運而生.剛開始,JavaScript和DOM緊密地交織在一起,但最後它們還是“分道揚鑣”,並各自發展.DOM是頁面的一個面向對象表示,可以用某種腳本語言(如JavaScript或VBScript)進行修改.
最後,萬維網協會(World Wide Web Consortium,W3C)介入,並完成了DOM的標準化,而歐洲計算機制造商協會(European Computer Manufacturers Association,ECMA)批准JavaScript作爲ECMAScript規範.根據這些標準編寫的頁面和腳本在遵循相應原則的任何瀏覽器上都應該有相同的外觀和表現.
在最初的幾年中,JavaScript的發展很是坎坷,這是許多因素造成的.首先,瀏覽器支持很不一致(即使是今天,同樣的腳本在不同瀏覽器上也可能有不同的表現),而且客戶可以自由地把JavaScript關閉(由於存在一些已知的安全漏洞,因此往往鼓勵用戶把JavaScript關掉).由於開發JavaScript很有難度(你會用alert嗎?),這使得許多開發人員退避三舍,很少使用這種語言,有些開發人員乾脆不考慮 JavaScript,認爲這是圖形設計人員使用的一種“玩具”語言.許多人曾試圖使用、測試和調試複雜的JavaScript,併爲此身心俱疲,所以大多數人在經歷了這種痛苦之後,最終還是滿足於創建簡單的基於表單的應用.

  -Servlet、ASP和PHP ...哦,太多了!

儘管applet是基於Web的,但胖客戶應用存在的許多問題在applet身上也有所體現.在大量使用撥號連接的年代(就算是今天,撥號連接也很普遍),要下載一個複雜applet的完整代碼基,可能要花很多時間,這往往不是用戶所能承受的.開發人員還要考慮客戶端上的Java版本,有些虛擬機還有更多的要求 .理想情況下只需提供靜態的Web頁面,畢竟,這正是設計Internet的本來目的.當然,儘管靜態頁面是靜態的,但是如果能在服務器上動態地生成內容,再把靜態的內容返回,這就太好了.
在Java問世一年左右,Sun引入了servlet.你的Java代碼不用像applet那樣在客戶瀏覽器中運行;它會在你控制的一個應用服務器上運行.這樣,開發人員就能充分利用現有的業務應用,而且,如果需要升級爲最新的Java版本,只需要考慮服務器就行了.Java推祟“一次編寫,到處運行”,這一點使得開發人員可以選擇最先進的應用服務器和服務器環境,這也是這種新技術的另一個優點.Servlet還可以取代CGI腳本.
Servlet是向前邁出的很大一步.Servlet提供了對整個Java應用編程接口(API)的完全訪問,而且提供了一個完備的庫可以處理HTTP.不過,Servlet不是十全十美的.使用Servlet來設計界面可能很困難.在一個典型的Servlet交互中,先要從用戶得到一些信息,完成某種業務邏輯,然後使用一些“打印行”創建HTML,爲用戶顯示結果.

  簡單的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();

servlet不僅容易出錯,很難生成可視化顯示,而且還無法做到人盡其才.一般地,編寫服務器端代碼的人往往是軟件開發人員,他們只是對算法和編譯器很精通,但不是能設計公司精美網站的圖形設計人員.業務開發人員不僅要編寫業務邏輯,還必須考慮怎麼創建一致的設計.因此,很有必要將表示與業務邏輯分離.我們需要的就是JavaServer Pages(JSP).
在某種程度上,JSP是對 Microsoft的 Active Server Pages (ASP)做出的一個迴應.Microsoft從Sun在Servlet規範上所犯的錯誤汲取了教訓,並創建了ASP來簡化動態頁面的開發.Microsoft增加了很棒的工具支持,並與其Web服務器緊密集成.JSP和ASP都設計爲用於將業務處理與表示佈局相分離,從這個意義上講,二者是相似的.雖然存在一些技術上的差別(Sun也從Microsoft那裏學到了教訓),但它們有一個最大的共同點,都允許Web設計人員能夠把重點放在佈局上,而軟件開發人員可以集中開發業務邏輯.代碼清單1-2顯示了一個簡單的JSP.

  簡單的 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>


當然,Microsoft和Sun並沒有壟斷服務器端解決方案.還有許多其他的方案,從PHP到ColdFusion等等在這個領域都有一席之地.有些開發人員喜歡新奇的工具;還有一些則傾向於更簡單的語言.在目前來看,所有這些解決方案完成的任務都是一樣的,它們都是要動態生成HTML.在服務器端生成內容可以解決發佈問題;不過,與使用胖客戶或applet所做的工作相比,用戶從原始HTML得到的體驗就太過單調和蒼白了.下面幾節將介紹幾種力圖提供更豐富用戶體驗的解決方案.

  -Flash

並不是只有Microsoft和Sun在努力尋找辦法來解決動態Web頁面問題.1996年夏天,FutureWave發佈了一個名叫FutureSplash Animator的產品.這個產品起源於一個基於Java的動畫播放器,FutureWave很快被Macromedia兼併,Macromedia則將這個產品改名爲Flash.
利用Flash,設計人員可以創建令人驚歎的動態應用.公司可以在Web上發佈高度交互性的應用,幾乎與胖客戶應用相差無幾.不同於applet、servlet和CGI腳本,Flash不需要編程技巧,很容易上手.在20世紀90年代末期,掌握Flash是一個很重要的特長,因爲許多老闆都非常需要有這種技能的員工.不過,這種易用性也是有代價的.

像許多解決方案一樣,Flash需要客戶端軟件.儘管許多流行的操作系統和瀏覽器上都內置有所需的Shockwave播放器插件,但並非普遍都有.雖然能免費下載,但由於擔心同時攜帶病毒,使得許多用戶都拒絕安裝這個軟件.Flash應用可能還需要大量網絡帶寬才能正常地工作,另外,由於沒有廣泛的寬帶連接,這也限制了Flash的推廣(因此產生了“skip intro”鏈接).儘管有些網站選擇建立多個版本的Web應用,分別適應於不同的連接速度,但是許多公司都無法承受支持兩個或更多網站所增加的開發開銷.
總之,創建Flash應用需要專用的軟件和瀏覽器插件.applet可以用文本編輯器編寫,而且有一個免費的Java開發包(Java Development Kit,JDK),Flash則不同,使用完整的Flash工具包需要按點會費,每個點需要數百美元.儘管這些因素不是難以逾越的障礙,但它們確實減慢了Flash在動態Web應用道路上的前進腳步.

  -DHTML革命

Microsoft和Netscape發佈其各自瀏覽器的第4版時,Web開發人員有了一個新的選擇:動態HTML(dynamic HTML,DHTML).有些人可能認爲 DHTML不是一個W3C標準;它更像是一種銷售手段.實際上,DHTML結合了HTML、層聯樣式表(Cascading Style Sheets,CSS)、JavaScript和DOM.這些技術的結合使得開發人員可以動態地修改Web頁面的內容和結構.
最初對DHTML的反響很好.不過,它需要的瀏覽器版本還沒有得到廣泛採用.儘管Internet Explorer和Netscape都支持DHTML,但是它們的實現大相徑庭,這說明開發人員必須知道他們的客戶使用什麼瀏覽器.而這通常意味着,需要大量代碼來檢查瀏覽器的類型和版本,這就進一步增加了開發的開銷.有些人對於嘗試這種方法很是遲疑,因爲DHTML還沒有一個官方的標準.不過,將來新標準有可能會出現.

  -XML衍生語言

20世紀90年代中期,基於SGML,衍生出了W3C的可擴展標記語言(eXtensible Markup Language,XML),自此以後,XML變得極爲流行.許多人把XML視作爲解決所有計算機開發問題的靈丹妙藥,以至於XML幾乎無處不在.實際上,Microsoft就已經宣佈,Office 12將支持XML文件格式.
如今,我們至少有4種XML衍生語言可以創建Web應用(W3C的XHTML不包括在內):Mozilla的XUL ;XAMJ,這是結合Java的一種開源語言;Macromedia的MXML;以及Microsoft的XAML.
XUL: XUL(拼作"zool")代表XML用戶接口語言(XML User Interface Language),由Mozilla Foundation推出.流行的Firefox瀏覽器和Thunderbird郵件客戶都是用XUL編寫的.利用XUL,開發人員能構建功能很豐富的應用,可以與Internet連接,也可以沒有連接.爲了讓熟悉DHTML的開發人員儘快地學會,XUL設計爲可以爲諸如窗口和按鈕等標準界面部件提供跨平臺支持.雖然它本身不是一個標準,但XUL所基於的都是標準,如HTML 4.0、CSS、 DOM, XML和 ECMAScript等等.XUL應用可以在瀏覽器上運行,也可以安裝在一個客戶主機上.
當然,XUL也不是沒有缺點.XUL需要Gecko引擎,而且目前Internet Explorer還沒有相應的插件.儘管Firefox在瀏覽器市場中已經有了一定的份額,但少了 Internet Explorer的支持還是影響很大,這使得大多數應用都無法使用XUL.目前開展的很多項目都是力圖在多個平臺上使用XUL,包括Eclipse.
XAML:XAML (拼作"zammel")是Microsoft將推出的操作系統代碼(名爲Vista)的一個組件.XAML是可擴展應用標記語言(eXtensible Application Markup Language)的縮寫,它爲使用Vista創建用戶界面定義了一個標準.與HTML類似,XAML使用標記來創建標準元素,如按鈕和文本框等.XAML建立在Microsoft的 .NET平臺之上,而且可以編譯爲.NET類.
應當很清楚XAML的侷限所在.作爲一個Microsoft產品,這就要求必須使用Microsoft的操作系統.在許多情況下(特別是公司中),這可能不成問題,但是有些公司使用的不是Microsoft的操作系統,總不能削足適履吧,就像是沒有哪家磚瓦水泥公司會因爲買家沒有開某種車來就把他拒之門外.Vista交付的日期一再推遲,與此同時XAML也有了很大變化,不再只是一個播放器.據說,在未來幾年內,我們可能會看到一個全新的XAML.
MXML:Macromedia創建了MXML,作爲與其Flex技術一同使用的一種標記語言;MXML設計爲與HTML很相似,可以以一種聲明的方式來設計界面.與XUL和XAML類似,MXML提供了更豐富的界面組件,如DataGrid和TabNavigator,利用這些組件可以創建功能豐富的Internet應用.不過,MXML不能獨立使用;它依賴於Flex和ActionScript編程語言來編寫業務邏輯.
MXML與Flash有同樣的一些限制.它是專用的,而且依賴於價格昂貴的開發和部署環境.儘管將來.NET可能會對MXML提供支持,但現在Flex只能在Java 2企業版(Java 2 Enterprise Edition,J2EE)應用服務器上運行,如Tomcat和IBM的WebSphere,這就進一步限制了MXML的廣泛採用.
XAMJ: 讓人欣喜的是,開源羣體又向有關界面設計的XML衍生語言世界增加了新的成員.XAMJ作爲另一種跨平臺的語言,爲Web應用開發人員又提供了一個工具.這種衍生語言基於Java,Java是當前最流行的面嚮對象語言之一,XAMJ也因此獲得了面嚮對象語言的強大功能.XAMJ實際上想要替代基於XAML或HTML的應用,力圖尋找一種更爲安全的方法,既不依賴於某種特定的框架,也不需要高速的Internet連接.XAMJ是一種編譯型語言,建立在“clientlet”體系結構之上,儘管基於XAMJ的程序也可以是獨立的應用,但一般來講都是基於Web的應用.在寫這本書時,XAMJ還太新,所以還沒有太多批評;不過,批評肯定會有的,讓我們拭目以待.
談到“以X開頭的東西”時,別忘了W3C XForms規範.XForms設計爲支持一種更豐富的用戶界面,而且能夠將數據與表示解耦合.無庸置疑,XForms數據是XML,這樣你就能使用現有的XML技術,如XPath和XML Schema.標準HTML能做的,XForms都能做,而且XForms還有更多功能,包括動態檢查域值,與Web服務集成等等.不同於其他的許多W3C規範,XForms不需要新的瀏覽器,你可以使用現在已有的許多瀏覽器實現.與大多數XML衍生語言一樣,XForms是一種全新的方法,所以對於這種方法何時得到採納,最好要耐心一些.


  基本問題

有了以上了解,你怎麼想?即使是要求最苛刻的客戶應用,也已經把Web作爲首選平臺.很顯然,基於Web的應用很容易部署,而對用戶的這種低門檻正是Web應用最耀眼的地方.由於瀏覽器無處不在,而且無需下載和安裝新的軟件,用戶利用基於瀏覽器的客戶端就能很輕鬆地嘗試新的應用.用戶只需點擊一個鏈接,就能運行你的應用,而不用先下載幾MB的安裝程序才能嘗試.基於瀏覽器的應用也不考慮操作系統是什麼,這說明不僅使用不同操作系統(如Linux和OS X)的人能運行你的應用,對你來說,也不必考慮針對不同的操作系統開發和維護多個安裝包.
既然基於Web的應用是有史以來最好的東西,那我們爲什麼還要寫這本書?如果回頭看看Internet的起源,可以看到,最初Internet實際上就是讓科學家們和學術機構交換文章和研究成果,這是一種簡單的請求/響應模式.那時不需要會話狀態,也不需要購物車;人們只是在交換文檔.儘管你有很多辦法來創建動態的Web應用,但如果想讓應用在用戶中真正深入人心,想要得到大量的用戶,就必須在瀏覽器上大做文章,這說明,Internet以請求/響應模式做爲基礎,由此帶來的同步性也造成了妨礙.
與Microsoft Word或Intuit Quicken之類的胖客戶應用相比,Web模型當然只具有“平均性”,只能對所有用戶做折衷考慮.不過,由於Web應用很容易部署,而且瀏覽器的發展相當迅速,這意味着大多數用戶都已經學會了適應.但是,還是有許多人認爲Web應用只是算“二等公民”,給人的用戶體驗不是太好.因爲Internet是一個同步的請求/響應系統,所以瀏覽器中會整個頁面進行刷新.最初,這種簡單的請求並沒有什麼問題,如果用戶做了一兩處修改,就必須向服務器發回整個文檔,而且要重新繪製整個頁面.儘管這樣是可以的,但是由於存在這種完全刷新限制,意味着應用確實很粗糙.
這並不是說開發人員只是袖手旁觀,全然接受這種狀況.Microsoft對於交互式應用有一定了解,而且對於這種標準請求/響應模式的限制一直都不滿意,因此提出了遠程腳本(remote scripting)的概念.遠程腳本看似神奇,其實很簡單:它允許開發人員創建頁面,從而以一種異步的方式與服務器交互.例如,客戶可以從一個下拉列表中選擇狀態,這樣就會在服務器上運行一個腳本,並確定客戶的發貨花銷.更重要的是,顯示這些花銷時無需刷新整個頁面!當然,Microsoft的方案只適用於它自己的技術,而且需要Java,但有了這個進步,說明更豐富的瀏覽器應用並不是海市蜃樓.
對於同步頁面刷新問題還有其他一些解決方案.針對Microsoft的遠程腳本,Brent Ashley在創建JavaScript遠程腳本(JavaScript Remote Scripting,JSRS)時開發了一個平臺中立(獨立於平臺)的方案.JSRS依賴於一個客戶端JavaScript庫和DHTML,可以向服務器做異步的調用.與此同時,許多人利用了IFRAME標記,可以只加載頁面中的某些部分,或者向服務器做“隱藏”的調用.儘管這是一個可行的方法,而且也爲很多人所用,但它肯定不是最理想的,還有待改善.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章