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