Remote Scripting進(jìn)階圖文說(shuō)明教程---遠(yuǎn)程執(zhí)行服務(wù)器腳本
發(fā)表時(shí)間:2024-01-11 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]復(fù)雜的 Web 應(yīng)用程序既調(diào)用客戶腳本又調(diào)用服務(wù)器腳本。客戶腳本經(jīng)常用于對(duì)應(yīng)用程序的用戶接口進(jìn)行編程──例如,為了動(dòng)態(tài)改變 Web 頁(yè)文本,對(duì)用戶動(dòng)作,比如雙擊作出反應(yīng),并執(zhí)行諸如驗(yàn)證這樣的面向客戶的任務(wù)?蛻裟_本在瀏覽器中局部執(zhí)行,這樣就向用戶提供了一種生動(dòng)的、反應(yīng)迅速的接口。 對(duì)比來(lái)說(shuō),服務(wù)器...
復(fù)雜的 Web 應(yīng)用程序既調(diào)用客戶腳本又調(diào)用服務(wù)器腳本?蛻裟_本經(jīng)常用于對(duì)應(yīng)用程序的用戶接口進(jìn)行編程──例如,為了動(dòng)態(tài)改變 Web 頁(yè)文本,對(duì)用戶動(dòng)作,比如雙擊作出反應(yīng),并執(zhí)行諸如驗(yàn)證這樣的面向客戶的任務(wù)?蛻裟_本在瀏覽器中局部執(zhí)行,這樣就向用戶提供了一種生動(dòng)的、反應(yīng)迅速的接口。
對(duì)比來(lái)說(shuō),服務(wù)器腳本是用來(lái)對(duì)某個(gè)應(yīng)用程序的末段編程的。這經(jīng)常引起對(duì)某個(gè)數(shù)據(jù)庫(kù)的存取動(dòng)作,或者執(zhí)行中間層業(yè)務(wù)邏輯。服務(wù)器腳本也用于創(chuàng)建較大范圍的應(yīng)用程序:也就是可能通過(guò)多種不同類型的瀏覽器(每個(gè)都有不同存取能力)進(jìn)行存取的應(yīng)用程序。
但是客戶和服務(wù)器腳本是互斥的。當(dāng)某個(gè)頁(yè)首次請(qǐng)求時(shí),服務(wù)器可能運(yùn)行服務(wù)器腳本,并將頁(yè)傳遞給瀏覽器,然后瀏覽器就可以運(yùn)行客戶腳本。不過(guò),如果該頁(yè)上的服務(wù)器腳本有必要再次運(yùn)行的話,那么必須將該頁(yè)提交回服務(wù)器,服務(wù)器可以有效地重新運(yùn)行該頁(yè)。對(duì)頁(yè)面上控件狀態(tài)和腳本中值的維護(hù)可能涉及到在瀏覽器和服務(wù)器之間來(lái)回傳遞信息的一個(gè)復(fù)雜的 scripting 過(guò)程。另外,客戶和服務(wù)器之間的折返過(guò)程涉及到顯示某個(gè)應(yīng)用程序的重載過(guò)程。
一種折衷方案是 remote scripting。Remote scripting 使得用戶可以在客戶腳本中工作,但要調(diào)用某個(gè) ASP 頁(yè)中的方法(函數(shù)或者例程)。實(shí)際上,用戶可以象調(diào)用本地例程那樣調(diào)用服務(wù)器腳本,不過(guò)它們?nèi)匀贿\(yùn)行在服務(wù)器上,并具有對(duì)服務(wù)器能力的所有存取權(quán)限。由于用戶從不把當(dāng)前頁(yè)留作調(diào)用服務(wù)器腳本之用,因此頁(yè)的狀態(tài)仍然保持。
用戶可以在下列任務(wù)中使用 remote scripting:
當(dāng)用戶繼續(xù)和某個(gè)數(shù)據(jù)輸入表單交互作用時(shí),服務(wù)器上的數(shù)據(jù)檢查和數(shù)據(jù)驗(yàn)證。
更新來(lái)自服務(wù)器的頁(yè)面中的信息而無(wú)須刷新屏幕。
Remote Scripting 如何工作
Remote scripting 是作為一個(gè)函數(shù)庫(kù)來(lái)實(shí)現(xiàn)的,當(dāng)用戶希望運(yùn)行某個(gè)服務(wù)器方法時(shí),用戶從客戶腳本中調(diào)用這些函數(shù)。當(dāng)用戶調(diào)用某種服務(wù)器方法時(shí),請(qǐng)求即被傳遞到瀏覽器中異步運(yùn)行的一個(gè)代理過(guò)程中(在實(shí)現(xiàn)過(guò)程中,代理是作為一個(gè) Java applet 來(lái)實(shí)現(xiàn)的。)該代理過(guò)程發(fā)送一個(gè)請(qǐng)求到包含用戶調(diào)用方法的 ASP 頁(yè)的服務(wù)器中。
服務(wù)器加載 ASP 頁(yè),而且該 ASP 頁(yè)上的一個(gè)特殊例程將用戶的請(qǐng)求調(diào)度到正確函數(shù)。如果方法有返回值,那么該值即被發(fā)送回代理過(guò)程,該過(guò)程將之包裝為一個(gè)對(duì)象 ──一個(gè)調(diào)用對(duì)象 ──它包含了返回值以及其他有用信息的屬性。
當(dāng)用戶在客戶腳本中對(duì)服務(wù)器方法進(jìn)行調(diào)用時(shí),可以在兩種方式中選擇其一來(lái)完成:
同步 用戶腳本調(diào)用遠(yuǎn)程過(guò)程,并等待其返回。如果用戶在處理之前需要遠(yuǎn)程過(guò)程結(jié)果的話,那么就有必要這么做。
異步 用戶腳本對(duì)某個(gè)遠(yuǎn)程腳本進(jìn)行調(diào)用,然后繼續(xù)處理。該頁(yè)保持有效狀態(tài),以便于用戶處理。如果某個(gè)調(diào)用要持續(xù)較長(zhǎng)一段時(shí)間,那么就有必要使用異步調(diào)用。
Remote Scripting 的部件
為了實(shí)現(xiàn) remote scripting,除了用戶自己的客戶 (.htm) 文件和服務(wù)器 (.asp) 文件外,還需要下面的文件:
Rs.htm 包含了用戶在自己的 .htm 文件中初始化 remote scripting、執(zhí)行遠(yuǎn)程過(guò)程、檢查遠(yuǎn)程調(diào)用狀態(tài),以及獲得方法結(jié)果時(shí)所要使用的方法。
Rs.asp 包含了用戶在 .asp 文件中初始化服務(wù)器端的 remote scripting,以及在自己的頁(yè)中調(diào)度到適當(dāng)函數(shù)時(shí)所要調(diào)用的方法。
Rsproxy.class 包含客戶和服務(wù)器頁(yè)之間通信時(shí) applet 的 Java 類文件(對(duì)象代碼)。
這些文件充當(dāng)用戶可以在自己的文件中使用的文件庫(kù)。一般說(shuō)來(lái),用戶只需要簡(jiǎn)單地將相關(guān)文件(Rs.htm 或者 Rs.asp)包括進(jìn)自己的客戶或者服務(wù)器頁(yè)中,然后遵照所需調(diào)用方法進(jìn)行處理。有關(guān)詳細(xì)信息,請(qǐng)參閱 在客戶頁(yè)中使得 Remote Scripting 有效 以及 在服務(wù)器頁(yè)中使得 Remote Scripting 有效。
在用戶的客戶頁(yè)中,用戶引用 Rs.htm,這使得該文件中的方法對(duì)于用戶服務(wù)器腳本來(lái)說(shuō)是有效的。對(duì) Rsproxy applet 的調(diào)用就在這些方法中。當(dāng)用戶創(chuàng)建服務(wù)器頁(yè)的時(shí)候,用戶將服務(wù)器端的一個(gè) INCLUDE 語(yǔ)句 ─ 該語(yǔ)句引用 Rs.asp 文件 ─ 包括進(jìn)去。伴隨客戶文件中的 Rs.htm,這樣做使得所需要的方法在服務(wù)器頁(yè)上成為有效的。
所有文件都必須在服務(wù)器上是有效的。用戶可以將它們放置到任何合適的地方。不過(guò),對(duì)于用戶的客戶和服務(wù)器文件來(lái)說(shuō),當(dāng)它們從服務(wù)器發(fā)出請(qǐng)求時(shí),路徑都必須是有效的。缺省的情況是,remote scripting 過(guò)程假設(shè)這些文件在用戶服務(wù)器或者工程的虛擬根目錄外的一個(gè)名為 _ScriptLibrary 的文件夾中是有效的。如果用戶不將它們放到那里,那么要特別注意它們的路徑,因?yàn)樵趧?chuàng)建客戶和服務(wù)器頁(yè)時(shí),用戶需要指定之。
Remote Scripting 和安全性
Remote scripting 提供和 Java applet 或 IFrames 同樣級(jí)別的安全性。為了確保 remote scripting 不違反服務(wù)器安全性,用戶不能將結(jié)構(gòu)化數(shù)據(jù)(包括對(duì)象)作為參數(shù)傳遞給某個(gè)服務(wù)器文本來(lái)執(zhí)行。另外,用戶進(jìn)行 remote scripting 調(diào)用的服務(wù)器必須和用戶請(qǐng)求包含該請(qǐng)求的客戶頁(yè)的服務(wù)器是同一個(gè)。