欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

手持終端框架系統(tǒng)的制作方法

文檔序號(hào):7862092閱讀:1165來源:國知局

專利名稱::手持終端框架系統(tǒng)的制作方法
技術(shù)領(lǐng)域
:本發(fā)明涉及在個(gè)人電子設(shè)備中的數(shù)據(jù)傳送和變換。更特別地,本發(fā)明涉及使用適用協(xié)議和服務(wù)器代理終端檢索和傳輸在網(wǎng)絡(luò)上獲得的數(shù)據(jù)給個(gè)人設(shè)備。
背景技術(shù)
:在如今技術(shù)推動(dòng)的社會(huì)中個(gè)人數(shù)據(jù)設(shè)備已經(jīng)成為很普通的輔助設(shè)備。當(dāng)PDAs、中文傳呼機(jī)、手機(jī)和個(gè)人計(jì)算機(jī)第一次進(jìn)入市場時(shí),每一設(shè)備都具有其自己的定制體系結(jié)構(gòu)。最初的系統(tǒng)為大量的通信和操作系統(tǒng)標(biāo)準(zhǔn)鋪平了道路。然而,各種設(shè)備在軟件行業(yè)方面產(chǎn)生了很多問題。程序設(shè)計(jì)員必須將它們的程序載入每一設(shè)備的操作系統(tǒng)和顯示性能。例如,使用PalmOS的PDA可能具有160×160象素的單色顯示屏,而使用WinCE的PDA具有180×240的彩色顯示屏。當(dāng)程序設(shè)計(jì)員為其程序設(shè)計(jì)出用戶界面時(shí)必須考慮每一設(shè)備的限制。例如,各個(gè)設(shè)備之間的不同圖形處理能力使得很難在不同的平臺(tái)上實(shí)現(xiàn)相同的GUI外觀和感覺。程序設(shè)計(jì)員必須考慮到一些可以容易地在一個(gè)設(shè)備上顯示但不能在另一設(shè)備上顯示或者不能在兩個(gè)設(shè)備之間看到同一內(nèi)容的方面。CPU的速度也會(huì)影響應(yīng)用程序。必須為每一平臺(tái)調(diào)整應(yīng)用程序的效率,從而使得程序可以運(yùn)行。用戶不希望在它們的個(gè)人數(shù)據(jù)設(shè)備上使用很慢的程序。此外,個(gè)人設(shè)備在可利用的內(nèi)存方面具有很大的差異,而不論客戶軟件是否存儲(chǔ)在ROM中。RAM很少將難以管理數(shù)據(jù)。如果對(duì)于通常的消費(fèi)者是可能的話,當(dāng)使客戶軟件存儲(chǔ)在ROM中會(huì)使得難以升級(jí)。所有這些限制都給程序設(shè)計(jì)員提出了很多問題。設(shè)計(jì)多個(gè)不同版本的程序來支持不同的個(gè)人數(shù)據(jù)設(shè)備的結(jié)果是其在支持不同的編碼基數(shù)方面會(huì)產(chǎn)生大量令人頭痛的事。必須調(diào)試、更新和支持每一版本的代碼。當(dāng)數(shù)據(jù)包協(xié)議或操作系統(tǒng)改變時(shí),也必須對(duì)該系統(tǒng)改變編碼基數(shù)。一個(gè)實(shí)例是微軟公司的.NET框架,其試圖在服務(wù)器和終端中將XML網(wǎng)頁服務(wù)鏈接在一起。該.NET框架要求所有的服務(wù)器和終端使用XML通信并在XML中傳遞信息。其結(jié)果是得到緊密構(gòu)成的XML服務(wù)網(wǎng)絡(luò)。然而,該方法要求終端設(shè)備處理由用戶請(qǐng)求并顯示的各個(gè)方面的數(shù)據(jù)。該方法還要求為每一不同的平臺(tái)提供和支持應(yīng)用程序。此外,當(dāng)應(yīng)用程序的復(fù)雜程度增加時(shí),在客戶系統(tǒng)上的處理命令要求更大功率的處理器。有利的是提供一種手持終端框架系統(tǒng),其提供一種容易從主機(jī)系統(tǒng)更新并減少在終端系統(tǒng)上的處理命令的終端框架。還有利的是提供一種手持終端框架系統(tǒng),其提供了容易在多個(gè)終端平臺(tái)上支持的程序語言。
發(fā)明內(nèi)容本發(fā)明提供一種手持終端框架系統(tǒng)。該系統(tǒng)提供一種容易從主機(jī)系統(tǒng)更新并減少在終端系統(tǒng)上的處理命令的終端框架。此外,本發(fā)明提供一種容易在多個(gè)終端平臺(tái)上支持的程序語言。本發(fā)明的一個(gè)優(yōu)選實(shí)施例提供一種為網(wǎng)絡(luò)得到的信息提供客戶請(qǐng)求服務(wù)的服務(wù)器代理終端。該服務(wù)器代理終端確定最接近的服務(wù)器,并在因特網(wǎng)和/或內(nèi)部網(wǎng)上提供被請(qǐng)求信息和發(fā)送信息請(qǐng)求給該服務(wù)器。信息請(qǐng)求的服務(wù)器響應(yīng)由服務(wù)器代理終端接收。服務(wù)器代理終端將響應(yīng)信息分成合適的數(shù)據(jù)組件。將數(shù)據(jù)組件發(fā)送給合適的客戶。將表示層和邏輯組件臨時(shí)存儲(chǔ)在終端上的一個(gè)單級(jí)后臺(tái)緩存。終端使用服務(wù)器代理終端校驗(yàn)對(duì)于即將進(jìn)行的特殊任務(wù)該終端使用最新版本的表示層和邏輯組件。如果終端沒有使用最新的版本,那么它請(qǐng)求從服務(wù)器代理終端進(jìn)行更新。終端繼續(xù)使用當(dāng)前存在于單級(jí)后臺(tái)緩存的表示層和邏輯組件,以便提供當(dāng)前的用戶請(qǐng)求服務(wù)。用戶利用隨后使用的終端檢索由服務(wù)器代理終端發(fā)送并存儲(chǔ)在單級(jí)后臺(tái)緩存中的任何更新。使用服務(wù)器代理終端保存終端的狀態(tài)使得例如當(dāng)用戶從有線連接改變?yōu)闊o線連接時(shí)終端不會(huì)停止。用戶將不必重新驗(yàn)證終端和服務(wù)器代理終端,并且只要沒有中斷用戶會(huì)話就將持續(xù)。本發(fā)明包括一腳本語言,該腳本語言通過允許主機(jī)在任何時(shí)刻修改終端行為或添加新的特征從而賦予終端極大的靈活性。在終端運(yùn)輸后能夠?qū)⒃撎卣骷渲迷诜?wù)器代理終端的各行程中。利用服務(wù)器代理終端將終端腳本更新發(fā)送到終端。結(jié)合附圖通過下面詳細(xì)的描述本發(fā)明的其它方面和優(yōu)點(diǎn)將變得很明顯,該描述通過實(shí)例的方式示出了本發(fā)明的原理。圖1是根據(jù)本發(fā)明在不同的通信介質(zhì)上與終端設(shè)備通信的本發(fā)明的服務(wù)器代理終端的示意性方框圖;圖2是根據(jù)本發(fā)明包含股票行市響應(yīng)的流對(duì)象的示意圖;圖3是根據(jù)本發(fā)明的按鈕對(duì)象的示意圖;圖4是示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的五個(gè)層的示意性方框圖;圖5是根據(jù)本發(fā)明的終端設(shè)備和服務(wù)器代理的優(yōu)選實(shí)施例的連接透視圖的示意性方框圖;圖6是根據(jù)本發(fā)明表示對(duì)象來源的示例性分級(jí)對(duì)象樹;圖7是根據(jù)本發(fā)明的表格對(duì)象的示意圖;圖8根據(jù)本發(fā)明的按鈕對(duì)象的示意圖;圖9是根據(jù)本發(fā)明包含按鈕對(duì)象的表格對(duì)象的示意圖;圖10是根據(jù)本發(fā)明包含股票行市響應(yīng)的流對(duì)象的示意圖;圖11根據(jù)本發(fā)明的根對(duì)象的示意圖;圖12是根據(jù)本發(fā)明的包含數(shù)據(jù)和邏輯對(duì)象的表格對(duì)象的示意圖。具體實(shí)施例方式本發(fā)明包含一種手持終端框架系統(tǒng)。根據(jù)本發(fā)明的系統(tǒng)提供了一個(gè)容易從主機(jī)系統(tǒng)更新并減少在終端系統(tǒng)上的處理命令的終端框。此外,本發(fā)明提供一種容易在多個(gè)終端平臺(tái)上支持的程序語言。本發(fā)明提供一種腳本語言和終端引擎,該終端引擎可賦予主機(jī)靈活性,從而動(dòng)態(tài)改變終端系統(tǒng)的行為和外觀。該終端引擎容易適用于不同的終端結(jié)構(gòu)和用戶界面。主機(jī)系統(tǒng)包括一個(gè)進(jìn)行對(duì)終端系統(tǒng)獲得的大量數(shù)據(jù)的數(shù)據(jù)處理的代理終端。參考圖1,本發(fā)明提供了一種在便攜(和非便攜)設(shè)備例如PDAs、中文傳呼機(jī)、手機(jī)和個(gè)人計(jì)算機(jī)102、103、104上運(yùn)行應(yīng)用的主機(jī)可控結(jié)構(gòu)。還提供服務(wù)器代理終端101將數(shù)據(jù)和會(huì)話的表示層方面分離,并將其獨(dú)立發(fā)送給終端102、103、104,使得沒有表示層也可以獲得數(shù)據(jù),例如為了獨(dú)立使用表示層。終端設(shè)備102、103、104可以通過有線網(wǎng)絡(luò)105、電話線106或者衛(wèi)星/無線連接107與服務(wù)器代理終端101連接。服務(wù)器代理終端101通過因特網(wǎng)和/或內(nèi)部網(wǎng)108獲得終端請(qǐng)求的數(shù)據(jù)。數(shù)據(jù)可由服務(wù)器代理終端101接收,并在發(fā)送給終端102、103、104之前由處理成終端需要的原始數(shù)據(jù)。顯示的數(shù)據(jù)的表示層方面可以獨(dú)立地存儲(chǔ)在服務(wù)器代理終端和代表對(duì)特殊終端應(yīng)用程序特有的顯示屬性上。分離數(shù)據(jù)和表示層組件允許終端102、103、104為其它顯示表格重新使用數(shù)據(jù)或者為其它應(yīng)用程序重新解釋數(shù)據(jù)。本發(fā)明還在保存終端102、103、104的狀態(tài)的服務(wù)器代理終端101提供一個(gè)持久代理終端(即服務(wù)器代理終端的代理終端組件),這可提高有效性,例如,通過允許用戶從一種傳輸如Ethernet切換到另一種傳輸如Ricochet,同時(shí)不會(huì)改變狀態(tài)或者重新驗(yàn)證用戶。本發(fā)明由上述的終端框架和服務(wù)器代理終端101組成。終端框架的目標(biāo)是通過使終端行為由主機(jī)修改從而提供最大的靈活性。這允許將新特征快速添加到平臺(tái),該平臺(tái)可能沒有直接更新終端代碼的可用方式,例如其終端代碼是內(nèi)置的PDA。本發(fā)明通過將表示層、邏輯層和數(shù)據(jù)組件分離可實(shí)現(xiàn)該靈活性。這使每一組件能夠獨(dú)立更新,由此減少網(wǎng)絡(luò)信息流通量和對(duì)服務(wù)器多余的請(qǐng)求。此外,該框架能夠平衡多個(gè)平臺(tái),從而為具有新型的、最優(yōu)化的、經(jīng)過測試的編碼基數(shù)的終端減少開發(fā)時(shí)間和錯(cuò)誤數(shù)量。服務(wù)器代理終端101處理來自終端102、103、104的所有請(qǐng)求,并以相同的協(xié)議返回響應(yīng)。這極大地簡化了終端102、103、104的響應(yīng)性,它不再需要理解多桌面中心協(xié)議,例如HTTP、IMAP和SMTP??膳渲脕碜苑?wù)器代理終端101的附加特征,因?yàn)樗鼈冊(cè)谝髸r(shí)由終端102、103、104展開和接收。本發(fā)明提供公共的框架,用于在不同的平臺(tái)如PalmOS、WinCE、Linux、Macintosh和Windows上建立主機(jī)控制的終端。只要已經(jīng)給客戶發(fā)布了具有燒錄到ROM中的終端代碼的設(shè)備,最多是難以更新終端。本發(fā)明的框架定址該問題和幾個(gè)其它的涉及在便攜設(shè)備上創(chuàng)建多個(gè)客戶的難題??蚣艿闹饕繕?biāo)是允許服務(wù)器代理終端控制和修改終端行為和特征集,而不必更新該終端代碼。此外,通過共享公共的、最優(yōu)化的和經(jīng)過測試的代碼路徑,公共的框架能夠利用終端開發(fā)平衡從而減少錯(cuò)誤數(shù)量和開發(fā)時(shí)間。本發(fā)明的基礎(chǔ)結(jié)構(gòu)使用XML數(shù)據(jù)模型將終端數(shù)據(jù)、表示層和邏輯層分離到不同的組件中。當(dāng)終端發(fā)出請(qǐng)求給服務(wù)器代理終端時(shí),來自該服務(wù)器代理終端的響應(yīng)作為二進(jìn)制串行化了的XML數(shù)據(jù)流傳輸,該數(shù)據(jù)流可保存其內(nèi)容的語義信息。這允許由腳本限定的終端邏輯層確定響應(yīng)的特定組件,然后進(jìn)行修改并以任意形式使用數(shù)據(jù)。此外,發(fā)送到終端的數(shù)據(jù)能夠不依賴于表示層存儲(chǔ)。這意味著可以通過其它形式重新使用和在稍后的時(shí)間利用終端邏輯層以任何形式顯示或重新解釋。參考圖2,對(duì)股票報(bào)價(jià)請(qǐng)求201的響應(yīng)作為值樹202返回,每個(gè)值都具有一個(gè)名字標(biāo)簽。利用終端上的邏輯層能夠使用該信息202來僅僅提取顯示的請(qǐng)求的期望組件。終端的表示層組件也是由對(duì)象和屬性組成的XML數(shù)據(jù)流。屬性可以是簡單的,例如整數(shù)、字符串和布爾值,或者復(fù)雜的例如腳本,或包含用于圖像的象素?cái)?shù)據(jù)的二進(jìn)制,或者新聞故事的多信息文本。對(duì)象可以是UI窗體,例如按鈕、文本區(qū)、或彈出式菜單,該菜單具有內(nèi)置的整數(shù)屬性,例如頂部、左邊、高度和寬度。附加的內(nèi)置屬性可以包括用于內(nèi)容標(biāo)題的字符串。為了更好地利用本機(jī)特征例如字體、大小、顏色和樣式,本機(jī)應(yīng)用程序能夠添加對(duì)特定平臺(tái)有用的內(nèi)置屬性。這種靈活性是固化在本發(fā)明設(shè)計(jì)的數(shù)據(jù)流的統(tǒng)一處理中。參考圖3,數(shù)據(jù)模型代表作為一個(gè)簡單樹302的對(duì)象和屬性301,該簡單樹表示包含在當(dāng)前表格中的單個(gè)窗體的配置。當(dāng)用戶點(diǎn)擊表格上的按鈕時(shí),它能夠激活發(fā)送請(qǐng)求給服務(wù)器代理終端的腳本,例如股票報(bào)價(jià),并使邏輯層處理處理服務(wù)器代理終端的響應(yīng)的內(nèi)容,以便提取公司名稱和當(dāng)前價(jià)格并使用這些值填充文本區(qū)屬性。然而,由于終端存儲(chǔ)了原始表格,所以對(duì)該服務(wù)的后來請(qǐng)求將立刻顯示該表格,但是仍然允許用戶發(fā)出交互式請(qǐng)求,例如對(duì)股票報(bào)價(jià)或不同地址規(guī)定不同的符號(hào)以便獲得一個(gè)地圖。這些表格或特征沒有燒錄到終端中,但是它們可通過服務(wù)器代理終端從終端獲得。本發(fā)明的結(jié)構(gòu)包括一種下面描述的腳本語言,其提供了終端的邏輯組件。腳本似乎具有表格中的另一種屬性,但是它可提供終端智能操作。當(dāng)用戶按壓表示層中的按鈕時(shí),與按鈕關(guān)聯(lián)的腳本屬性就執(zhí)行(如下面描述的)。腳本能夠執(zhí)行許多任務(wù),從確認(rèn)表格上的輸入到發(fā)出請(qǐng)求給服務(wù)器代理終端,到由對(duì)象調(diào)用并從響應(yīng)提取期望的部分,然后將其插入到表示層的適當(dāng)位置。它還可以修改UI組件的位置,以便對(duì)來自服務(wù)器代理終端的特定響應(yīng)調(diào)整,或者它可以修改響應(yīng)中的數(shù)據(jù),從而滿足特定終端的顯示限制。通過允許服務(wù)器代理終端在任何時(shí)間修改終端行為或者添加新特征,該腳本語言賦予了終端極大的靈活性。特征集對(duì)于終端不再是一個(gè)開發(fā)問題,但是相反能夠在運(yùn)輸終端之后從服務(wù)器代理終端正式使用。具有激活(active)終端側(cè)的邏輯的另一個(gè)優(yōu)點(diǎn)是在終端的性能中表明其自己,從而提供其大部分的功能而不必與服務(wù)器代理終端連接。因此,終端還能夠在中斷或喪失覆蓋率的過程中獲得服務(wù)器代理終端連接,通過允許用戶看到在中斷或喪失覆蓋率的過程中其斷線的地方進(jìn)一步豐富用戶的經(jīng)驗(yàn)。最后,通過允許當(dāng)不能直接更新終端代碼時(shí)利用腳本定址某些錯(cuò)誤,這種從服務(wù)器代理終端更新終端的能力增強(qiáng)了終端的耐用性和穩(wěn)定性。本發(fā)明的優(yōu)勢是它提供了一種開發(fā)能夠在其發(fā)布之后修改和更新終端的方式。這一點(diǎn)必須完全地描述??雌饋砗孟癖景l(fā)明是一種表示層插件,但是這是由于本發(fā)明必須將表示層、數(shù)據(jù)和邏輯層隔開。為此,終端的功能和特征可以由本發(fā)明的表格定義,該表格可通過服務(wù)器代理終端從終端獲得。終端上的激活邏輯層允許特征集比簡單的HTML更加豐富,并且對(duì)特定終端進(jìn)行剪裁。此外,本發(fā)明的內(nèi)部結(jié)構(gòu)表示開發(fā)者僅僅例示了需要的和適用于特定終端部分,從而可以快速有效地制造質(zhì)量輕且穩(wěn)定的終端。建立一個(gè)使用本發(fā)明的框架的終端涉及兩個(gè)主要方面。首先必須給系統(tǒng)內(nèi)核一種訪問設(shè)備的某些公共的特征的方式,通常這必須通過操作系統(tǒng)(OS)路由。其次,如果期望支持表示層,終端的本地實(shí)現(xiàn)必須定義可在設(shè)備上得到的用戶界面窗體。參考圖4,本發(fā)明的框架劃分為五個(gè)層401。即表示層402,包含本發(fā)明的Nachos對(duì)象404和系統(tǒng)對(duì)象403的對(duì)象層,對(duì)象運(yùn)行時(shí)間層405,包含傳輸抽象407和存儲(chǔ)抽象406的抽象層,以及引導(dǎo)應(yīng)用程序408。該引導(dǎo)應(yīng)用程序408包含本發(fā)明內(nèi)核的本地實(shí)現(xiàn),并執(zhí)行需要用于在設(shè)備例如傳輸和存儲(chǔ)上操作的異常分支指令。引導(dǎo)應(yīng)用程序408能夠安裝對(duì)象到運(yùn)行時(shí)間,以便顯示對(duì)設(shè)備特定的服務(wù)。附加地該層408能夠以功能性為主機(jī),該功能性與本發(fā)明不相關(guān)或者結(jié)合其它本發(fā)明還不支持的特征。或者,它能夠用作簡單的“粘合(glue)”層,以便處理設(shè)備具體的問題例如通信,并通過從本發(fā)明的表示層402導(dǎo)出多個(gè)類補(bǔ)充大量的用戶經(jīng)驗(yàn)。本發(fā)明定義了一個(gè)稱為Nachos系統(tǒng)界面(NachosSystemInterface)的抽象基類。終端必須從該基類導(dǎo)出類并定義所有在本發(fā)明的框架和設(shè)備的本機(jī)OS之間提供粘合的虛擬函數(shù)。在該類中的虛擬函數(shù)包括定義基本文件系統(tǒng)的存儲(chǔ)函數(shù)的入口、發(fā)送數(shù)據(jù)包給AOL的方式,用于該設(shè)備的圖像顯示和在UTC中的當(dāng)前時(shí)間。通過這些機(jī)構(gòu),本發(fā)明提供諸如緩存和數(shù)據(jù)庫中的固定存儲(chǔ)的基本函數(shù)。該存儲(chǔ)器可以RAM、快速存儲(chǔ)器、或者甚至是桌面終端上的硬盤的形式實(shí)現(xiàn)。本發(fā)明對(duì)本機(jī)代碼提供的實(shí)現(xiàn)不作假定,它僅僅是以在Nacho系統(tǒng)界面基類中描述的方式工作。盡管沒有這些也能夠運(yùn)行,但是這將使終端響應(yīng)請(qǐng)求更慢,并且不能在會(huì)話之間保存優(yōu)先選擇或其它信息。開發(fā)本發(fā)明的本地實(shí)現(xiàn)的第二部分需要集成用戶界面(UI)組件。本發(fā)明定義了一組表示層對(duì)象402,該對(duì)象是公共的UI窗體的抽象表示層,例如按鈕、編輯和靜態(tài)文本區(qū)、圖像、選擇框、彈出式菜單等等。本地終端不需要執(zhí)行所有本發(fā)明定義的窗體,但是任何被執(zhí)行的窗體必須通過寄存器類()方法和運(yùn)行時(shí)間對(duì)象405注冊(cè)。這允許終端靈活地僅支持對(duì)特定設(shè)備有用的窗體,而不用將各個(gè)命令硬編碼成本發(fā)明的內(nèi)核。本機(jī)代碼必須為每一個(gè)其執(zhí)行的窗體從本發(fā)明的基類中導(dǎo)出,并提供一個(gè)顯示該窗體的方式。本發(fā)明不進(jìn)行任何命中測試、繪圖或?qū)ζ聊簧系谋镜卮绑w的改變。相反,導(dǎo)出的類必須處理事件例如系統(tǒng)同級(jí)的創(chuàng)建和消除、由于用戶輸入而改變窗體的屬性的通知,以及通知基類窗體被單擊或選擇的能力。本發(fā)明從本地終端代碼中的導(dǎo)出類接收的改變和操作的通知提供了在該特定設(shè)備上接收事件和輸入的方式。本發(fā)明的結(jié)構(gòu)還規(guī)定了一種服務(wù)器代理終端以便通過統(tǒng)一所有與終端的通信為單一協(xié)議來簡化終端應(yīng)用程序的響應(yīng)性。通過消除分析多種協(xié)議的需要,這減小了終端的大小和復(fù)雜程度。這也意味著通過改變服務(wù)器代理終端而不必更新終端代碼就能夠定址新的協(xié)議。本發(fā)明已經(jīng)設(shè)計(jì)成使其固有地穩(wěn)定。在本發(fā)明層級(jí)上的非本地操作能夠破壞終端。類似地,本發(fā)明的虛擬機(jī)(VM)將僅僅取消當(dāng)前的腳本,如果它發(fā)現(xiàn)任何不期望的數(shù)據(jù)、字節(jié)碼或者非法訪問。此外,如果能夠?qū)@種復(fù)雜的環(huán)境檢驗(yàn)所有條件,這是很困難的。存在幾個(gè)記錄統(tǒng)計(jì)信息的編譯器開關(guān),并且調(diào)試有關(guān)本發(fā)明的大多數(shù)方面的信息,包括但不限于腳本編譯器、腳本運(yùn)行時(shí)間VM和信息中心。終端能夠保存一個(gè)通過本發(fā)明可訪問的本地?cái)?shù)據(jù)庫。該數(shù)據(jù)庫將用作會(huì)話之間的持久性存儲(chǔ),以便保存狀態(tài)信息、用戶界面和局部超高速緩存。服務(wù)器代理終端將是所有終端通信的唯一的一點(diǎn)。其結(jié)構(gòu)必須穩(wěn)定并可升級(jí)。服務(wù)器代理終端將與在后臺(tái)的任何數(shù)量的其它服務(wù)器通信,以便創(chuàng)建其發(fā)送給終端的數(shù)據(jù)流。然而,許多終端沒有與服務(wù)器的直接連接,而代替的是通過一些無線網(wǎng)絡(luò)通信。終端和服務(wù)器都可以解決這種問題如有效的等待時(shí)間或間歇覆蓋率。服務(wù)器代理終端變成本發(fā)明的保存中心點(diǎn)。只要已經(jīng)使用了終端,對(duì)于大部分其功能性來說,它取決于服務(wù)器代理終端。終端內(nèi)容的開發(fā)需要定義請(qǐng)求和響應(yīng)數(shù)據(jù)流格式、服務(wù)器組件,從而處理單個(gè)的請(qǐng)求,并為設(shè)備形成具體的表示層。本發(fā)明可定址許多應(yīng)用于微型終端約束,該微型終端是一個(gè)質(zhì)量輕、交叉平臺(tái)的終端框架。將數(shù)據(jù)、表示層和邏輯分離允許每一組件獨(dú)立地保存和修改。大量的終端特征從本地終端代碼發(fā)送到VM。因?yàn)檫@個(gè),在終端上的末端用戶的校驗(yàn)?zāi)軌蛱岣撸⑶也挥酶陆K端自身就可以修改。參考圖5,其示出了本發(fā)明的終端設(shè)備501和服務(wù)器代理終端509的接口透視圖。數(shù)據(jù)請(qǐng)求或者通過連通性介質(zhì)1510從終端501發(fā)送到連通性網(wǎng)關(guān)1模塊502,通過直接連接503,或者通過連通性介質(zhì)2511發(fā)送到連通性網(wǎng)關(guān)2模塊504到達(dá)協(xié)議處理程序模塊505。連通性網(wǎng)關(guān)模塊從任何連通性介質(zhì)需要的具體協(xié)議轉(zhuǎn)換Internet協(xié)議,然后前進(jìn)到服務(wù)器代理終端509中的協(xié)議處理程序模塊505。該協(xié)議處理程序模塊505翻譯請(qǐng)求的信息,然后或請(qǐng)求代理系統(tǒng)模塊506,或者如果請(qǐng)求是用于系統(tǒng)內(nèi)容的(例如表示或者層或邏輯組件),從內(nèi)容存儲(chǔ)器設(shè)備507檢索系統(tǒng)內(nèi)容。服務(wù)器代理終端509中的協(xié)議處理程序模塊505和代理系統(tǒng)模塊506包含網(wǎng)絡(luò)主機(jī)模塊508和終端501之間的終端會(huì)話的當(dāng)前狀態(tài)。該終端會(huì)話狀態(tài)獨(dú)立于終端501和協(xié)議處理程序模塊505之間的連通性的狀態(tài)。終端會(huì)話狀態(tài)能夠自由地在連通性介質(zhì)1510、連通性介質(zhì)2511、或者之間連接503之間轉(zhuǎn)換,而不需要重新校驗(yàn),所以對(duì)其它用戶來說,會(huì)話不會(huì)中斷。代理系統(tǒng)模塊506管理與網(wǎng)絡(luò)主機(jī)模塊508的多個(gè)連接。代理系統(tǒng)模塊506提供協(xié)議處理程序模塊505使用和實(shí)現(xiàn)的應(yīng)用界面。數(shù)據(jù)請(qǐng)求通過協(xié)議處理程序模塊505與來自代理系統(tǒng)模塊506的響應(yīng)相關(guān),然后根據(jù)本發(fā)明的協(xié)議格式化數(shù)據(jù),或者通過連通性網(wǎng)關(guān)1模塊502然后通過連通性介質(zhì)1510,通過直接連接503,或者通過連通性網(wǎng)關(guān)2模塊504然后通過連通性介質(zhì)2511將數(shù)據(jù)發(fā)送給終端501。通過從內(nèi)容存儲(chǔ)器設(shè)備507裝入內(nèi)容流處理對(duì)協(xié)議處理程序模塊505的內(nèi)容請(qǐng)求。該請(qǐng)求不會(huì)有關(guān)在終端設(shè)備501緩存的內(nèi)容狀態(tài)的信息,如果可適用。如果緩存的數(shù)據(jù)是最新的,則發(fā)送一個(gè)簡單的響應(yīng),這使終端重置緩存的數(shù)據(jù)的到期數(shù)據(jù)。如果緩存的數(shù)據(jù)不是最新的,則根據(jù)本發(fā)明的協(xié)議格式化該數(shù)據(jù),然后或者通過連通性網(wǎng)關(guān)1模塊502然后通過連通性介質(zhì)1510,通過直接連接503,或者通過連通性網(wǎng)關(guān)2模塊504然后通過連通性介質(zhì)2511將數(shù)據(jù)發(fā)送給終端501。在格式化數(shù)據(jù)之前,或者在格式化(在要求時(shí))之前編譯數(shù)據(jù)或預(yù)編譯并存儲(chǔ)在存儲(chǔ)器設(shè)備507上,該選項(xiàng)的選擇取決于在要求時(shí)編譯是否會(huì)變成代理系統(tǒng)模塊506中的瓶頸。通過上述的緩存損壞結(jié)構(gòu)可以更新終端501上的內(nèi)容。將新版本的內(nèi)容公布給內(nèi)容存儲(chǔ)器設(shè)備507,當(dāng)終端501發(fā)出內(nèi)容請(qǐng)求時(shí),新的版本自動(dòng)從內(nèi)容存儲(chǔ)器設(shè)備507檢索,并發(fā)送給終端501。內(nèi)容可以是數(shù)據(jù)、表示層、邏輯或三者的組合。盡管將新的版本發(fā)送給了終端501,但是老版本的表示層和/邏輯將由終端501使用來消除末端用戶可能經(jīng)歷的等待時(shí)間。將新版本的表示層和/邏輯導(dǎo)入終端501上的單級(jí)后臺(tái)緩存。下一次用戶請(qǐng)求內(nèi)容時(shí),終端501將檢測單級(jí)后臺(tái)緩存來看看是否存在適用于該特殊內(nèi)容的版本。當(dāng)終端501從單級(jí)后臺(tái)緩存檢索內(nèi)容時(shí),它首先檢測內(nèi)容是否已經(jīng)到期。終端501將總是使用來自緩存的當(dāng)前緩存版本的表示層和/邏輯。如果內(nèi)容已經(jīng)到期,終端501將使用代理系統(tǒng)模塊506檢測看看是否可獲得新的版本。如果代理系統(tǒng)模塊506確定終端501具有最新的版本,則將發(fā)送一個(gè)應(yīng)答給終端501,以便重置緩存內(nèi)容的到期數(shù)據(jù)。如果代理系統(tǒng)模塊506確定可以獲得新的版本,則將新版本的表示層和/邏輯發(fā)送給終端501,并導(dǎo)入終端501的單級(jí)后臺(tái)緩存中。如果新版本公布在內(nèi)容存儲(chǔ)器設(shè)備507上,則重復(fù)上述的版本請(qǐng)求處理。終端的結(jié)構(gòu)設(shè)計(jì)成是有效的、便攜的和靈活的。期望的是允許公共的編碼基數(shù)平衡多個(gè)不同的平臺(tái)。假設(shè)的本發(fā)明內(nèi)核的設(shè)計(jì),在新終端上開始的開發(fā)者所作的遠(yuǎn)比通常的終端開發(fā)少。本發(fā)明的內(nèi)核自身將關(guān)注更多的邏輯和應(yīng)用程序的功能性。開發(fā)者主要需要著重于兩個(gè)方面UI集成和系統(tǒng)“粘合”。對(duì)于UI集成,本發(fā)明提供一組表示層對(duì)象,它們是公共UI窗體的抽象表示。這些對(duì)象包括如按鈕、矩形、圖像、選擇框等。然而,這些對(duì)象僅僅是邏輯實(shí)體。終端開發(fā)者的任務(wù)是使用鉤入目標(biāo)平臺(tái)上的UI層的型式擴(kuò)展這些對(duì)象。表示層對(duì)象是基于使用本地同級(jí)的概念。即,對(duì)于每一NachosButton,內(nèi)核預(yù)期終端開發(fā)者提供代碼,以便在目標(biāo)平臺(tái)的期望UI工具包中創(chuàng)建按鈕。還需要的是本地按鈕將接受從NachosButton到同級(jí)的改變,并從同級(jí)到NachosButton傳送用戶相互作用。終端開發(fā)者不需要為所有的表示層對(duì)象實(shí)現(xiàn)類。僅僅那些需要支持在目標(biāo)平臺(tái)上的期望程序必須存在。然而,也鼓勵(lì)開發(fā)者盡可能地實(shí)現(xiàn)許多對(duì)象。由終端開發(fā)者在表示層對(duì)象中創(chuàng)建的任何類應(yīng)該使用運(yùn)行時(shí)間的registerClass()方法進(jìn)行注冊(cè)。這就是內(nèi)核知道如何鉤入對(duì)給定版本的終端程序存在的類,并且不會(huì)嘗試使用不被支持的對(duì)象。主要的祖先類是NachosUIObject。這為粘合到本地同級(jí)提供了支持。兩個(gè)非常重要的方法是createSystemPeer()和_destroySystemPeer()。這些函數(shù)必須在任何時(shí)候適當(dāng)?shù)靥幚碚{(diào)用(包括在_createSystemPeer之前的_destroySystemPeer調(diào)用)。_createSystemPeer()必須確實(shí)從其附屬的對(duì)象屬性得到其初始狀態(tài)。內(nèi)核將根據(jù)需要調(diào)用這些函數(shù),以便在目標(biāo)平臺(tái)的UI中保存一個(gè)存在。一般地,任何數(shù)據(jù)和狀態(tài)應(yīng)該存儲(chǔ)于對(duì)象的子類中,以便釋放內(nèi)核,從而根據(jù)需要破壞和再創(chuàng)建本地同級(jí)。NachosUIObject的子類包括Nachos表格(NachosForm)andNachos窗體(NachosWidget)。在Nachos中NachosForm是其中可以構(gòu)造UI的主容器。NachosWidget是所有窗體例如按鈕、圖像、矩形等的基類。NachosUIObject的非窗體子類包括NachosTimer和NachosItemsObject。每一對(duì)象都具有內(nèi)置的和運(yùn)行時(shí)間屬性。內(nèi)置屬性不能刪除或重新命名,并保證在任何情況下存在。對(duì)象的任何附加屬性將是其子類。這些子類可以是UI對(duì)象、數(shù)據(jù)對(duì)象或其它屬性,例如腳本、二進(jìn)制、整數(shù)、布爾值或字符串。參考圖6,其示出了一個(gè)表示本發(fā)明中對(duì)象導(dǎo)出的示例性分層對(duì)象樹601。Nachos表格具有以下內(nèi)置的屬性標(biāo)題-在標(biāo)題區(qū)域中顯示的表格的字符串標(biāo)題模式-把表格標(biāo)記為模式或非模式的布爾值保持白色書寫板-當(dāng)載入表格時(shí),用于將數(shù)據(jù)保存在白色書寫板上的標(biāo)志凍結(jié)-當(dāng)情況是真時(shí),UI不應(yīng)該繪制表格持久性-甚至在該表格和其數(shù)據(jù)沒有顯示之后也將其保存Nachos窗體具有以下內(nèi)置的屬性左邊-UI中窗體的左邊緣的位置頂部-UI中窗體的頂端的位置寬度-窗體的寬度高度-窗體的高度可見-如果窗體當(dāng)前是可見的,則為真激活-如果窗體是激活的且可以響應(yīng)用戶輸入則為真來自NachosWidget的其它對(duì)象具有附加的內(nèi)置屬性。例如,按鈕具有用作標(biāo)記按鈕、或者矩形窗體的標(biāo)題屬性,該屬性是一個(gè)可表示矩形的填充色的整數(shù)。左側(cè)和頂部的座標(biāo)是顯示區(qū)域的絕對(duì)座標(biāo)。為表格的標(biāo)題保存的顯示的任何部分不會(huì)計(jì)算顯示區(qū)域中的座標(biāo)。例如,如果表格標(biāo)題區(qū)域在表格的頂部,top=0將放置一個(gè)窗體在表格標(biāo)題區(qū)域下方的第一象素。一些UI工具包將本地窗體放置在絕對(duì)空間,一些關(guān)于它們的父類放置。終端開發(fā)者的工作是確保座標(biāo)的任何要求的變換在NachosWidget和其本地同級(jí)之間進(jìn)行。終端開發(fā)者實(shí)現(xiàn)的其它重要部分是將本發(fā)明“粘合”到目標(biāo)平臺(tái)的代碼。當(dāng)初始化時(shí)需要提供一種NachosSystemInterface實(shí)現(xiàn)給NachosRuntime。然后內(nèi)核使用該實(shí)現(xiàn)與目標(biāo)平臺(tái)進(jìn)行其相互作用。這包括局部存儲(chǔ)器和網(wǎng)絡(luò)訪問。如果在目標(biāo)平臺(tái)上支持存儲(chǔ)器,則應(yīng)該提供NachosDataStreamInterface的實(shí)現(xiàn),以及來自NachosSystemInterface的實(shí)現(xiàn)附加需要的方法。下面示出了本發(fā)明的腳本語言的示例性說明。介紹本發(fā)明的終端框架提供了一種主機(jī)可控的智能終端。主機(jī)可控性的概念在靜態(tài)終端上具有明顯的優(yōu)點(diǎn)。它允許在平臺(tái)上快速添加新特征到終端,該平臺(tái)可能沒有直接更新終端代碼的可行方式,例如具有使其終端代碼被燒錄的設(shè)備。此外,通過從主機(jī)修改終端行為可以防止或消除使用終端的不期望問題。附加地,由于終端只不過是簡單顯示來自主機(jī)的信息的非智能終端,因此它保存大部分的主機(jī)功能性,甚至當(dāng)沒有與主機(jī)連接時(shí)。這在具有高潛在連接或需要完全脫機(jī)運(yùn)行的終端上尤其是有用的。通過使用XML數(shù)據(jù)模型將表示層、邏輯和數(shù)據(jù)彼此分離,本發(fā)明可以實(shí)現(xiàn)這種靈活性,這使得每一組件可以彼此獨(dú)立地由主機(jī)修改或更新。本文將解釋本發(fā)明的一些主要原理,并著重論述本發(fā)明的腳本。為了有效地使用腳本語言,編劇需要理解有關(guān)本發(fā)明的屬性的數(shù)據(jù)模型、有關(guān)本發(fā)明的窗體的表示層組件以及最后是腳本語言自身的性能。腳本屬性腳本語言的主要構(gòu)成塊是屬性。每一屬性具有一個(gè)名稱和值。名稱用作當(dāng)引用該屬性時(shí)可以使用的標(biāo)記。屬性的名稱可以是任意的長度,并由任何可打印的字符組成。然而,名稱以字母或下劃線開始,隨后是任何級(jí)數(shù)的字母、數(shù)字或下劃線,這種名稱是最容易從腳本語言訪問的名稱。屬性的名稱是區(qū)分大小寫的。屬性名稱的實(shí)例有Homer//thisisfinehomer//thisisgood,butisthesamenameasHomer_bart//okay,thisisgood_labc//startingwithanunderscoreisacceptable155SpringfieldLane//thisisavalidpropertynameaswell,//butratherdifficulttoaccessfromascript屬性的值可以是幾種類型中的一種。簡單值的類型有整數(shù)、字符串和布爾值。這些都是最普遍使用的和要直接從腳本檢查或修改的屬性。HomersHometown“Springfield”//astringpropertySimpsonCount5//anintegerpropertyHomerHungeryTrue//aBooleanproperty有許多復(fù)雜的屬性,例如腳本和二進(jìn)制。一般地,復(fù)雜屬性的內(nèi)容不能從腳本修改,但是可以移動(dòng)、復(fù)制或刪除復(fù)雜屬性自己。二進(jìn)制屬性可用于圖像、大的文本正文和任何具有大的數(shù)據(jù)“斑點(diǎn)”的地方。最后一種屬性應(yīng)該得到特殊的考慮。它就是對(duì)象屬性。對(duì)象因?yàn)閷?duì)象用作其它屬性的容器,所以它是唯一的。對(duì)象是唯一的,因?yàn)樗米髌渌鼘?shí)現(xiàn)的容器。像所有屬性一樣,對(duì)象具有屬性名稱,但是也具有“類(class)”。由類名指定的對(duì)象的類定義了某些有關(guān)對(duì)象的屬性,例如缺省時(shí)包含什么屬性,以及其包含哪種類型的附加屬性。參考圖7,可以使用編輯器工具創(chuàng)建名稱為“untitled”702的“表格(form)”對(duì)象701。當(dāng)框架創(chuàng)建表格對(duì)象701時(shí),它會(huì)添加一些不能刪除或重新排序的內(nèi)置屬性。表格將總是具有名稱為caption703的字符串屬性、名稱為modal704的布爾值屬性、keepWhiteboard705、frozen706以及persistent707。其中每一屬性控制表格的特征和行為,例如當(dāng)它顯示時(shí)是否應(yīng)該保存其狀態(tài)(如果persistent707是真),或者它應(yīng)該為內(nèi)部表格通信清空全局區(qū)域(如果keepWhiteboard705是假)?!癴orm”的是對(duì)象類的一個(gè)實(shí)例,但是存在許多的類。另一個(gè)公共的類是“button”。參考圖8,實(shí)際上所有的UI窗體是恰好具有某些內(nèi)置屬性控制其外觀的對(duì)象。按鈕801具有可在任何時(shí)候調(diào)用的腳本802,按鈕對(duì)象801接收下面描述的“操作”信息。參考圖9,其示出了在表格901中創(chuàng)建的按鈕對(duì)象902。通過在另一對(duì)象的內(nèi)部創(chuàng)建一個(gè)對(duì)象,屬性不再表示為一個(gè)簡單列表。現(xiàn)在代替表格901作為一個(gè)層級(jí)在父對(duì)象擁有每一屬性的地方出現(xiàn)。按鈕myButton902擁有名稱為left908和在其下方的所有項(xiàng)的屬性,而表格擁有名稱為caption903、modal904、keepWhiteboard905、frozen906、persistent907和myButton902的屬性。除了保存,對(duì)象的其它響應(yīng)性是信息處理。信息通信單元是一個(gè)“message”類對(duì)象。該信息具有一個(gè)源對(duì)象和一個(gè)目的對(duì)象,源對(duì)象被發(fā)送給目的對(duì)象,且通常在稱為parameters的類“stream”的對(duì)象中包含一些附加信息。該parameters對(duì)象用作對(duì)請(qǐng)求或響應(yīng)需要的信息容器。例如,如果腳本發(fā)送對(duì)“AOL”請(qǐng)求股票報(bào)價(jià)的信息,其發(fā)送的信息的parameters對(duì)象將具有稱為“sym”的屬性,其字符串值為“aol”。參考圖10,示出了一個(gè)來自服務(wù)器1001的響應(yīng)。在這種情況下,parameters1002包含稱為具有股票報(bào)價(jià)的stream1003的另一“data”類對(duì)象。通過名稱或指針該腳本能夠單獨(dú)地訪問這些屬性中的每一個(gè)。信息還具有類“stream”的echo對(duì)象,其包含特別地包括在發(fā)送端想要在應(yīng)答中接收的原始信息中的任何屬性。這可以用于復(fù)制產(chǎn)生給應(yīng)答接收者的請(qǐng)求的數(shù)據(jù)。例如,在郵件程序中,腳本可以發(fā)送“fetchBody”信息給沿信息ID作為回應(yīng)傳送的主機(jī),使得當(dāng)應(yīng)答返回信息時(shí),能夠?qū)㈨憫?yīng)與郵件聯(lián)系,而不需要事務(wù)(transactions)的ID地圖。許多信息具有一個(gè)對(duì)應(yīng)的應(yīng)答信息。例如,load信息請(qǐng)求將返回在reply信息中的結(jié)果。類似地,save信息發(fā)送具有reply信息的完成通知。大多數(shù)腳本使用塊調(diào)用等待響應(yīng),所以通常是不需要應(yīng)答的名稱的。然而,很多時(shí)候當(dāng)發(fā)送端期望對(duì)異步請(qǐng)求超越缺省的應(yīng)答名稱,這些異步請(qǐng)求可能需要具體的應(yīng)答名稱,所以合適的腳本能夠處理響應(yīng)。這可以通過設(shè)定replyName屬性為期望的信息名稱實(shí)現(xiàn)。這可用于返回到對(duì)象的信號(hào)分離響應(yīng),與回應(yīng)參數(shù)非常相似的是以一種很少見且常常更容易使用的方式。運(yùn)行時(shí)間根參考圖11,為了要顯示的表格或要接收信息的對(duì)象,它必須具有已知的如runtime1101的對(duì)象。該運(yùn)行時(shí)間是類“root”的對(duì)象,它用作所有激活對(duì)象的層級(jí)源。興趣的第一個(gè)對(duì)象是表格堆棧forms1102。當(dāng)運(yùn)行時(shí)間顯示一個(gè)“form”對(duì)象時(shí),通過將其導(dǎo)入表格堆棧中運(yùn)行時(shí)間具有新表格的所有權(quán)。創(chuàng)建并顯示表格的UI窗體(如果布爾值屬性visible是真。)在所有已經(jīng)創(chuàng)建窗體之后,運(yùn)行時(shí)間將發(fā)送“displayed”信息給表格,所以表格能夠在顯示后立即執(zhí)行任何動(dòng)作。從這點(diǎn)來看,表格具有發(fā)送和結(jié)束信息的能力,只要它由運(yùn)行時(shí)間控制。services對(duì)象1103提供了能夠在運(yùn)行時(shí)間注冊(cè)的許多特征的入口。一個(gè)由缺省提供的服務(wù)是database對(duì)象1104,它可提供持久性存儲(chǔ)。數(shù)據(jù)庫可以用于保存偏好、高分?jǐn)?shù)或應(yīng)該從會(huì)話到會(huì)話如用戶的文件夾或地址本的其它數(shù)據(jù)。在services1103下面的aol對(duì)象1105用作和主機(jī)連接。從服務(wù)器請(qǐng)求數(shù)據(jù)的信息都將以對(duì)應(yīng)于請(qǐng)求的合適的信息名稱發(fā)送到aol對(duì)象1105。例如,圖10中的股票報(bào)價(jià)是發(fā)送到aol的名稱為“getStockQuote”的信息的響應(yīng)。trash對(duì)象1106用作一個(gè)用于刪除的屬性和本地創(chuàng)建的對(duì)象的臨時(shí)休息處。trash對(duì)象1106的內(nèi)容將不會(huì)刪除,直到所有腳本已經(jīng)完成運(yùn)行,因?yàn)閯h除的屬性可能被另一個(gè)掛起的或封鎖的腳本引用。whiteboard對(duì)象1107也可以用作表格之間的通信的臨時(shí)存儲(chǔ)器,但是其內(nèi)容的有效期由不同的結(jié)構(gòu)控制。表格對(duì)象的內(nèi)置屬性中的一個(gè)是稱為keepWhiteboard的布爾值。每當(dāng)運(yùn)行時(shí)間顯示具有設(shè)定為假的keepWhiteboard的表格時(shí),運(yùn)行時(shí)間刪除whiteboard對(duì)象1107的內(nèi)容。這允許數(shù)據(jù)從表格傳送到表格,只要下一個(gè)表格想要它(即keepWhiteboard是真)。腳本概述在終端設(shè)備上,應(yīng)用程序通過表格提供多個(gè)特征和服務(wù)給用戶。如上所述,表格包含UI窗體,例如文本區(qū)、選擇框、彈出式菜單和按鈕。通過單擊按鈕、改變文本或者旋轉(zhuǎn)列表中的項(xiàng),用戶與窗體相互作用,表格需要作用在該事件上。通過發(fā)送信息給合適的窗體可以實(shí)現(xiàn)上述操作,但是它自身不能實(shí)現(xiàn)所有的事件。窗體需要具有一個(gè)對(duì)應(yīng)于被接收的信息的腳本。例如,按鈕接收“action”信息,當(dāng)用戶單擊它時(shí)。如果按鈕窗體具有稱為action的腳本屬性,那么將執(zhí)行該腳本來處理“action”信息。類似地,如果該腳本發(fā)送一個(gè)“l(fā)oad”信息給aol以獲得股票報(bào)價(jià),則調(diào)用“reply”的應(yīng)答信息發(fā)送回按鈕,該按鈕能夠使用稱為reply的腳本處響應(yīng),reply可以顯示從報(bào)價(jià)例如從當(dāng)前價(jià)格選擇的屬性。腳本是表格的邏輯組件,該邏輯組件可賦予終端智能行為。通過在服務(wù)器上創(chuàng)建新的表格,并簡單地通過將表格裝入和顯示表格,終端能夠獲得新的或更新的功能性。這樣的靈活性縮短了終端的開發(fā)周期,并且通過在已經(jīng)分布終端之后添加終端的特征集增加了它的使用期。腳本基礎(chǔ)為了開始設(shè)計(jì)腳本,程序員必須熟悉表示數(shù)據(jù)、變量和表達(dá)式的約定。接下來的幾段將定義語言的結(jié)構(gòu),并示出如何使用它們的簡單實(shí)例。能夠再使用腳本將增加可靠性和縮短開發(fā)新特征需要的時(shí)間。然而,并不是所有的代碼都寫得很好,因此腳本允許像在C++中一樣使用雙斜線對(duì)腳本進(jìn)行說明。//Thisisacomment//eachcommentrunsuntiltheendoftheline.simpsonKidIQs=.iq.bart+.iq.lisa//Maggiehasn’tbeentestedyet!此外還有C結(jié)構(gòu)的程序塊說明。顯著的區(qū)別是該程序塊說明嵌套在腳本中。這是對(duì)C語言最大的改變。/*Thisisacommentthatcanspanseverallines*//*Becauseblockcommentsnest/*thiscommentwon’tendtheblock*/InsteadyouhavetobalancetheendoftheblockswithaclosingCommentmarker.-->*/整數(shù)、布爾值和字符串的文字值的表示如下.lisa.age=8//Lisaineightyearsold.lisa.says=“I’mgoingtomyroom”//Timetodohomework.lisa.likesSchool=true//Sheseemsto.bart.age=Oxa//Bartisten.bart.says=“AyCarumba!”//Whatelsewouldhesay.bart.likesSchool=false//gonnabearockstar…可以使用關(guān)鍵字newline添加回車到字符串值上。.homer.excuse=“Doh!”&amp;newline&amp;“ItwaslikethatwhenIgothere”//Thestringwillappearas//Doh!//ItwaslikethatwhenIgothere還可以使用字符串中的轉(zhuǎn)義序列,用反斜杠‘\’后面緊跟著表示新行的‘n’、表示跳格的‘t’或者緊跟著兩位十六進(jìn)制的值。.homer.excuse=“Doh!\n\tItwaslikethatwhenIgothere\x2a”//Thestringwillappearas//Doh!//ItwaslikethatwhenIgothere*腳本中的語句用回車結(jié)束。在語言中沒有分號(hào)。實(shí)際上,詞法分析程序?qū)㈥P(guān)閉其經(jīng)過的第一次錯(cuò)誤的標(biāo)點(diǎn)。然而,如果語句過長,通過輸入反斜杠作為在該行的最后一個(gè)字符可以在下一行繼續(xù)。.homer.profile=“SpringfieldNuclearPowerPlantsafetyinspector”&amp;“,bowler”&amp;\“,beerdrinker”&amp;“,astronaut”//thatwasjusttoomuchforonelinetotake這對(duì)啟動(dòng)程序應(yīng)該是足夠的,但是為了訪問數(shù)據(jù)我們需要了解如何沿層級(jí)中的路徑得到給定的屬性。標(biāo)志符和路徑腳本允許訪問諸如字符串、整數(shù)和能夠存儲(chǔ)在屬性中的布爾值的值,這些值存在于表格、數(shù)據(jù)庫或白色書寫板中?;蛘?,可以將這些值放在臨時(shí)變量中,該臨時(shí)變量僅在執(zhí)行腳本的過程中存在。臨時(shí)變量必須以字母或下劃線開頭,隨后可以是任意序列的字母、下劃線或數(shù)字。BartAge=10//setsthevariableBartAgetothe//integer10_santasLittleHelper=true//thedogSimpson5=“newband”//thisisfine5donuts=“Homer’sbreakfast”//illegal,cannotbeginwithadigit路徑是規(guī)定層級(jí)中的屬性位置的方式。周期是類似于Unix中的目錄分隔符的路徑分隔符。基本路徑組件可以是明確的名稱、指針或者名稱表達(dá)式。參考圖12,Bart的年齡1204可以使用下面的表達(dá)式進(jìn)行設(shè)置。me.simpsons.Bart.age=10//setstheageto10.simpsons.Bart.age=“10”//Astringautomagicallyconvertstoint.simpsons.bart.AGE=Oxa//Thisis10tooform.simpons.Bart.age=10//anabsolutepath這些表達(dá)式的每一個(gè)將Bart的年齡屬性的值設(shè)置為10。第一表達(dá)式以me開始,其從包含腳本的同一對(duì)象中的路徑開始。在這種情況下,表格對(duì)象theSimpsons1201包含腳本。從此往后,表格具有simpsons數(shù)據(jù)對(duì)象1202,該數(shù)據(jù)對(duì)象具有包括age1204的Bart1203。通過從具有周期的路徑表達(dá)式開始,第二表達(dá)式使用me的簡寫形式。第三表達(dá)式示出了路徑分大小寫。最后一個(gè)路徑于腳本無關(guān),但是其從表格的頂端theSimpsons1201開始?,F(xiàn)在考慮Bart1203中的annoy1205腳本。為了改變相對(duì)于Bart1203的Lisa1206中的屬性,路徑需要上移層級(jí)??梢园凑障旅娴姆绞讲僮鱢orm.simpsons.Lisa.says=“Bart,quitit!”//absolutepathparent.Lisa.says=“Bart,quitit!”//backsuptosimpsonsfirst..Lisa.says=“Bart,quitit!”//thisisshorthandforparent每個(gè)都與前面的相同,但是父類(或“..”)路徑組件使路徑從當(dāng)前位置或者從包含該腳本的對(duì)象上升層級(jí)的一個(gè)水平,如果該路徑組件看來是作為路徑的第一部分。另一種訪問路徑組件的方式是使用屬性的指針。在路徑中,使用方括號(hào)運(yùn)算符作為指針的參考屬性。Form.simpsons[1].location=“Moe’s”//setssimpsons.Homer.locationform.simpsons[2].busy=true//setssimpsons.Marge.busy=Trueform.simpsons[3][1]=10//setssimpsons.Bart.ageto10另一種訪問屬性的方便方式是按照使用表達(dá)式的名字。這允許腳本在運(yùn)行時(shí)間在不同的屬性上操作,而不必直接修改腳本。使用在一個(gè)周期或卷曲花括號(hào)之前的括弧來使用一個(gè)表達(dá)式作為路徑名稱。例如,從Bart.annoy//.who=“marge”parent.(.who).says=“gooutsideandplay”//parent.marge.busy=true//.who=“l(fā)isa”parent{.who}.says=“l(fā)eavemealone”//還有幾個(gè)表示腳本中的特定對(duì)象的前綴。下面在表中給出。表達(dá)式和運(yùn)算符在腳本中最常用的運(yùn)算符是計(jì)算表達(dá)式的值。應(yīng)使用對(duì)大多數(shù)程序員和腳本作者都熟悉的運(yùn)算符來書寫表達(dá)式。可以分別使用運(yùn)算符“*”、“/”、“+”和“-“來作乘法、除法、加法和減法。運(yùn)算符“=”在語言中具有雙重功能,既可用作賦值運(yùn)算符又可用作等式運(yùn)算符。.homer.job=“nuclearengineer”//assignsastringto.homer.jobif.homer.job=“officeassistant”//thisdoesn’tassign“officeassistant”to.homer.job//instead,theequalsoperatordoesacaseinsensitive//compareonstringvaluesend與C和C++不同,腳本不是一種優(yōu)勢類型的語言。當(dāng)將一個(gè)整數(shù)賦予給一個(gè)字符串屬性時(shí),腳本會(huì)促進(jìn)該整數(shù)轉(zhuǎn)化為字符串。如果將表示整數(shù)的字符串值賦予給一個(gè)整數(shù)屬性,那么該字符串將在賦值前轉(zhuǎn)化為一個(gè)整數(shù)。如果字符串不表示基本的十個(gè)數(shù)字,那么它將作為零的整數(shù)值處理。當(dāng)從布爾值轉(zhuǎn)化時(shí),字符串值為“真”和“假”,整數(shù)值為1和0。當(dāng)轉(zhuǎn)化為布爾值時(shí),只有不分大小寫的字符串值“假”和整數(shù)值0將作為假處理。字符串或整數(shù)的所有其它的值為真。<prelisting-type="program-listing"><![CDATA[HalfDozen=“6”//Alocalvariable.homer.donutsEaten=“none”//donutsEatenisastringproperty.homer.donutsEaten=6+halfDozen//convertstoanint(6+6=12)thenbacktoastring=”12”.homer.donutsEaten=.homer.donutsEaten+1//nowabaker’sdozen“13”.donutCount=5+“fistfulmore”//thisislike5+0.homer.hungry=true//hungryisaBooleanproperty.homer.hungry=“true”//thisconvertstotrue.homer.hungry=1//thisisalsotrue.homer.hungry=“false”//thisisFalse!]]></pre>如果賦值的左側(cè)是一個(gè)不存在的屬性,那么將作為表達(dá)式的表觀類型創(chuàng)建該屬性并賦予其表達(dá)式的值。.homer.job=“safetyinspector”//onlythe.jobpropertywillbecreated.//if.homerdoesn’texistthatisalwaysanerror!如所預(yù)期的應(yīng)用優(yōu)先次序的典型規(guī)則。.doh=4+3*2//=10.doubleDoh=(4+3)*2//=14.dohAgain=6+4/2//=8.fuguFish=(6+4)/2//=5字符串串聯(lián)運(yùn)算符“&amp;”對(duì)腳本是特殊的??梢允褂迷撨\(yùn)算符添加字符串在另一個(gè)字符串上。.homerSays=“D”&amp;“oh”&amp;“!”//“Doh!”.homerSays=.homerSays&amp;“Weareoutofdonuts!”//“Doh!Weareoutofdonuts!”邏輯運(yùn)算符是字,而不是符號(hào),除了邏輯非,其可以寫成“not”或者“!”。.homer.hungry=not.homerSleeping//ifHomerisawake,he’shungry.homer.hungry=!.homerSleeping//justlikeIsaid.homer.sleeping=.noDonutsand.remoteControlMissing//ifnodonutsandcan’tchangethechannel,hewillsleep.homer.annoyed=flander.ned.presentor(.noDonutsand\!.homerSleeping)//heiseasilyannoyed比較運(yùn)算符“=”試圖將其運(yùn)算數(shù)轉(zhuǎn)換成整數(shù),但是如果左邊和右邊的運(yùn)算符是字符串時(shí),它將進(jìn)行不分大小寫的比較。某些運(yùn)算符可以結(jié)合賦值運(yùn)算符得到簡單的表達(dá)式。.Bart.playtime+=.bart.studytime//addsstudytimetoplaytime//sameas.Bart.playtime=.Bart.playtime+.bart.studytime此外,可以使用自加和自減運(yùn)算符作為語句,但是不能在表達(dá)式上使用。//allthesam___.homer.donutsEaten++++.homer.donutsEaten.homer.donutsEaten+=1.homer.donutsEaten=.homer.donutsEaten+1//notlegal!.homer.donutsEaten=.donutCount--//notanexpressionleveloperator下面以優(yōu)先次序列出運(yùn)算符的全部列表?xiàng)l件語句腳本具有類似于其它語言的條件語句,但是其語句塊需要用關(guān)鍵字end結(jié)束。其語法是ifexpressionstatementsend注意這種形式的條件語句的實(shí)例有if.homer.atHome.donutCount=.donutCount-1//decreaseeverytimeHomerreturnsendif.bart.inTrouble.bart.location=“PrincipleSkinner’sOffice”//justlikehome.marge.grayHair=.marge.grayHair+1//mightbebluehair…end也可以在關(guān)鍵字結(jié)束之前添加else子句到if語句中,如下ifexpressionstatementselsestatementsend該語法的實(shí)例有<prelisting-type="program-listing"><![CDATA[if.duffCount>0.duffCount=.duffCount-1//don’tmindifIdoelse.homer.location=“Moe’sTavern”//storeistoofarendif.lisa.homework=true.lisa.busy=“studying”//highlymotivatedelse.lisa.busy=“playingsaxophone”//andwell-balancedend]]></pre>腳本和C/C++中的條件語句之間的顯著區(qū)別是多個(gè)布爾表達(dá)式不能是短路的。通過計(jì)算整個(gè)表達(dá)式得到的字節(jié)碼比在每一布爾運(yùn)算符后面使用條件轉(zhuǎn)移之后插入到校驗(yàn)中的小得多。這意味著ifexists(.foo)and(.foo>5)//careful!(.foo>5)willALWAYSbeexecuted//resultinginathrownexceptionifitdoesn’tend此外,可以使用下面的語法將任何數(shù)量的條件語句鏈接在一起ifexpressionstatementselseifexpressionstatementsend例如if.time=“5:00PM”//thisworksasacase-insensitivestringcompare.homer.busy=“goinghome”elseif.time=“3:00PM”if.homer.location=“work”.homer.busy=“napping”else.homer.busy=“watchingTV”end//terminatestheinnerifend//terminatesthewholeif/elseifblock循環(huán)腳本可提供幾種結(jié)構(gòu)以利于語句塊的重復(fù)。第一種形式的重復(fù)按照下面的語法執(zhí)行固定次數(shù)的循環(huán)repeatinteger_expressionstatementsend一些實(shí)例有repeat99.homer.drink(.duffCount)//callsthedrinkscript99timesendrepeat.donutCount//doesNOTdecrement.donutCount.homer.eat()//callstheeatscriptend只要表達(dá)式為真或者只要表達(dá)式為假,第二中類型的循環(huán)語句將繼續(xù)執(zhí)行。repeatwhileboolean_expressionstatementsendrepeatuntilboolean_expressionstatementsend其實(shí)例有repeatwhile.lisa.homework.lisa.homework=.lisa.study()//returnsfalseifthereisnomorehomeworkendrepeatuntil.quittingTime.homer.checkNuclearSafety()//that’swhatI’mherefor.homer.checkVendingMaehine()//needsomeporkrinds.quittingTime=.home.checkClock()//doneat5:00end也許最熟悉形式的循環(huán)語句是一個(gè)使用重復(fù)變量并如下設(shè)置開始和結(jié)束的語句repeatwithidentifier=integer_expression[down]tointegerexpressionstatementsend僅僅在循環(huán)的開始計(jì)算一次邊界表達(dá)式。如果使用了down關(guān)鍵字,可以或者從更低的界限向更高的界限計(jì)算,或者從更高的界限向更低的界限計(jì)算。<prelisting-type="program-listing"><![CDATA[.count=0repeatwithi=1to10.count=.count+i//sumthenumbersfrom1to10endfoward=“Smithers”backward=“”repeatwithk=length(forward)downto1//reversesthestringbackward=backward&amp;getChar(forward,k)end//backward=“srehtimS”]]></pre>類似于C或C++,也存在一些語句繼續(xù)到循環(huán)的下一個(gè)重復(fù)或者完全中斷循環(huán)。當(dāng)結(jié)果如上時(shí),它們可以分別是“continue”和“break”語句。它們可以在任何循環(huán)語句內(nèi)部出現(xiàn)。repeatwithk=1to10if!.lisa.homeworkbreak;//donewithstudyloopelseif.lisa.nextTopic()next;//don’tstudythistime,justrestend.lisa.study()//goingforstraightA’send最后一種類型的循環(huán)語句接觸給定的對(duì)象和在其下面的所有子類所有的屬性以便可選擇地規(guī)定深度。如果沒有規(guī)定深度選項(xiàng),那么僅可以訪問對(duì)象的直接子類(immediatechildren)?;蛘撸绻枰L問在任意深度所有的嵌套屬性,可以通過使用infinity關(guān)鍵字實(shí)現(xiàn)上述訪問。最后,可以使用objectsOnly關(guān)鍵字過濾屬性。這將跳過其它屬性和只重復(fù)對(duì)象。repeatwithidentifierinpath[todepth{integer_expression/infinity}][objectsOnly]statementsend如果期望腳本設(shè)置所有的simpsons的.busy屬性為圖6中的“sleeping”??梢允褂孟旅娴难h(huán)來實(shí)現(xiàn)。repeatwithpersoninform.simpsonstodepth1objectsOnly//everysimpsonmustrestperson.busy=“sleeping”end通過包含在表格中的所有屬性是對(duì)象的注釋“法”可以簡化該循環(huán),所以可以不需要過慮對(duì)象唯一性(objectsonly)。此外,因?yàn)槿笔〉闹貜?fù)深度僅僅訪問起始對(duì)象的直接子類,該深度不必設(shè)定為一個(gè)單值。//thiswillalsoputeveryonetosleepexactlylike//theexampleabove.repeatwithpersoninform.simpsons//everysimpsonmustrestperson.busy=“sleeping”end數(shù)組本發(fā)明提供一個(gè)數(shù)組屬性,該數(shù)組屬性允許有效地處理大塊的同類數(shù)據(jù)??梢源鎯?chǔ)在數(shù)組中的這種類型的信息被限制為字符串、整數(shù)或布爾值。使用下面的語法可以創(chuàng)建數(shù)組createarrayof{int|string|bool}aspath//Thetypeofthearrayisspecifiedwhenitiscreatedpath可以是一個(gè)局部變量或者是在包括要?jiǎng)?chuàng)建的數(shù)組屬性的名稱的層級(jí)中的期望位置的一個(gè)路徑。createarrayofstringasform.simpsons.Homer.excuses//createsanarrayofstringsintheHomerobjectscalled“excuses”既然已經(jīng)創(chuàng)建了數(shù)組,需要將元素添加到數(shù)組的方法。利用具有下面語法的插入語句可以實(shí)現(xiàn)在數(shù)組中創(chuàng)建新的元素insertexpressioninpathatint_expression插入語句將創(chuàng)建一個(gè)新的同一類型的數(shù)組元素,其值由在int_expression給出的指針處的表達(dá)式規(guī)定。該數(shù)組是一個(gè)基址的(based),而不是C/C++形式的零基址數(shù)組。因此,如果給出零作為插入的指針,那么它將得到一個(gè)附加運(yùn)算。<prelisting-type="program-listing"><![CDATA[lameExcuses=form.simpsons.Homer.excuses//savepathinlocalvarinsert“Idon’tknow!”inlameExcusesat1//addexcusesinsert“ItwaslikethatwhenIgothere!”inlameExcusesat1insert“HowshouldIknow?”inlameExcusesat2insert“Don’taskme.”inlameExcusesat0//0indexdoesappend//resultsinthefollowingarray//“ItwaslikethatwhenIgothere!”//“HowshouldIknow?”//“Idon’tknow!”//“Don’taskme.”]]></pre>利用方括號(hào)運(yùn)算符“[]”可以訪問數(shù)組元素。LameExcuses[2]=“Ididn’tdoit!”//replaces“HowshouldIknow”利用下面描述的刪除語句可以刪除單個(gè)的數(shù)組元素。處理多個(gè)屬性和多個(gè)對(duì)象通過計(jì)算該屬性的路徑可以實(shí)現(xiàn)訪問單個(gè)屬性的內(nèi)容,但是如果想要移動(dòng)或刪除一個(gè)屬性或者甚至復(fù)制整個(gè)對(duì)象會(huì)發(fā)生什么?腳本具有具體用于這些操作的多個(gè)語句。為了刪除對(duì)象、屬性或者數(shù)組元素,可以使用delete語句。在屬性的情況中,實(shí)際上將移動(dòng)由path規(guī)定的屬性或?qū)ο蟮嚼鴮?duì)象中,直到所有的腳本完成執(zhí)行。需要防止腳本鏈接到不再存在的屬性引用上,或者更糟糕的是,當(dāng)腳本刪除其自身或包含有腳本的對(duì)象時(shí)需要防止出錯(cuò)。deletepathdelete.homer.job//removesthejobpropertyfrom.homerdeteleform.simpsons//theyareleavingSpringfield該delete運(yùn)算符還能夠用于數(shù)組中的元素。與刪除屬性不同,數(shù)組元素可以直接刪除而不必放在垃圾中。使用方括號(hào)“[]”運(yùn)算符來規(guī)定應(yīng)該刪除數(shù)組中的哪個(gè)元素。//fromtheexampleabove___deleteform.simpsons.Homer.excuses[2]//removes“Ididn’tdoit!”fromthearray通過指定源路徑和目的路徑使用copy語句將屬性或?qū)ο髲囊粋€(gè)位置復(fù)制到另一個(gè)位置。復(fù)制指令的選擇參數(shù)是目的名稱和目的指針,其中目的名稱是一個(gè)用于對(duì)在新位置的屬性重命名的字符串表達(dá)式,目的指針是一個(gè)用作指針的整數(shù)表達(dá)式,在該指針處將屬性插入到層級(jí)中。如果未提供目的自變量,可以使用原始屬性名稱。類似地,可以將屬性復(fù)制到對(duì)象當(dāng)前包含的所有屬性后面的對(duì)象中??梢允÷赃@些選擇參數(shù)中的任何一個(gè),但是如果省略了兩個(gè),它們就必須以示出的次序使用。copysource_pathtodest_path&lt;asdest_name&gt;&lt;atdest_index&gt;//copythehomeworkpropertytobartwithoutchangingthename.lisa.homeworkto.bart//copythelocationpropertytohomerandrenameitdestinationcopy.donuts.locationto.homeras“destination”//copythelocationpropertytohomerasthethirdpropertycopy.donuts.locationto.homerat3復(fù)制語句不會(huì)重寫屬性或?qū)ο笕绻湓谀康膶?duì)象中已經(jīng)存在。在這種情況下,腳本必須在復(fù)制新屬性之前刪除在目的地的屬性。使用move語句將屬性放置在層級(jí)中任何其它適當(dāng)?shù)牡胤?。其語法和功能與copy語句相似,除了原始屬性或?qū)ο笤谄鋸那暗奈恢貌辉俅嬖?。movesource_pathtodest_path&lt;asdest_name&gt;&lt;atdest_index&gt;//movetheporkchoppropertyfromthemicrowavetohomer//renamingitasdinnermove.kitchen.microwave.porkchopto.homeras“dinner”//thecashpropertywillberenamedallowanceandownedbvbartmove.homer.wallet.cashto.bartas“allowance”前面三個(gè)語句每一個(gè)可以使用簡單的屬性(字符串、整數(shù)、布爾值、腳本或別名)或?qū)ο蠊ぷ?。給一個(gè)具有不存在的最終屬性的路徑賦值將創(chuàng)建一個(gè)簡單屬性,但是不能采用相同的方式自動(dòng)產(chǎn)生對(duì)象。通過提供期望對(duì)象的類別名和錄以及要?jiǎng)?chuàng)建的對(duì)象名稱,由create語句創(chuàng)建對(duì)象。create“class_name”asdest_path//createanewbuttonatthetopleveloftheformcreate“button”asform.newButton//createadataobjectcalledFlandersforNedandfamilycreate“data”asform.neighbor.Flanders處理長的路徑可能是麻煩的并且容易出錯(cuò),所以腳本的最后一個(gè)特征使編劇能夠簡化操作復(fù)雜的路徑。通過將對(duì)象的路徑賦值給一個(gè)局部變量,該變量變成一種訪問包含在路徑中的屬性的方式。每當(dāng)使用變量時(shí)可以不重新計(jì)算路徑,這就提高了性能。<prelisting-type="program-listing"><![CDATA[pet=form.Springfield.simpsons.santasLittleHelper//petnowreferstosantasLittleHelperrepeat.bart.freetime//bartplayswiththedogwhennotbusypet.playtime=pet.playtime+1//checktoseeifthepethasplayedenoughifpet.tired()//don’twearthelittleguyoutbreakendend]]></pre>簡化操作具有獨(dú)特的性質(zhì),在于即使將對(duì)象移動(dòng)到層級(jí)中的另一點(diǎn),它們也將跟隨對(duì)象。<prelisting-type="program-listing"><![CDATA[pet=form.Springfield.simpsons.santasLittleHelper//petnowreferstosantasLittleHelpermovepettoformas“l(fā)ostPet”//nowtheobjecthasbeenmovedandrenamedaslostPetifforform.Springfield.simpsons.santasLittleHelper.tired()//thisobjectgotmovedsothispathisn’tvalid//whichwillthrowanexceptionendifpet.tired()//nowcallsform.lostPet.tiredpet.goHome()end]]></pre>調(diào)用腳本和發(fā)送信息腳本常常要處理它從窗體接收的信息,例如動(dòng)作腳本處理按鈕被點(diǎn)擊或者計(jì)時(shí)器到期的信息,但是那些腳本將依靠其它腳本來執(zhí)行一些工作。此外,對(duì)數(shù)據(jù)和表格的服務(wù)器請(qǐng)求常常以函數(shù)調(diào)用的形式編寫。一種函數(shù)調(diào)用使用下面的語法script_path([parameters][echoechoParameters][optionsoptionParameters])調(diào)用腳本的動(dòng)作實(shí)際上構(gòu)成了一條具有調(diào)用名稱的NACHOS信息,并將其發(fā)送給由路徑規(guī)定的對(duì)象。參考圖11form.simpsons.Bart.annoy()//callstheannoyscript//whichactuallycreatesanannoymessageandsendsit//totheobjectcalled“Bart”該函數(shù)調(diào)用的最后一個(gè)組件annoy實(shí)際是腳本的名稱或被發(fā)送的信息。許多調(diào)用僅僅具有參數(shù)而沒有附加的回應(yīng)參數(shù)或信息選項(xiàng)。信息的接受者可以檢驗(yàn)這些參數(shù)。例如,為了得到股票報(bào)價(jià)我們可以調(diào)用quote=aol.getStockQuote(sym”aol”)在上面的實(shí)例中,aol是處理信息“getStockQuote”的對(duì)象。此外,我們來看命名參數(shù)的第一個(gè)實(shí)例。函數(shù)的參數(shù)列表是一個(gè)逗號(hào)分開的表達(dá)式列表。每一表達(dá)式可以在名稱之后然后是一個(gè)冒號(hào)。在這種情況下,sym是參數(shù)名稱,“aol”是參數(shù)的值。實(shí)際上,可以使用作為信息對(duì)象“getStockQuote”的屬性的值創(chuàng)建和復(fù)制每一參數(shù),這就是為什么應(yīng)該給參數(shù)命名。另一方面這允許信息的處理程序按照名稱查詢參數(shù),而不是依靠在參數(shù)列表中出現(xiàn)的次序。如果沒有提供名稱,則創(chuàng)建一個(gè)參數(shù)作為稱為“param”的屬性。另一個(gè)實(shí)例是database.save(path”homerSimpson”,streamform.simpsons.homer)這將homer對(duì)象在數(shù)據(jù)庫中保存為homerSimpson。該保存的數(shù)據(jù)庫信息需要兩個(gè)參數(shù)路徑,即在數(shù)據(jù)庫中保存屬性的錄,和流將保存的對(duì)象或?qū)傩缘穆窂健R驗(yàn)橐呀?jīng)命名了這些參數(shù),所有能夠毫無意義地顛倒次序。database.save(streamform.simpsons.homer,path”homerSimpson”)//sameastheabovecall一些信息需要定義附加的選項(xiàng),以便規(guī)定一些事項(xiàng),例如或者應(yīng)該對(duì)信息加密,或者在由于系統(tǒng)沒有接收到響應(yīng)而暫停之前應(yīng)該等待多長時(shí)間??梢詫⑦@些參數(shù)輸入到信息的選項(xiàng)框中。aol.sendPrivateMessage(destmyBuddy,messagetext,\optionsencrypttrue)這將允許本地實(shí)現(xiàn)在發(fā)送信息之前可以處理各個(gè)選項(xiàng)。只有由內(nèi)核處理的選項(xiàng)是“timeout”,它以毫秒規(guī)定了內(nèi)核在給出異常之前應(yīng)該等待響應(yīng)多長時(shí)間?;貞?yīng)參數(shù)可以用于下面討論的異步信息。按照值而不是按引用傳送所有的簡單屬性(例如字符串、整數(shù)、布爾值、二進(jìn)制、腳本)。通常對(duì)象可傳送用作一個(gè)隱含引用的別名。修改包含在作為參數(shù)接收的對(duì)象中的屬性將修改原始對(duì)象。如果包含別名的信息離開本地層級(jí),例如發(fā)送給主機(jī)的請(qǐng)求,那么信息中的別名將由別名引用的對(duì)象副本替換。通常這是期望的行為,但是通過使用@運(yùn)算符還能夠超越這個(gè)。//savesacopyof‘me’inthedatabasedatabase.save(path”test1”,streamme)//savesanaliasto‘me’inthedatabasedatabase.save(path”test2”,stream@me)有時(shí)對(duì)象可以具有響應(yīng)信息的代碼。如果該對(duì)象具有這種能夠響應(yīng)給定信息的本地代碼,并且包含對(duì)同一信息的腳本處理程序,那么腳本處理程序?qū)⒊奖镜卮a。假想地,本地應(yīng)用程序可能具有代碼處理稱為shutdown()的信息,但是腳本可能用于截取該信息,并確定是否調(diào)用程序具有特權(quán)來發(fā)布這種命令。在這種情況下,在確認(rèn)調(diào)用程序的特權(quán)之后,腳本可以代替效用函數(shù)passMessage(),它將在調(diào)用點(diǎn)取消腳本,并允許對(duì)象以其本地代碼處理信息。當(dāng)別名用作信息中的參數(shù)時(shí)其具有特定的行為。如果信息的接受者對(duì)象是本地的(即對(duì)象在與和發(fā)送端相同的運(yùn)行時(shí)間根的條件下存在于某處),那么別名屬性將作為信息中的別名發(fā)送。因?yàn)榻邮苷吣軌蚪馕鰧?duì)象的別名,從而獲得別名引用的對(duì)象擁有的任何屬性,所以會(huì)發(fā)生這種情況。然而,如果信息被發(fā)出本地環(huán)境,那么別名屬性將由其引用的對(duì)象替換。這可能導(dǎo)致信息的大小急劇增加,因?yàn)榈讓拥膶?duì)象和其包含的所有屬性將被復(fù)制到信息中。在許多情況中,這是期望的結(jié)果,但是如果當(dāng)在電線上發(fā)送時(shí)則不應(yīng)該解析別名,可以使用@運(yùn)算符將其標(biāo)記為一個(gè)持久別名。aol.setUpdateListener(listener@form.proxy)//thiswillsendan//aliasoftheproxyobjectinthesetUpdateListenermessagetothe//aolservice,ratherthanancopyoftheproxyobject.塊調(diào)用函數(shù)調(diào)用的缺省行為是阻塞直到函數(shù)被調(diào)用返回。這允許調(diào)用腳本直接處理腳本而不是使另一個(gè)腳本處理響應(yīng)。再參考圖9,股票報(bào)價(jià)的最后一個(gè)值可以使用如下的庫程序debug()顯示debug(aol.getStockQuote(sym”aol”).stream.aol.lastValue)debug(“finished”)//output//45.300000//finished在該最后的語句中有許多運(yùn)行的程序(goingon)。首先,發(fā)送getStockQuote信息給services.aol對(duì)象。腳本將等待直到在執(zhí)行任何更多的語句之前響應(yīng)返回。只要應(yīng)答信息返回,那么后綴路徑.stream.aol.lastValue可從信息的參數(shù)對(duì)象得到期望的數(shù)據(jù)。這可以使用庫程序debug()顯示。異步調(diào)用通過將反轉(zhuǎn)的字async放在函數(shù)調(diào)用前面,腳本將發(fā)送信息給對(duì)象并繼續(xù)執(zhí)行而不是等待響應(yīng)。這更像是發(fā)送信息而不是調(diào)用函數(shù)。通常這意味著另一個(gè)腳本也將處理信息的響應(yīng)。使用異步發(fā)送信息并在另一腳本中處理響應(yīng)的兩個(gè)腳本可以創(chuàng)建上面的實(shí)例。<prelisting-type="program-listing"><![CDATA[//1stscriptasyncaol.getStockQuote(sym”aol”)debug(“finished”)//2ndscript-loadComplete//containedinthesameobjectthatsenttherequest//handlestheresponsemessagedebug(params.stream.aol.lastValue)//output-//finished//45.300000]]></pre>應(yīng)該注意第一腳本顯示“finished”而不是等待響應(yīng)信息。異步調(diào)用提出了一個(gè)在塊調(diào)用中沒有發(fā)現(xiàn)的問題處理響應(yīng)的腳本與啟動(dòng)請(qǐng)求的腳本不同。有時(shí)處理響應(yīng)的腳本必須知道某些關(guān)于原始請(qǐng)求的信息,以便適當(dāng)?shù)靥幚眄憫?yīng)。在這種情況下,回應(yīng)參數(shù)有利于將信息從請(qǐng)求傳送到響應(yīng)。在回應(yīng)塊中被傳送的任何參數(shù)將被移動(dòng)到信息響應(yīng)并送還。在塊或回應(yīng)參數(shù)之前如下使用echo關(guān)鍵字asyncaol.ping(payload..dataechotimestampmyServices.time())//ahypotheticalcalltopingtheserver.//theresponsewouldhavethetimestampparameterasan//echoparameter.Serveralpingscouldbesentasynchronously//andtheresponseroundtriptimecouldbedeterminedaswell//asseeingiftheycameoutoforder應(yīng)該謹(jǐn)慎地使用回應(yīng)參數(shù),因?yàn)樗械幕貞?yīng)參數(shù)是在網(wǎng)絡(luò)上來回發(fā)送的。返回值return語句允許腳本在到達(dá)結(jié)尾之前結(jié)束運(yùn)行或者將值傳送回調(diào)用程序。計(jì)算跟隨return語句的任何表達(dá)式,其結(jié)果將返回到調(diào)用了當(dāng)前運(yùn)行腳本的腳本。return//terminatethescriptreturnexpression//passthevalueofexpressionback異常處理腳本允許程序員使用try/catch塊處理腳本中的運(yùn)行時(shí)間錯(cuò)誤。其語法如下trystatementscatchstatementsend在try和catch語句之間產(chǎn)生的任何錯(cuò)誤將導(dǎo)致腳本跳出跟隨catch語句的語句列表的開頭。在catch塊內(nèi)部通過規(guī)定路徑error,腳本能夠引用特定的對(duì)象。該對(duì)象具有整數(shù)屬性type和字符串屬性message,這兩個(gè)屬性分別給出了錯(cuò)誤數(shù)量和錯(cuò)誤的簡略說明。try//.busywillbecreatedifitdoesn’texist,but___.homer.busy=.homer.studycatch//errorifhomer.studydoesnotexist//errorobjectonlyaccessiblewithinacatchblockdebug(“***error“&amp;error.type&amp;“”&amp;error.message)end庫函數(shù)VM為公共使用的特征例如字符串操作和隨機(jī)數(shù)字的產(chǎn)生提供了一組內(nèi)置的函數(shù)。這些函數(shù)的名稱是不分大小寫的。然而,與發(fā)送信息或代替腳本不同,這些庫函數(shù)的參數(shù)不能命名,而是依靠在自變量列表中的出現(xiàn)次序。一些參數(shù)具有如下面具體列出的缺省值。當(dāng)調(diào)用特定函數(shù)時(shí)通過包括該參數(shù)能夠超越該缺省值。當(dāng)存在兩個(gè)缺省的參數(shù)時(shí),使用參數(shù)的表觀類型來判別哪個(gè)值正在被超越。一個(gè)實(shí)例是find()函數(shù),其具有源字符串、搜索模式、缺省的開始位置和忽略情況的缺省布爾值。如果在調(diào)用中僅僅列出了三個(gè)參數(shù),那么整數(shù)值將規(guī)定開始位置,而布爾值將表示不分大小寫。效用函數(shù)數(shù)學(xué)函數(shù)屬性函數(shù)字符串函數(shù)不同于C/C++的庫函數(shù),在本庫中的函數(shù)不能修改源字符串,且所有的指針是1基址的而不是0基址的,函數(shù)返回操作的結(jié)果,但是不改變地保留原始自變量。在許多情況中需要將結(jié)果賦值回到源字符串。(e.g..foo=replace(.foo,“apples”,“oranges”))盡管這里參考優(yōu)選實(shí)施例描述了本發(fā)明,但是本領(lǐng)域技術(shù)人員將容易理解在不脫離本發(fā)明的精神的條件下,其它應(yīng)用程序可以代替這里描述的那些應(yīng)用程序。因此,本發(fā)明應(yīng)該只由下面包括的權(quán)利要求限定。權(quán)利要求1.一種用于終端系統(tǒng)的框架結(jié)構(gòu)的方法。其包括以下步驟提供一個(gè)服務(wù)器代理終端;在所述服務(wù)器代理終端上提供裝置,用于接收來自終端系統(tǒng)的終端信息請(qǐng)求;在所述服務(wù)器代理終端上提供服務(wù)器確定裝置,用于確定適當(dāng)?shù)姆?wù)器以服務(wù)所述終端請(qǐng)求;發(fā)送所述終端請(qǐng)求給所述適當(dāng)?shù)姆?wù)器;接收對(duì)所述終端請(qǐng)求的所述適當(dāng)服務(wù)器的響應(yīng);其中所述服務(wù)器代理終端用作所述終端系統(tǒng)的代理終端,對(duì)所述終端系統(tǒng)進(jìn)行大量的數(shù)據(jù)處理;其中所述服務(wù)器代理終端使用通用的數(shù)據(jù)表格更新具有數(shù)據(jù)、表示層和邏輯組件的所述終端系統(tǒng);其中所述服務(wù)器代理終端將原始數(shù)據(jù)與所述響應(yīng)的表示層方面分離,并將所述數(shù)據(jù)導(dǎo)入所述通用的數(shù)據(jù)表格中;發(fā)送所述數(shù)據(jù)給所述終端系統(tǒng);其中所述服務(wù)器代理終端接收表示層和邏輯組件更新;以及其中所述表示層組件更新適用于特殊類型的終端設(shè)備。2.如權(quán)利要求1所述的方法,其中所述邏輯組件更新在不同類型的終端設(shè)備之間共享。3.如權(quán)利要求1所述的方法,還包括以下步驟在所述終端系統(tǒng)上提供一個(gè)單級(jí)后臺(tái)緩存;以及其中所述終端系統(tǒng)對(duì)有關(guān)用戶請(qǐng)求的任何表示層或邏輯組件校驗(yàn)所述單級(jí)后臺(tái)緩存;其中如果有關(guān)用戶請(qǐng)求的任何組件在所述單級(jí)后臺(tái)緩存中存在,那么所述終端系統(tǒng)校驗(yàn)所述組件是否已經(jīng)到期;其中所述終端系統(tǒng)使用所述組件服務(wù)該用戶請(qǐng)求。4.如權(quán)利要求3所述的方法,其中如果所述組件已經(jīng)到期,則所述終端系統(tǒng)從所述服務(wù)器代理終端請(qǐng)求任何當(dāng)前版本的到期組件,其中所述服務(wù)器代理終端校驗(yàn)請(qǐng)求終端的表示層和邏輯組件的當(dāng)前版本,如果表示層和邏輯組件中的任何一個(gè)需要更新,則所述服務(wù)器代理終端檢索最新版本的表示層和邏輯組件中的任何一個(gè),并將其發(fā)送給請(qǐng)求終端,以及其中請(qǐng)求終端在所述單級(jí)后臺(tái)緩存中存儲(chǔ)最新版本的表示層和邏輯組件中的任何一個(gè)。5.如權(quán)利要求1所述的方法,還包括以下步驟發(fā)送所述表示層和邏輯組件更新給一個(gè)終端系統(tǒng)。6.如權(quán)利要求1所述的方法,其中所述終端系統(tǒng)使用所述數(shù)據(jù)和表示層組件創(chuàng)建給用戶的顯示。7.如權(quán)利要求1所述的方法,其中為了其它的顯示目的所述終端系統(tǒng)重新使用所述數(shù)據(jù)組件。8.如權(quán)利要求1所述的方法,還包括以下步驟在所述服務(wù)器代理終端上提供裝置,用于將終端系統(tǒng)的狀態(tài)保存在存儲(chǔ)設(shè)備上;以及其中當(dāng)終端系統(tǒng)改變了與所述服務(wù)器代理終端的連接方法或者喪失了與所述服務(wù)器代理終端的覆蓋率時(shí),保存的終端系統(tǒng)的狀態(tài)允許所述服務(wù)器代理終端繼續(xù)終端系統(tǒng)的會(huì)話。9.如權(quán)利要求1所述的方法,還包括以下步驟提供一種腳本語言;其中所述邏輯組件更新用所述腳本語言編寫;其中所述服務(wù)器代理終端將用所述腳本語言編寫的腳本編譯成可執(zhí)行的字節(jié)碼;其中所述服務(wù)器代理終端通過發(fā)送可執(zhí)行字節(jié)碼給所述終端系統(tǒng)更新所述終端系統(tǒng)的特征;以及其中所述終端系統(tǒng)執(zhí)行響應(yīng)用戶輸入的所述可執(zhí)行字節(jié)碼。10.如權(quán)利要求9所述的方法,其中使用所述腳本語言終端系統(tǒng)的表示層方面是可控制的。11.如權(quán)利要求1所述的方法,其中在所述服務(wù)器代理終端和所述終端系統(tǒng)之間的通信是通過XML數(shù)據(jù)流的二進(jìn)制編碼。12.一種用于動(dòng)態(tài)配置終端系統(tǒng)的方法,其包括以下步驟提供一個(gè)主機(jī)服務(wù)器;提供一種腳本語言;其中所述主機(jī)服務(wù)器將用所述腳本語言編寫的腳本編譯成可執(zhí)行字節(jié)碼;其中當(dāng)所述主機(jī)服務(wù)器從終端系統(tǒng)接收到特定于數(shù)據(jù)表示層組件和/或可執(zhí)行字節(jié)碼的請(qǐng)求時(shí),校驗(yàn)是否終端系統(tǒng)的原始表示層組件和/或可執(zhí)行字節(jié)碼已經(jīng)到期其中如果在終端系統(tǒng)上的原始表示層組件和/或可執(zhí)行字節(jié)碼已經(jīng)到期,通過將更新的表示層組件和/或可執(zhí)行字節(jié)碼發(fā)送給終端系統(tǒng),所述主機(jī)服務(wù)器更新終端系統(tǒng)的特征,;以及其中終端系統(tǒng)執(zhí)行響應(yīng)用戶輸入的表示層組件和/或可執(zhí)行字節(jié)碼。13.如權(quán)利要求12所述的方法,其中所述腳本定義程序邏輯。14.如權(quán)利要求12所述的方法,其中所述腳本創(chuàng)建和控制用戶界面顯示。15.如權(quán)利要求12所述的方法,其中所述終端系統(tǒng)接收來自被分離成數(shù)據(jù)和表示層組件的所述主機(jī)服務(wù)器的被請(qǐng)求的網(wǎng)絡(luò)信息。16.一種用于終端系統(tǒng)的框架結(jié)構(gòu)的裝置,包括一個(gè)服務(wù)器代理終端;在所述服務(wù)器代理終端上的裝置,用于接收來自終端系統(tǒng)的終端信息請(qǐng)求;在所述服務(wù)器代理終端上的服務(wù)器確定裝置,用于確定適當(dāng)?shù)姆?wù)器以服務(wù)所述終端請(qǐng)求;用于發(fā)送所述終端請(qǐng)求給所述適當(dāng)?shù)姆?wù)器的模塊;用于接收對(duì)所述終端請(qǐng)求的所述適當(dāng)服務(wù)器的響應(yīng)的模塊;其中所述服務(wù)器代理終端用作所述終端系統(tǒng)的代理終端,對(duì)所述終端系統(tǒng)進(jìn)行大量的數(shù)據(jù)處理;其中所述服務(wù)器代理終端使用通用的數(shù)據(jù)表格更新具有數(shù)據(jù)、表示層和邏輯組件的所述終端系統(tǒng);其中所述服務(wù)器代理終端將原始數(shù)據(jù)與所述響應(yīng)的表示層方面分離,并將所述數(shù)據(jù)導(dǎo)入所述通用的數(shù)據(jù)表格中;用于發(fā)送所述數(shù)據(jù)給所述終端系統(tǒng)的模塊;其中所述服務(wù)器代理終端接收表示層和邏輯組件更新;以及其中所述表示層組件更新適用于特殊類型的終端設(shè)備。17.如權(quán)利要求16所述的裝置,其中所述邏輯組件更新在不同類型的終端設(shè)備之間共享。18.如權(quán)利要求16所述的裝置,其還包括在所述終端系統(tǒng)上的單級(jí)后臺(tái)緩存;以及其中所述終端系統(tǒng)對(duì)有關(guān)用戶請(qǐng)求的任何表示層或邏輯組件校驗(yàn)所述單級(jí)后臺(tái)緩存;其中如果有關(guān)用戶請(qǐng)求的任何組件在所述單級(jí)后臺(tái)緩存中存在,那么所述終端系統(tǒng)校驗(yàn)所述組件是否已經(jīng)到期;其中所述終端系統(tǒng)使用所述組件服務(wù)該用戶請(qǐng)求。19.如權(quán)利要求18所述的裝置,其中如果所述組件已經(jīng)到期,則所述終端系統(tǒng)從所述服務(wù)器代理終端請(qǐng)求任何當(dāng)前版本的到期組件,其中所述服務(wù)器代理終端校驗(yàn)請(qǐng)求終端的表示層和邏輯組件的當(dāng)前版本,如果表示層和邏輯組件中的任何一個(gè)需要更新,則所述服務(wù)器代理終端檢索最新版本的表示層和邏輯組件中的任何一個(gè),并將其發(fā)送給請(qǐng)求終端,以及其中請(qǐng)求終端在所述單級(jí)后臺(tái)緩存中存儲(chǔ)最新版本的表示層和邏輯組件中的任何一個(gè)。20.如權(quán)利要求16所述的裝置,其還包括用于將所述表示層和邏輯組件發(fā)送給終端系統(tǒng)的模塊。21.如權(quán)利要求16所述的裝置,其中所述終端系統(tǒng)使用所述數(shù)據(jù)和表示層組件創(chuàng)建給用戶的顯示。22.如權(quán)利要求16所述的裝置,其中為了其它的顯示目的所述終端系統(tǒng)重新使用所述數(shù)據(jù)組件。23.如權(quán)利要求16所述的裝置,其還包括在所述服務(wù)器代理終端上的裝置,用于將終端系統(tǒng)的狀態(tài)保存在存儲(chǔ)設(shè)備上;以及其中當(dāng)終端系統(tǒng)改變了與所述服務(wù)器代理終端的連接方法或者喪失了與所述服務(wù)器代理終端的覆蓋率時(shí),保存的終端系統(tǒng)的狀態(tài)允許所述服務(wù)器代理終端繼續(xù)終端系統(tǒng)的會(huì)話。24.如權(quán)利要求16所述的裝置,其還包括一種腳本語言;其中所述邏輯組件更新用所述腳本語言編寫;其中所述服務(wù)器代理終端將用所述腳本語言編寫的腳本編譯成可執(zhí)行的字節(jié)碼;其中所述服務(wù)器代理終端通過發(fā)送可執(zhí)行字節(jié)碼給所述終端系統(tǒng)更新所述終端系統(tǒng)的特征;以及其中所述終端系統(tǒng)執(zhí)行響應(yīng)用戶輸入的所述可執(zhí)行字節(jié)碼。25.如權(quán)利要求24所述的裝置,其中使用所述腳本語言終端系統(tǒng)的表示層方面是可控制的。26.如權(quán)利要求16所述的裝置,其中在所述服務(wù)器代理終端和所述終端系統(tǒng)之間的通信是通過XML數(shù)據(jù)流的二進(jìn)制編碼。27.一種用于動(dòng)態(tài)配置終端系統(tǒng)的裝置,其包括一個(gè)主機(jī)服務(wù)器;一種腳本語言;其中所述主機(jī)服務(wù)器將用所述腳本語言編寫的腳本編譯成可執(zhí)行字節(jié)碼;其中當(dāng)所述主機(jī)服務(wù)器從終端系統(tǒng)接收到特定于數(shù)據(jù)表示層組件和/或可執(zhí)行字節(jié)碼的請(qǐng)求時(shí),校驗(yàn)是否終端系統(tǒng)的原始表示層組件和/或可執(zhí)行字節(jié)碼已經(jīng)到期其中如果在終端系統(tǒng)上的原始表示層組件和/或可執(zhí)行字節(jié)碼已經(jīng)到期,通過將更新的表示層組件和/或可執(zhí)行字節(jié)碼發(fā)送給終端系統(tǒng),所述主機(jī)服務(wù)器更新終端系統(tǒng)的特征,;以及其中終端系統(tǒng)執(zhí)行響應(yīng)用戶輸入的表示層組件和/或可執(zhí)行字節(jié)碼。28.如權(quán)利要求27所述的裝置,其中所述腳本定義程序邏輯。29.如權(quán)利要求27所述的裝置,其中所述腳本創(chuàng)建和控制用戶界面顯示。30.如權(quán)利要求27所述的裝置,其中所述終端系統(tǒng)接收來自被分離成數(shù)據(jù)和表示層組件的所述主機(jī)服務(wù)器的被請(qǐng)求的網(wǎng)絡(luò)信息。全文摘要一種手持終端框架系統(tǒng)提供了一個(gè)服務(wù)器代理終端,該服務(wù)器代理終端為網(wǎng)絡(luò)上獲得的信息服務(wù)終端請(qǐng)求,確定最合適的服務(wù)器來提供被請(qǐng)求的信息,以及在因特網(wǎng)和/或內(nèi)部網(wǎng)上將信息請(qǐng)求包發(fā)送給該服務(wù)器。信息請(qǐng)求的服務(wù)器響應(yīng)由服務(wù)器代理終端接收。該服務(wù)器代理終端將響應(yīng)信息分離成合適的數(shù)據(jù)組件。將數(shù)據(jù)組件發(fā)送給合適的終端。表示層和邏輯組件臨時(shí)存儲(chǔ)在終端的單級(jí)后臺(tái)緩存中。一個(gè)終端將繼續(xù)使用已經(jīng)按照或者處于單級(jí)后臺(tái)緩存中的表示層和邏輯組件服務(wù)當(dāng)前的用戶請(qǐng)求。當(dāng)用戶隨后使用時(shí),通過終端可檢索由服務(wù)器代理終端發(fā)送并存儲(chǔ)在單級(jí)后臺(tái)緩存中的任何更新。該終端的狀態(tài)由服務(wù)器代理終端保存,使得當(dāng)用戶例如從有線連接改變?yōu)闊o線連接時(shí)終端不會(huì)掉線。本發(fā)明包括一種腳本語言,通過允許主機(jī)在任何時(shí)候修改終端行為或者添加新的特征,該腳本語言可提供終端的邏輯組件,并賦予終端極大的靈活性。文檔編號(hào)H04L29/06GK1669018SQ03816776公開日2005年9月14日申請(qǐng)日期2003年6月16日優(yōu)先權(quán)日2002年7月15日發(fā)明者道爾克森·理查德,貝斯布里斯·大衛(wèi)申請(qǐng)人:美國在線服務(wù)公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
夏河县| 麻城市| 红安县| 肥乡县| 乐亭县| 沾益县| 佳木斯市| 汽车| 东阳市| 集安市| 广饶县| 雷山县| 岳普湖县| 凤庆县| 津南区| 湟源县| 蒙自县| 吉安市| 大埔县| 广丰县| 博白县| 辉南县| 金门县| 张掖市| 淅川县| 理塘县| 抚顺县| 屯昌县| 万荣县| 邹平县| 固始县| 营口市| 肃南| 神池县| 定西市| 新宾| 鹤庆县| 玉龙| 兴义市| 响水县| 四子王旗|