1.1 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。
1.2 瀏覽器歷史
提到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時,它已經成為使用最廣的瀏覽器。
1.3 Web應用的發展歷程
最初,所有Web頁面都是靜態的;用戶請求一個資源,服務再返回這個資源。什么都不動,什么都不閃。坦率地講,對于許多Web網站來說,這樣也是可以的,這些網站的Web頁面只是電子形式的文本,在一處生成,內容固定,再發布到多處。在瀏覽器發展的最初階段,Web頁面的這種靜態性不成問題;科學家只是使用Internet來交換研究論文,大學院校也只是通過Internet在線發布課程信息。企業界還沒有發現這個新“渠道”會提供什么商機。實際上,剛開始時,公司主頁顯示的信息通常很少,無非是一些聯系信息,或者只是一些文檔。不過,沒過多久,Web用戶就開始有新的要求,希望能得到更動態的網上體驗。個人計算機成為企業的強勁后盾,從個人宿舍到住家辦公室開始出現越來越多的計算機。隨著Windows 95的問世,人們已經領教了Corel Word-Perfect和Microsoft Excel豐富的功能,所以用戶的期望也越來越高。
1.3.1 CGI
要讓Web更為動態,第一個辦法是通用網關接口(Common Gateway Interface,CGI)。與靜態的Web獲取不同,可以使用CGI創建程序,用戶發出請求時就會執行這個程序。假設你想在Web網站上顯示銷售的商品,可以利用一個CGI腳本來訪問商品數據庫,并顯示結果。通過使用簡單的HTML表單和CGI腳本,可以創建簡單的前臺應用,這樣別人就可以通過瀏覽器來購買你的商品??梢杂枚喾N語言編寫CGI腳本,從Perl到Visual Basic都可以,這使得掌握不同語言的人都能編寫CGI腳本。不過,要創建動態的Web頁面,CGI并不是最安全的方法。如果采用CGI,任何人都可以在你的系統上執行程序。大多數情況下這可能沒有問題,但是倘若一個用戶有惡意企圖,很可能利用這一點,讓你的系統運行你本來不想運行的程序。盡管存在這個缺陷,但如今CGI仍在使用。
1.3.2 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在瀏覽器的虛擬機中運行,所以開發人員必須確??蛻舳税惭b了適當版本的Java。盡管這個問題并非無法解決,但確實妨礙了applet技術的進一步推廣。而且如果applet寫得不好,很可能對客戶主機造成影響,這使許多客戶對于是否采用基于applet的解決方案猶豫不定。
1.3.3 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,并為此身心俱疲,所以大多數人在經歷了這種痛苦之后,最終還是滿足于創建簡單的基于表單的應用。
1.3.4 Servlet、ASP和PHP . . .哦,1.3.5 太多了!
盡管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,為用戶顯示結果。代碼清單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();
servlet不僅容易出錯,很難生成可視化顯示,而且還無法做到人盡其才。一般地,編寫服務器端代碼的人往往是軟件開發人員,他們只是對算法和編譯器很精通,但不是能設計公司精美網站的圖形設計人員。業務開發人員不僅要編寫業務邏輯,還必須考慮怎么創建一致的設計。因此,很有必要將表示與業務邏輯分離。我們需要的就是JavaServer Pages(JSP)。
在某種程度上,JSP是對 Microsoft的 Active Server Pages (ASP)做出的一個回應。Microsoft從Sun在Servlet規范上所犯的錯誤汲取了教訓,并創建了ASP來簡化動態頁面的開發。 Microsoft增加了很棒的工具支持,并與其Web服務器緊密集成。JSP和ASP都設計為用于將業務處理與表示布局相分離,從這個意義上講,二者是相似的。雖然存在一些技術上的差別(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>
當然,Microsoft和Sun并沒有壟斷服務器端解決方案。還有許多其他的方案,從PHP到ColdFusion等等在這個領域都有一席之地。有些開發人員喜歡新奇的工具;還有一些則傾向于更簡單的語言。在目前來看,所有這些解決方案完成的任務都是一樣的,它們都是要動態生成HTML。在服務器端生成內容可以解決發布問題;不過,與使用胖客戶或applet所做的工作相比,用戶從原始HTML得到的體驗就太過單調和蒼白了。下面幾節將介紹幾種力圖提供更豐富用戶體驗的解決方案。
1.3.6 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應用道路上的前進腳步。
1.3.7 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還沒有一個官方的標準。不過,將來新標準有可能會出現。
1.3.8 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是一種全新的方法,所以對于這種方法何時得到采納,最好要耐心一些。