久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔
站長(zhǎng)百科 | 數(shù)字化技能提升教程 數(shù)字化時(shí)代生存寶典
首頁(yè)
數(shù)字化百科
電子書(shū)
建站程序
開(kāi)發(fā)
服務(wù)器
辦公軟件
開(kāi)發(fā)教程
服務(wù)器教程
軟件使用教程
運(yùn)營(yíng)教程
熱門(mén)電子書(shū)
WordPress教程
寶塔面板教程
CSS教程
Shopify教程
導(dǎo)航
程序頻道
推廣頻道
網(wǎng)賺頻道
人物頻道
網(wǎng)站程序
網(wǎng)頁(yè)制作
云計(jì)算
服務(wù)器
CMS
論壇
網(wǎng)店
虛擬主機(jī)
cPanel
網(wǎng)址導(dǎo)航
WIKI使用導(dǎo)航
WIKI首頁(yè)
最新資訊
網(wǎng)站程序
站長(zhǎng)人物
頁(yè)面分類(lèi)
使用幫助
編輯測(cè)試
創(chuàng)建條目
網(wǎng)站地圖
站長(zhǎng)百科導(dǎo)航
站長(zhǎng)百科
主機(jī)偵探
IDCtalk云說(shuō)
跨境電商導(dǎo)航
WordPress啦
站長(zhǎng)專(zhuān)題
網(wǎng)站推廣
網(wǎng)站程序
網(wǎng)站賺錢(qián)
虛擬主機(jī)
cPanel
網(wǎng)址導(dǎo)航專(zhuān)題
云計(jì)算
微博營(yíng)銷(xiāo)
虛擬主機(jī)管理系統(tǒng)
開(kāi)放平臺(tái)
WIKI程序與應(yīng)用
美國(guó)十大主機(jī)
編輯“
Ajax-Web應(yīng)用的發(fā)展歷程
”
人物百科
|
營(yíng)銷(xiāo)百科
|
網(wǎng)賺百科
|
站長(zhǎng)工具
|
網(wǎng)站程序
|
域名主機(jī)
|
互聯(lián)網(wǎng)公司
|
分類(lèi)索引
跳轉(zhuǎn)至:
導(dǎo)航
、?
搜索
警告:
您沒(méi)有登錄。如果您做出任意編輯,您的IP地址將會(huì)公開(kāi)可見(jiàn)。如果您
登錄
或
創(chuàng)建
一個(gè)賬戶,您的編輯將歸屬于您的用戶名,且將享受其他好處。
反垃圾檢查。
不要
加入這個(gè)!
<span style="text-align:center; border:1px solid #000; float:right; padding:6px;"><strong>導(dǎo)航:</strong> [[Ajax學(xué)習(xí)教程#Ajax學(xué)習(xí)教程|上一頁(yè)]] | {{template:開(kāi)發(fā)語(yǔ)言導(dǎo)航}}</span> <div style="clear:both;"></div>最初,所有Web頁(yè)面都是靜態(tài)的,用戶請(qǐng)求一個(gè)資源,服務(wù)器再返回這個(gè)資源。什么都不動(dòng),什么都不閃。坦率地講,對(duì)于許多Web網(wǎng)站來(lái)說(shuō),這樣也是可以的,這些網(wǎng)站的Web頁(yè)面只是電子形式的文本,在一處生成,內(nèi)容固定,再發(fā)布到多處。在瀏覽器發(fā)展的最初階段,Web頁(yè)面的這種靜態(tài)性不成問(wèn)題,科學(xué)家只是使用因特網(wǎng)來(lái)交換研究論文,大學(xué)院校也只是通過(guò)因特網(wǎng)在線發(fā)布課程信息。企業(yè)界還沒(méi)有發(fā)現(xiàn)這個(gè)新“渠道”會(huì)提供什么商機(jī)。實(shí)際上,以前公司主頁(yè)顯示的信息通常很少,無(wú)非是一些聯(lián)系信息或者只是一些文檔。不過(guò)沒(méi)過(guò)多久,Web用戶就開(kāi)始有新的要求了,希望能得到更動(dòng)態(tài)的網(wǎng)上體驗(yàn)。個(gè)人計(jì)算機(jī)成為企業(yè)不可或缺的資源,而且從個(gè)人宿舍到住家辦公室開(kāi)始出現(xiàn)越來(lái)越多的計(jì)算機(jī)。隨著Windows 95的問(wèn)世,隨著人們已經(jīng)領(lǐng)教了Corel WordPerfect和Microsoft Excel豐富的功能,用戶的期望也越來(lái)越高。 <br> == CGI == 要讓W(xué)eb更為動(dòng)態(tài),第一個(gè)辦法是公共網(wǎng)關(guān)接口(Common Gateway Interface,CGI)。與靜態(tài)的Web獲取不同,使用CGI可以創(chuàng)建程序,當(dāng)用戶發(fā)出請(qǐng)求時(shí)就會(huì)執(zhí)行這個(gè)程序。假設(shè)要在Web網(wǎng)站上顯示銷(xiāo)售的商品,你可以利用CGI腳本來(lái)訪問(wèn)商品數(shù)據(jù)庫(kù),并顯示結(jié)果。通過(guò)使用簡(jiǎn)單的HTML表單和CGI腳本,可以創(chuàng)建簡(jiǎn)單的網(wǎng)上店面,這樣別人就可以通過(guò)瀏覽器來(lái)購(gòu)買(mǎi)商品。編寫(xiě)CGI腳本可以用多種語(yǔ)言,從Perl到Visual Basic都可以,這使得掌握不同編程語(yǔ)言的人都能編寫(xiě)CGI腳本。<br> 不過(guò),要?jiǎng)?chuàng)建動(dòng)態(tài)的Web頁(yè)面,CGI并不是最安全的方法。如果采用CGI,將允許別人在你的系統(tǒng)上執(zhí)行程序。大多數(shù)情況下這可能沒(méi)有問(wèn)題,但是倘若某個(gè)用戶有惡意企圖,則很可能會(huì)利用這一點(diǎn),讓系統(tǒng)運(yùn)行你本來(lái)不想運(yùn)行的程序。盡管存在這個(gè)缺陷,到如今CGI仍在使用。<br> == applet == 很顯然,CGI可以有所改進(jìn)。1995年5月,Sun公司的John Gage和Andreessen(目前在Netscape通信公司)宣布一種新的編程語(yǔ)言誕生,這就是Java。Netscape Navigator為這種新語(yǔ)言提供了支持,最初是為了支持機(jī)頂盒。(你可能原認(rèn)為最早涉足智能家居的公司是Microsoft和Sony其實(shí)不然。)就像所有革命都機(jī)緣巧合一樣,Java和因特網(wǎng)的出現(xiàn)恰到好處,在適當(dāng)?shù)臅r(shí)間、適當(dāng)?shù)牡攸c(diǎn)橫空出世,Java在Web上發(fā)布僅幾個(gè)月,就已經(jīng)有成千上萬(wàn)的人下載。由于Netscape的Navigator支持Java,動(dòng)態(tài)Web頁(yè)面掀開(kāi)了新的一頁(yè):applet時(shí)代到來(lái)了。<br> applet允許開(kāi)發(fā)人員編寫(xiě)可嵌入在Web頁(yè)面上的小應(yīng)用程序。只要用戶使用支持Java的瀏覽器,就可以在瀏覽器的Java虛擬機(jī)(Java Virtual Machine,JVM)中運(yùn)行applet。盡管applet可以做很多事情,但它也存在一些限制:通常不允許它讀寫(xiě)文件系統(tǒng),它也不能加載本地庫(kù),而且可能無(wú)法啟動(dòng)客戶端上的程序。除了這些限制外,applet是在一個(gè)沙箱安全模型中運(yùn)行的,這是為了有助于防止用戶運(yùn)行惡意代碼。<br> 對(duì)許多人來(lái)說(shuō),最初接觸Java編程語(yǔ)言就是從applet開(kāi)始的,當(dāng)時(shí)這是創(chuàng)建動(dòng)態(tài)Web應(yīng)用的一種絕好的方法。applet允許你在瀏覽器中創(chuàng)建一個(gè)胖客戶應(yīng)用,不過(guò)要在平臺(tái)的安全限制范圍內(nèi)。當(dāng)時(shí),在很多領(lǐng)域都廣泛使用了applet,但是,Web社區(qū)并沒(méi)有完全被applet“征服”[2]。胖客戶的開(kāi)發(fā)人員都很熟悉一個(gè)問(wèn)題:必須在客戶端上部署適當(dāng)?shù)腏ava版本。因?yàn)閍pplet在瀏覽器的虛擬機(jī)中運(yùn)行,所以開(kāi)發(fā)人員必須確??蛻舳税惭b了適當(dāng)版本的Java。盡管這個(gè)問(wèn)題也可以解決,但它確實(shí)妨礙了applet技術(shù)的進(jìn)一步推廣。而且如果applet寫(xiě)得不好,很可能對(duì)客戶主機(jī)造成影響,這使許多客戶對(duì)于是否采用基于applet的解決方案猶豫不定。<br> == JavaScript == 與此同時(shí),Netscape創(chuàng)建了一種腳本語(yǔ)言,并最終命名為JavaScript(建立原型時(shí)叫做Mocha,正式發(fā)布之前曾經(jīng)改名為L(zhǎng)iveWire和LiveScript,不過(guò)最后終于確定為JavaScript)。設(shè)計(jì)JavaScript是為了讓不太熟悉Java的Web設(shè)計(jì)人員和程序員能夠更輕松地開(kāi)發(fā)applet(當(dāng)然,Microsoft也推出了與JavaScript相對(duì)應(yīng)的腳本語(yǔ)言,稱(chēng)為VBScript)。Netscape請(qǐng)Brendan Eich來(lái)設(shè)計(jì)和實(shí)現(xiàn)這種新語(yǔ)言,他認(rèn)為市場(chǎng)需要的是一種動(dòng)態(tài)類(lèi)型腳本語(yǔ)言。由于缺乏開(kāi)發(fā)工具,缺少有用的錯(cuò)誤消息和調(diào)試工具,JavaScript很受非議,但盡管如此,JavaScript仍然是一種創(chuàng)建動(dòng)態(tài)Web應(yīng)用的強(qiáng)大方法。<br> 最初,創(chuàng)建JavaScript是為了幫助開(kāi)發(fā)人員動(dòng)態(tài)地修改頁(yè)面上的標(biāo)記,以便為客戶提供更豐富的體驗(yàn)。人們?cè)絹?lái)越認(rèn)識(shí)到,頁(yè)面也可以當(dāng)作對(duì)象,因此文檔對(duì)象模型(Document Object Model,DOM)應(yīng)運(yùn)而生。剛開(kāi)始,JavaScript和DOM緊密地交織在一起,但最后它們還是“分道揚(yáng)鑣”,并各自發(fā)展。DOM是頁(yè)面的一個(gè)完全面向?qū)ο蟮谋硎荆擁?yè)面可以用某種腳本語(yǔ)言(如JavaScript或VBScript)進(jìn)行修改。<br> 最后,萬(wàn)維網(wǎng)協(xié)會(huì)(World Wide Web Consortium,W3C)介入,并完成了DOM的標(biāo)準(zhǔn)化,而歐洲計(jì)算機(jī)制造商協(xié)會(huì)(ECMA)批準(zhǔn)JavaScript作為ECMAScript規(guī)約。根據(jù)這些標(biāo)準(zhǔn)編寫(xiě)的頁(yè)面和腳本,在遵循相應(yīng)原則的任何瀏覽器上都應(yīng)該有相同的外觀和表現(xiàn)。<br> 在最初的幾年中,JavaScript的發(fā)展很是坎坷,這是許多因素造成的。首先,瀏覽器支持很不一致,即使是今天,同樣的腳本在不同瀏覽器上也可能有不同的表現(xiàn);其次,客戶可以自由地把JavaScript關(guān)閉,由于存在一些已知的安全漏洞,往往鼓勵(lì)用戶把JavaScript關(guān)掉。由于開(kāi)發(fā)JavaScript很有難度(你會(huì)用alert嗎?),許多開(kāi)發(fā)人員退避三舍,有些開(kāi)發(fā)人員干脆不考慮 JavaScript,認(rèn)為這是圖形設(shè)計(jì)人員使用的一種“玩具”語(yǔ)言。許多人曾試圖使用、測(cè)試和調(diào)試復(fù)雜的JavaScript,并為此身心俱疲,所以大多數(shù)人在經(jīng)歷了這種痛苦之后,最終只能滿足于用JavaScript創(chuàng)建簡(jiǎn)單的基于表單的應(yīng)用。<br> == servlet、ASP和PHP == 盡管applet是基于Web的,但胖客戶應(yīng)用存在的許多問(wèn)題在applet上也有所體現(xiàn)。在大量使用撥號(hào)連接的年代(就算是今天,撥號(hào)連接也很普遍),要下載一個(gè)復(fù)雜applet的完整代碼,要花很多時(shí)間,用戶不能承受。開(kāi)發(fā)人員還要考慮客戶端上的Java版本,有些虛擬機(jī)還有更多的要求[3]。理想情況下只需提供靜態(tài)的Web頁(yè)面就夠了,畢竟,這正是設(shè)計(jì)因特網(wǎng)的本來(lái)目的。當(dāng)然,盡管靜態(tài)頁(yè)面是靜態(tài)的,但是如果能在服務(wù)器上動(dòng)態(tài)地生成內(nèi)容,再把靜態(tài)的內(nèi)容返回,這就太好了。<br> 在Java問(wèn)世一年左右,Sun引入了servlet?,F(xiàn)在Java代碼不用再像applet那樣在客戶端瀏覽器中運(yùn)行了,它可以在你控制的一個(gè)應(yīng)用服務(wù)器上運(yùn)行。這樣,開(kāi)發(fā)人員就能充分利用現(xiàn)有的業(yè)務(wù)應(yīng)用,而且,如果需要升級(jí)為最新的Java版本,只需要考慮服務(wù)器就行了。Java推崇“一次編寫(xiě),到處運(yùn)行”,這一點(diǎn)使得開(kāi)發(fā)人員可以選擇最先進(jìn)的應(yīng)用服務(wù)器和服務(wù)器環(huán)境,這也是這種新技術(shù)的另一個(gè)優(yōu)點(diǎn)。servlet還可以取代CGI腳本。<br> servlet向前邁出了很大一步。servlet提供了對(duì)整個(gè)Java應(yīng)用編程接口(API)的完全訪問(wèn),而且提供了一個(gè)完備的庫(kù)可以處理HTTP。不過(guò),servlet不是十全十美的。使用servlet設(shè)計(jì)界面可能很困難。在典型的servlet交互中,先要從用戶那里得到一些信息,完成某種業(yè)務(wù)邏輯,然后使用一些“打印行”創(chuàng)建HTML,為用戶顯示結(jié)果。代碼清單1-1所示的代碼就相當(dāng)常見(jiàn)。<br> == Flash == 并不是只有Microsoft和Sun在努力尋找辦法來(lái)解決動(dòng)態(tài)Web頁(yè)面問(wèn)題。1996年夏天,F(xiàn)utureWave發(fā)布了一個(gè)名叫FutureSplash Animator的產(chǎn)品。這個(gè)產(chǎn)品起源于一個(gè)基于Java的動(dòng)畫(huà)播放器,F(xiàn)utureWave很快被Macromedia兼并,Macromedia則將這個(gè)產(chǎn)品改名為Flash。<br> 利用Flash,設(shè)計(jì)人員可以創(chuàng)建令人驚嘆的動(dòng)態(tài)應(yīng)用。公司可以在Web上發(fā)布高度交互性的應(yīng)用,幾乎與胖客戶應(yīng)用相差無(wú)幾(見(jiàn)圖1-4)。不同于applet、servlet和CGI腳本,F(xiàn)lash不需要編程技巧,很容易上手。在20世紀(jì)90年代末期,掌握Flash是一個(gè)很重要的特長(zhǎng),因?yàn)樵S多老板都非常需要有這種技能的員工。不過(guò),這種易用性也是有代價(jià)的。<br> 像許多解決方案一樣,F(xiàn)lash需要客戶端軟件。盡管許多流行的操作系統(tǒng)和瀏覽器上都內(nèi)置有所需的Shockwave播放器插件,但并非普遍都有。雖然能免費(fèi)下載,但由于擔(dān)心感染病毒,使得許多用戶都拒絕安裝這個(gè)軟件。Flash應(yīng)用可能還需要大量網(wǎng)絡(luò)帶寬才能正常地工作,另外,由于沒(méi)有廣泛的寬帶連接,F(xiàn)lash的推廣受到局限(因此產(chǎn)生了“跳過(guò)本頁(yè)”之類(lèi)的鏈接)。雖然確有一些網(wǎng)站選擇建立多個(gè)版本的Web應(yīng)用,分別適應(yīng)于不同的連接速度,但是許多公司都無(wú)法承受支持兩個(gè)或更多網(wǎng)站所增加的開(kāi)發(fā)開(kāi)銷(xiāo)。<br> 總之,創(chuàng)建Flash應(yīng)用需要專(zhuān)用的軟件和瀏覽器插件。applet可以用文本編輯器編寫(xiě),而且有一個(gè)免費(fèi)的Java開(kāi)發(fā)包,F(xiàn)lash則不同,使用完整的Flash工具包需要按用戶數(shù)付費(fèi),每個(gè)用戶需要數(shù)百美元。盡管這些因素不是難以逾越的障礙,但它們確實(shí)減慢了Flash在動(dòng)態(tài)Web應(yīng)用道路上的前進(jìn)腳步。<br> == DHTML革命 == 當(dāng)Microsoft和Netscape發(fā)布其各自瀏覽器的第4版時(shí),Web開(kāi)發(fā)人員有了一個(gè)新的選擇:動(dòng)態(tài)HTML(Dynamic HTML,DHTML)。與有些人想像的不同DHTML不是一個(gè)W3C標(biāo)準(zhǔn),它更像是一種營(yíng)銷(xiāo)手段。實(shí)際上,DHTML結(jié)合了HTML、層疊樣式表(Cascading Style Sheets,CSS)、JavaScript和DOM。這些技術(shù)的結(jié)合使得開(kāi)發(fā)人員可以動(dòng)態(tài)地修改Web頁(yè)面的內(nèi)容和結(jié)構(gòu)。<br> 最初DHTML的反響很好。不過(guò),它需要的瀏覽器版本還沒(méi)有得到廣泛采用。盡管IE和Netscape都支持DHTML,但是它們的實(shí)現(xiàn)大相徑庭,這要求開(kāi)發(fā)人員必須知道他們的客戶使用什么瀏覽器。而這通常意味著需要大量代碼來(lái)檢查瀏覽器的類(lèi)型和版本,這就進(jìn)一步增加了開(kāi)發(fā)的開(kāi)銷(xiāo)。有些人對(duì)于嘗試這種方法很是遲疑,因?yàn)镈HTML還沒(méi)有一個(gè)官方的標(biāo)準(zhǔn)。不過(guò),將來(lái)新標(biāo)準(zhǔn)有可能會(huì)出現(xiàn)。<br> == XML衍生語(yǔ)言 == 20世紀(jì)90年代中期,基于SGML衍生出了W3C的可擴(kuò)展標(biāo)記語(yǔ)言(eXtensible Markup Language,XML),自此以后,XML變得極為流行。許多人把XML視為解決所有計(jì)算機(jī)開(kāi)發(fā)問(wèn)題的靈丹妙藥,以至于XML幾乎無(wú)處不在。實(shí)際上,Microsoft就已經(jīng)宣布,Office 12將支持XML文件格式。<br> 如今,我們至少有4種XML衍生語(yǔ)言可以用來(lái)創(chuàng)建Web應(yīng)用(W3C的XHTML不包括在內(nèi)):Mozilla的XUL;XAMJ,這是結(jié)合Java的一種開(kāi)源語(yǔ)言;Macromedia的MXML; Microsoft的XAML。<br> XUL:XUL(讀作“zool”)代表XML用戶界面語(yǔ)言(XML User Interface Language),由Mozilla基金會(huì)推出。流行的Firefox瀏覽器和Thunderbird郵件客戶端都是用XUL編寫(xiě)的。利用XUL,開(kāi)發(fā)人員能構(gòu)建功能很豐富的應(yīng)用,這個(gè)應(yīng)用可以與因特網(wǎng)連接,也可以不與因特網(wǎng)連接。為了方便那些熟悉DHTML的開(kāi)發(fā)人員使用,XUL設(shè)計(jì)為可以跨平臺(tái)支持諸如窗口和按鈕等標(biāo)準(zhǔn)界面部件。雖然XUL本身不是標(biāo)準(zhǔn),但它是基于各種標(biāo)準(zhǔn)的,如HTML 4.0、CSS、DOM、XML和ECMAScript等等。XUL應(yīng)用可以在瀏覽器上運(yùn)行,也可以安裝在客戶端主機(jī)上。<br> 當(dāng)然,XUL也不是沒(méi)有缺點(diǎn)。它需要Gecko引擎,而且目前IE還沒(méi)有相應(yīng)的插件。盡管Firefox在瀏覽器市場(chǎng)中已經(jīng)有了一定的份額,但少了IE的支持還是影響很大,大多數(shù)應(yīng)用都無(wú)法使用XUL。目前開(kāi)展的很多項(xiàng)目都是力圖在多個(gè)平臺(tái)上使用XUL,包括Eclipse。<br> XAML:XAML(讀作“zammel”)是Microsoft即將推出的操作系統(tǒng)(名為Windows Vista)的一個(gè)組件。XAML是可擴(kuò)展應(yīng)用標(biāo)記語(yǔ)言(eXtensible Application Markup Language)的縮寫(xiě),它為使用Vista創(chuàng)建用戶界面定義了標(biāo)準(zhǔn)。與HTML類(lèi)似,XAML使用標(biāo)記來(lái)創(chuàng)建標(biāo)準(zhǔn)元素,如按鈕和文本框等。XAML建立在Microsoft的 .NET平臺(tái)之上,而且可以編譯為 .NET類(lèi)。<br> XAML的局限應(yīng)當(dāng)很清楚。作為Microsoft的產(chǎn)品,它要求必須使用Microsoft的操作系統(tǒng)。多數(shù)情況下特別是在大公司中,這可能不成問(wèn)題,但是有些小公司使用的不是Microsoft的操作系統(tǒng),總不能削足適履吧,就像是沒(méi)有哪家公司會(huì)因?yàn)橘I(mǎi)家沒(méi)有開(kāi)某種牌子的車(chē)來(lái)就把他拒之門(mén)外。Vista交付的日期一再推遲,與此同時(shí)XAML也有了很大變化,不再只是一個(gè)播放器。據(jù)說(shuō),在未來(lái)幾年內(nèi),我們可能會(huì)看到一個(gè)全新的XAML。 <br> MXML:Macromedia創(chuàng)建了MXML,作為與其Flex技術(shù)一同使用的一種標(biāo)記語(yǔ)言。MXML是最佳體驗(yàn)標(biāo)記語(yǔ)言(Maximum eXperience Markup Language)的縮寫(xiě),它與HTML很相似,可以以聲明的方式來(lái)設(shè)計(jì)界面。與XUL和XAML類(lèi)似,MXML提供了更豐富的界面組件,如DataGrid和TabNavigator,利用這些組件可以創(chuàng)建功能豐富的因特網(wǎng)應(yīng)用。不過(guò),MXML不能獨(dú)立使用,它依賴(lài)于Flex和ActionScript編程語(yǔ)言來(lái)編寫(xiě)業(yè)務(wù)邏輯。<br> MXML與Flash有同樣的一些限制。它是專(zhuān)用的,而且依賴(lài)于價(jià)格昂貴的開(kāi)發(fā)和部署環(huán)境。盡管將來(lái).NET可能會(huì)對(duì)MXML提供支持,但現(xiàn)在Flex只能在J2EE應(yīng)用服務(wù)器上運(yùn)行,如Tomcat和IBM的WebSphere,這就進(jìn)一步限制了MXML的廣泛采用。<br> XAMJ:讓人欣喜的是,開(kāi)源社區(qū)又向有關(guān)界面設(shè)計(jì)的XML衍生語(yǔ)言領(lǐng)域增加了新的成員。XAMJ作為另一種跨平臺(tái)的語(yǔ)言,為Web應(yīng)用開(kāi)發(fā)人員又提供了一個(gè)工具。這種衍生語(yǔ)言基于Java,而Java是當(dāng)前最流行的面向?qū)ο笳Z(yǔ)言之一,XAMJ也因此獲得了面向?qū)ο笳Z(yǔ)言的強(qiáng)大功能。XAMJ實(shí)際上想要替代基于XAML或HTML的應(yīng)用,力圖尋找一種更為安全的方法,既不依賴(lài)于某種特定的框架,也不需要高速的因特網(wǎng)連接。XAMJ是一種編譯型語(yǔ)言,建立在“clientlet”(小客戶端)體系結(jié)構(gòu)之上,盡管基于XAMJ的程序也可以是獨(dú)立的應(yīng)用,但通常都是基于Web的應(yīng)用。在撰寫(xiě)本書(shū)時(shí),XAMJ還太新,我們還沒(méi)有聽(tīng)到太多批評(píng)的聲音。不過(guò),批評(píng)是肯定會(huì)有的,讓我們拭目以待。<br> 當(dāng)談到“以X開(kāi)頭的東西”時(shí),別忘了W3C XForms規(guī)約。XForms設(shè)計(jì)為支持更豐富的用戶界面,而且能夠?qū)?shù)據(jù)與表示解耦合。毋庸置疑,XForms數(shù)據(jù)是XML,這樣你就能使用現(xiàn)有的XML技術(shù),如XPath和XML Schema。標(biāo)準(zhǔn)HTML能做的,XForms都能做,而且XForms還有更多功能,包括動(dòng)態(tài)檢查域值、與Web服務(wù)集成等等。不同于其他的許多W3C規(guī)約,XForms不需要新的瀏覽器,你可以使用現(xiàn)在已有的許多瀏覽器去實(shí)現(xiàn)。與大多數(shù)XML衍生語(yǔ)言一樣,XForms是一種全新的方法,所以它要得到采納尚需時(shí)日。<br> == 基本問(wèn)題 == 有了以上了解,你怎么想?即使是要求最苛刻的客戶應(yīng)用,也已經(jīng)把Web作為首選平臺(tái)。很顯然,基于Web的應(yīng)用很容易部署,這種低門(mén)檻正是Web應(yīng)用最耀眼的地方。由于瀏覽器無(wú)處不在,而且無(wú)需下載和安裝新的軟件,用戶利用基于瀏覽器的客戶端就能很輕松地嘗試新的應(yīng)用。用戶只需點(diǎn)擊一個(gè)鏈接就能運(yùn)行你的應(yīng)用程序,而不用先下載幾兆比特的安裝程序才行?;跒g覽器的應(yīng)用也不考慮操作系統(tǒng)是什么,也就是說(shuō),不僅使用不同操作系統(tǒng)(如Linux和Mac OS X)的人能運(yùn)行你的應(yīng)用程序,而且你也不必考慮針對(duì)不同的操作系統(tǒng)開(kāi)發(fā)和維護(hù)多個(gè)安裝包。<br> 既然基于Web的應(yīng)用是前所未有的好東西,那我們?yōu)槭裁催€要寫(xiě)這本書(shū)?如果回頭看看因特網(wǎng)的起源就可以知道,最初因特網(wǎng)實(shí)際上就是為了科學(xué)家們和學(xué)術(shù)機(jī)構(gòu)間交換文章和研究成果,這是一種簡(jiǎn)單的請(qǐng)求/響應(yīng)模式。那時(shí)不需要會(huì)話狀態(tài),也不需要購(gòu)物車(chē),人們只是在交換文檔。但現(xiàn)在你有很多辦法來(lái)創(chuàng)建動(dòng)態(tài)的Web應(yīng)用,如果想讓?xiě)?yīng)用真正深入人心,贏得大量的用戶,就必須在瀏覽器上大做文章,這說(shuō)明,因特網(wǎng)以請(qǐng)求/響應(yīng)模式作為基礎(chǔ),由此帶來(lái)的同步性對(duì)你造成了妨礙。<br> 與Microsoft Word或Intuit Quicken之類(lèi)的胖客戶應(yīng)用相比,Web模型當(dāng)然只能根據(jù)一般用戶需要做折中考慮。不過(guò),由于Web應(yīng)用很容易部署,而且瀏覽器的發(fā)展相當(dāng)迅速,這意味著大多數(shù)用戶都已經(jīng)學(xué)會(huì)了適應(yīng)。但是,還是有許多人認(rèn)為Web應(yīng)用只能算“二等公民”,給人的用戶體驗(yàn)不是太好。因?yàn)橐蛱鼐W(wǎng)是一個(gè)同步的請(qǐng)求/響應(yīng)系統(tǒng),所以瀏覽器中的整個(gè)頁(yè)面會(huì)進(jìn)行刷新。最初,這種簡(jiǎn)單的請(qǐng)求并沒(méi)有什么問(wèn)題。如果用戶做了一兩處修改,就必須向服務(wù)器發(fā)回整個(gè)文檔,而且要重新繪制整個(gè)頁(yè)面。盡管這樣是可行的,但是這種完全刷新的局限,意味著應(yīng)用確實(shí)還很粗糙。<br> 這并不是說(shuō)開(kāi)發(fā)人員只是袖手旁觀,全然接受這種狀況。Microsoft對(duì)于交互式應(yīng)用有一定了解,而且對(duì)于這種標(biāo)準(zhǔn)請(qǐng)求/響應(yīng)模式的限制一直都不滿意,因此提出了遠(yuǎn)程腳本(remote scripting)的概念。遠(yuǎn)程腳本看似神奇,其實(shí)很簡(jiǎn)單:它允許開(kāi)發(fā)人員創(chuàng)建以異步方式與服務(wù)器交互的頁(yè)面。例如,顧客可以從下拉列表中選擇狀態(tài),這樣就會(huì)在服務(wù)器上運(yùn)行一個(gè)腳本,計(jì)算顧客的運(yùn)費(fèi)。更重要的是,顯示這些運(yùn)費(fèi)時(shí)無(wú)需刷新整個(gè)頁(yè)面!當(dāng)然,Microsoft的方案只適用于它自己的技術(shù),而且需要Java,但有了這個(gè)進(jìn)步,說(shuō)明更豐富的瀏覽器應(yīng)用并不是海市蜃樓。<br> 對(duì)于同步頁(yè)面刷新問(wèn)題還有其他一些解決方案。針對(duì)Microsoft的遠(yuǎn)程腳本,Brent Ashley在創(chuàng)建JavaScript遠(yuǎn)程腳本(JavaScript Remote Scripting,JSRS)時(shí)開(kāi)發(fā)了一個(gè)平臺(tái)中立(獨(dú)立于平臺(tái))的方案。JSRS依賴(lài)于一個(gè)客戶端JavaScript庫(kù)和DHTML,可以向服務(wù)器做異步的調(diào)用。與此同時(shí),許多人利用了IFRAME標(biāo)記,可以只加載頁(yè)面中的某些部分,或者向服務(wù)器做“隱藏”的調(diào)用。盡管這是一個(gè)可行的方法,而且也為很多人所用,但它肯定不是最理想的,還有待改善。<br> == Ajax == 終于談到這里了:客戶希望得到一個(gè)功能更完備的應(yīng)用,而開(kāi)發(fā)人員想避開(kāi)繁瑣的部署工作,不想把可執(zhí)行文件逐個(gè)地部署到數(shù)以千計(jì)的工作站上。我們已經(jīng)做過(guò)很多嘗試,但是任何方法都不像它原來(lái)標(biāo)榜的那么完美。不過(guò),最近一個(gè)極其強(qiáng)大的工具橫空出世了。<br> 是的,我們又有了一個(gè)新的選擇,新的工具,可以創(chuàng)建的確豐富的基于瀏覽器的應(yīng)用。這就是Ajax。Ajax不只是一個(gè)特定的技術(shù),更應(yīng)算是一種技巧,不過(guò)前面提到的JavaScript是其主要組件。我們知道,你可能會(huì)說(shuō)“JavaScript根本不值一提”,但是由于Ajax的出現(xiàn),人們對(duì)這種語(yǔ)言又有了新的興趣,應(yīng)用和測(cè)試框架再加上更優(yōu)秀的工具支持,減輕了開(kāi)發(fā)人員肩頭的重?fù)?dān)。隨著Atlas的引入,Microsoft對(duì)Ajax投入了大力支持,而名聲不太好的Rails Web框架也預(yù)置了充分的Ajax支持。在Java世界中,Sun已經(jīng)在其BluePrints Solutions Catalog中增加了許多Ajax組件。<br> 坦率地講,Ajax并不是什么新鮮玩藝。實(shí)際上,與這個(gè)詞相關(guān)的“最新”術(shù)語(yǔ)就是XMLHttpRequest對(duì)象(XHR),它早在IE 5(于1999年春天發(fā)布)中就已經(jīng)出現(xiàn)了,是作為 Active X控件露面的。不過(guò),最近出現(xiàn)的新現(xiàn)象是瀏覽器的支持。原先,XHR對(duì)象只在IE中得到支持(因此限制了它的使用),但是從Mozilla 1.0和Safari 1.2開(kāi)始,對(duì)XHR對(duì)象的支持開(kāi)始普及。這個(gè)很少使用的對(duì)象和相關(guān)的基本概念甚至已經(jīng)出現(xiàn)在W3C標(biāo)準(zhǔn)中:DOM Level 3 加載和保存規(guī)約(DOM Level 3 Load and Save Specification)。現(xiàn)在,特別是隨著Google Maps、Google Suggest、Gmail、Flickr、Netflix和A9等應(yīng)用變得越來(lái)越炙手可熱,XHR也已經(jīng)成為事實(shí)上的標(biāo)準(zhǔn)。<br> 與前面幾頁(yè)提到的方法不同,Ajax在大多數(shù)現(xiàn)代瀏覽器中都能使用,而且不需要任何專(zhuān)門(mén)的軟件或硬件。實(shí)際上,這種方法的一大優(yōu)勢(shì)就是開(kāi)發(fā)人員不需要學(xué)習(xí)一種新的語(yǔ)言,也不必完全丟掉他們?cè)日莆盏姆?wù)器端技術(shù)。Ajax是一種客戶端方法,可以與J2EE、.NET、PHP、Ruby和CGI腳本交互,它并不關(guān)心服務(wù)器是什么。盡管存在一些很小的安全限制,你還是可以現(xiàn)在就開(kāi)始使用Ajax,而且能充分利用你原有的知識(shí)。<br> 你可能會(huì)問(wèn):“誰(shuí)在使用Ajax?”前面已經(jīng)提到,Google顯然是最早采用Ajax的公司之一,而且已經(jīng)用在很多技術(shù)上,隨便說(shuō)幾個(gè)應(yīng)用,如Google Maps、Google Suggest和Gmail。Yahoo!也開(kāi)始引入Ajax控件,另外Amazon提供了一個(gè)簡(jiǎn)潔的搜索工具,其中大量使用了這個(gè)技術(shù),例如,在鉆石的某一方面上移動(dòng)滑塊,這會(huì)帶來(lái)動(dòng)態(tài)更新的結(jié)果(見(jiàn)圖1-5)。并不是每次改變你的查詢標(biāo)準(zhǔn)時(shí)都會(huì)更新頁(yè)面,而是在移動(dòng)滑塊時(shí)就會(huì)查詢服務(wù)器,從而更快、更容易地縮小你的選擇范圍。<br> Netflix是一家很有名的DVD租借公司,它也使用了Ajax。當(dāng)用戶瀏覽影片時(shí),可以得到更詳細(xì)的信息。當(dāng)顧客把鼠標(biāo)放在一個(gè)影片的圖片上時(shí),這個(gè)影片的ID就會(huì)發(fā)送到中心服務(wù)器,然后會(huì)出現(xiàn)一個(gè)“氣泡”,提供這個(gè)影片的更多細(xì)節(jié)(見(jiàn)圖1-6)。同樣,頁(yè)面并不會(huì)刷新,每個(gè)影片的詳細(xì)信息并不是放在隱藏的表單域中。利用這種方法,Netflix可以提供影片的更多信息,而不會(huì)把頁(yè)面弄亂。顧客瀏覽起來(lái)也更容易,他們不必點(diǎn)擊影片,看完影片詳細(xì)信息后再點(diǎn)擊回到影片列表頁(yè)面;他們只需把鼠標(biāo)停在影片上,就這么簡(jiǎn)單!我們想要強(qiáng)調(diào)的是,Ajax并不限于.com之類(lèi)的網(wǎng)站使用,普通公司的開(kāi)發(fā)人員也開(kāi)始涉足這個(gè)技術(shù),有些人已經(jīng)在使用Ajax來(lái)改善原來(lái)很丑陋的驗(yàn)證方案,或者用于動(dòng)態(tài)地獲取數(shù)據(jù)了。<br> == Netflix的瀏覽頁(yè)面特性 == 關(guān)鍵在于,因特網(wǎng)默認(rèn)的請(qǐng)求/響應(yīng)模式有了重大轉(zhuǎn)變,這正是Ajax的核心所在,盡管這并非全新的內(nèi)容。Web應(yīng)用開(kāi)發(fā)人員現(xiàn)在可以自由地與服務(wù)器異步交互,這說(shuō)明他們可以完成許多原本只能在胖客戶上完成的任務(wù)。例如,當(dāng)用戶輸入郵政編碼時(shí),可以驗(yàn)證它是否正確,然后自動(dòng)用相應(yīng)的城市名和州名填充到表單中的其他部分;或者,當(dāng)用戶選擇美國(guó)時(shí),可以引入美國(guó)各個(gè)州的一個(gè)下拉列表。以前也可以用其他方式模擬這些工作,但是使用Ajax的話,這些工作會(huì)更加簡(jiǎn)單。<br> 那么,是誰(shuí)發(fā)明了Ajax?要找出真正的源頭,總免不了一場(chǎng)爭(zhēng)論。不過(guò)有一點(diǎn)是確定的,2005年2月,Adaptive Path的Jesse James Garrett最早創(chuàng)造了這個(gè)詞。在他的文章Ajax: A New Approach to Web Applications(Ajax:Web應(yīng)用的一種新方法)中,Garrett討論了如何消除胖客戶(或桌面)應(yīng)用與瘦客戶(或Web)應(yīng)用之間的界限。當(dāng)然,當(dāng)Google在Google Labs發(fā)布Google Maps和Google Suggest時(shí),這個(gè)技術(shù)才真正為人所認(rèn)識(shí),而且此前已經(jīng)有許多這方面的文章了。但確實(shí)是Garrett最早提出了這個(gè)好名字,否則我們就得啰啰嗦嗦地說(shuō)上一大堆:異步(Asynchronous)、XMLHttpRequest、JavaScript、CSS、DOM等等。盡管原來(lái)把Ajax認(rèn)為是Asynchronous JavaScript + XML(異步JavaScript + XML)的縮寫(xiě),但如今,這個(gè)詞的覆蓋面有所擴(kuò)展,把允許瀏覽器與服務(wù)器通信而無(wú)需刷新當(dāng)前頁(yè)面的技術(shù)都涵蓋在內(nèi)。<br> 你可能會(huì)說(shuō):“哦,那有什么大不了的?”這么說(shuō)吧,使用XHR而且與服務(wù)器異步通信,就能創(chuàng)建更加動(dòng)態(tài)的Web應(yīng)用。例如,假設(shè)你有一個(gè)下拉列表,它是根據(jù)另外一個(gè)域或下拉列表的輸入來(lái)填寫(xiě)的。在正常情況下,必須在加載第一個(gè)頁(yè)面時(shí)把所有數(shù)據(jù)都發(fā)送給客戶端,然后使用JavaScript根據(jù)輸入來(lái)填寫(xiě)下拉列表。這么做并不困難,但是會(huì)讓頁(yè)面變得很臃腫,取決于這個(gè)下拉列表到底有多“動(dòng)態(tài)”,頁(yè)面有可能膨脹得過(guò)大,從而出現(xiàn)問(wèn)題。利用Ajax,當(dāng)作為觸發(fā)源的域有變化,或者失去了輸入焦點(diǎn),就可以向服務(wù)器發(fā)一個(gè)簡(jiǎn)單的請(qǐng)求,只要求得到更新下拉列表所需的部分信息即可。<br> 來(lái)單獨(dú)考慮一下驗(yàn)證。你寫(xiě)過(guò)多少次JavaScript驗(yàn)證邏輯?用Java或C#編寫(xiě)驗(yàn)證邏輯可能很簡(jiǎn)單,但是由于JavaScript缺乏很好的調(diào)試工具,再加上它是一種弱類(lèi)型語(yǔ)言,所以用JavaScript編寫(xiě)驗(yàn)證邏輯實(shí)在是一件讓人頭疼的事情,而且很容易出錯(cuò)。服務(wù)器上還很有可能重復(fù)這些客戶端驗(yàn)證規(guī)則。使用XHR,可以對(duì)服務(wù)器做一個(gè)調(diào)用,觸發(fā)某一組驗(yàn)證規(guī)則。這些規(guī)則可能比你用JavaScript編寫(xiě)的任何規(guī)則都更豐富、更復(fù)雜,而且你還能得到功能強(qiáng)大的調(diào)試工具和集成開(kāi)發(fā)環(huán)境(IDE)。<br> 你現(xiàn)在可能又會(huì)說(shuō):“這些事情我早已經(jīng)用IFRAME或隱藏框架做到了?!蔽覀兩踔吝€使用這種技術(shù)來(lái)提交或刷新過(guò)頁(yè)面的一部分,而不是整個(gè)瀏覽器(頁(yè)面)。不能不承認(rèn),這確實(shí)可行。不過(guò),許多人認(rèn)為這種方法只是一種修補(bǔ)手段,以彌補(bǔ)XHR原來(lái)缺乏對(duì)跨瀏覽器的支持。作為Ajax的核心,XHR對(duì)象設(shè)計(jì)為允許從服務(wù)器異步地獲取任意的數(shù)據(jù)。<br> 我們討論過(guò),傳統(tǒng)的Web應(yīng)用遵循一種請(qǐng)求/響應(yīng)模式。如果沒(méi)有Ajax,對(duì)于每個(gè)請(qǐng)求都會(huì)重新加載整個(gè)頁(yè)面(或者利用IFRAME,則是部分頁(yè)面)。原來(lái)查看的頁(yè)面會(huì)放到瀏覽器的歷史棧中(不過(guò),如果使用了IFRAME,點(diǎn)擊“后退”按鈕不一定能得到用戶期望的歷史頁(yè)面)。與此不同,用XHR做出的請(qǐng)求不會(huì)記錄在瀏覽器的歷史中。如果你的用戶習(xí)慣于使用“后退”按鈕在Web應(yīng)用中進(jìn)行導(dǎo)航,就可能會(huì)產(chǎn)生問(wèn)題。<br> [[category:Ajax]]
摘要:
請(qǐng)注意,您對(duì)站長(zhǎng)百科的所有貢獻(xiàn)都可能被其他貢獻(xiàn)者編輯,修改或刪除。如果您不希望您的文字被任意修改和再散布,請(qǐng)不要提交。
您同時(shí)也要向我們保證您所提交的內(nèi)容是您自己所作,或得自一個(gè)不受版權(quán)保護(hù)或相似自由的來(lái)源(參閱
Wordpress-mediawiki:版權(quán)
的細(xì)節(jié))。
未經(jīng)許可,請(qǐng)勿提交受版權(quán)保護(hù)的作品!
取消
編輯幫助
(在新窗口中打開(kāi))
本頁(yè)使用的模板:
模板:開(kāi)發(fā)語(yǔ)言導(dǎo)航
(
編輯
)
取自“
http://kktzf.com.cn/wiki/Ajax-Web應(yīng)用的發(fā)展歷程
”