又是 VI6 SOM(一), to be continued...

來源:互聯網
上載者:User
這篇文章本來是用 HTML 寫的,裡面還有好多插圖 (vi6 snapshot),可惜...
先貼在這兒,趕明兒再貼 HTML 版的。
==================================================================
Visual InterDev 6.0 中的 Script Object Model

本文需要讀者具備以下技術背景:

HTML (Hyper Text Marked Language)
DHTML (Dynamic HTML)
DOM (Document Object Model)
ASP (Active Server Page)
DTC (Design Time Control)


--------------------------------------------------------------------------------

曆史 / Client-Side Scripting / Server-Side Scripting

Web Site 在一開始出現的時候,主要目的是為資訊發布(Information Publish)。換言之,一個 Web Server 更類似於一個檔案伺服器(File Server)。Web Site 是 Web Page 的集合,每一頁 Web Page 都是使用 HTML 格式的純文字。

為了實現更豐富的顯示功能,並且增加訪問者與頁面的互動功能,在瀏覽器端(Client-Side)出現了 DHTML 技術。DHTML並非一個單獨的產品或技術,而是一系列技術的集合。它主要整合了:

CSS (Cascading Style Sheet)
DOM (Document Object Model)
Client-Side Script (典型的是:Javascript)

另外,幾乎是一瞬間,人們就不再滿足於 Web Site 只做資訊發布(Information Publish)平台了。人們希望用它來取代以前的 Client/Server 模式,也就是說做Web應用。這主要是在後台做文章,相關的技術有:

CGI (Common Gateway Interface)
ISAPI/NSAPI/WSAPI
ASP (Active Server Page)

在 Windows 平台上,考慮到效能效率和編程周期的折衷,人們往往選擇的是 ASP (Active Server Page)。ASP 技術是通過在伺服器端(Web Server Side)解釋執行 Server-Side Script (通常使用 VBScript 編寫),並有可能進一步調用伺服器端組件(Server-Side Component),來最終實現瀏覽器/伺服器 (Browser/Server) 三層 Web 應用程式模式。


--------------------------------------------------------------------------------

遠程指令碼編程技術 Remote Scripting

而在實際應用中,複雜的 Web 應用程式系統往往需要同時調用客戶指令碼又調用伺服器指令碼。客戶指令碼(Client-Side Script)用於完成使用者介面──例如,為了動態改變 Web 頁文本,對使用者動作,比如雙擊作出反應,並執行諸如驗證這樣的面向客戶的任務。客戶指令碼由瀏覽器解釋執行,從而向使用者提供了一種生動的、反應迅速的介面。而伺服器指令碼(Server-Side Script)是用來完成整個應用系統的商業邏輯部分。比如對某個資料庫的存取動作。

但是用戶端和伺服器端指令碼是互斥的,即互相不可見。當某個頁首次請求時,伺服器可能運行伺服器指令碼,並將頁面傳遞給瀏覽器,然後瀏覽器就可以運行客戶指令碼。不過,如果該頁上的伺服器指令碼有必要再次啟動並執行話,那麼必須將該頁提交回伺服器,伺服器才可以有效地重新運行該頁。維護頁面中控制項的狀態和指令碼中的變數可能需要一個複雜的指令碼編程 (scripting) 過程,目的是在瀏覽器和伺服器之間來回傳遞資訊。這還會增加網路流量,降低 Web 應用程式的效能。

樣本:
如圖,在 Visual InterDev 6.0 的編程環境中可以清楚看到,DHTML 編程完全是 Client-Side Scripting 技術。相應的,HTML Form Element 全部都是 Client-Side Object。我們不可能在 Client-Side Script 中訪問任何 Server-Side Object,如果想訪問,唯一的方法是提交頁面,使用 Action 屬性去調用 ASP 頁面。


一種折衷方案是遠程指令碼編程技術(remote scripting)。該技術允許你在客戶指令碼中寫代碼調用某個 ASP 頁中的方法(函數或者常式)。實際上,你可以象調用本地常式那樣調用伺服器指令碼,不過它們仍然運行在伺服器上,並具有對伺服器能力的所有存取許可權。由於你從不需要離開當前頁面,跑去調用伺服器指令碼,因此頁面狀態很容易保持。

Remote scripting 是通過函數庫來實現的,當你要調用某個伺服器方法時,可以直接從用戶端指令碼中調用這個函數。調用請求會被傳遞到瀏覽器中的一個代理進程中,該進程在瀏覽器中非同步運行,目前,該代理是作為一個 Java applet 來實現的。該代理進程發送一個請求到包含你所調用方法的 ASP 頁的伺服器中。

而後,伺服器載入 ASP 頁,而且該 ASP 頁上的一個特殊常式將你的請求調度到所需的函數。如果你所調用的函數有傳回值,那麼該值即被發送回代理進程,代理進程將之封裝為一個對象 ------ 一個調用對象 (Call Object) ------ 該對象的屬性中包含了許多有用的資訊,其中包含函數傳回值。

為了實現 remote scripting,除了你自己的用戶端 (.htm) 檔案和伺服器 (.asp) 檔案外,還需要下面的檔案:

Rs.htm   包含了一系列函數,其目的是在用戶端的 .htm 檔案中初始化 remote scripting、執行遠程過程、檢查遠程調用的狀態,以及獲得函數的結果。
Rs.asp   包含了一系列函數,其目的是在伺服器端的 .asp 檔案中初始化伺服器端的 remote scripting,以及在 ASP 頁中調度到所需的函數。
Rsproxy.class    包含 Java applet 的 Java 類檔案(對象代碼),其目的是在用戶端和伺服器頁之間進行通訊。
為了使得用 remote scripting 調用 ASP 頁上的函數更方便一些,您可以在客戶指令碼中建立對象引用,引用具有伺服器端函數的ASP頁面。這樣,你就可以使用標準的 object.method() 文法去調用在伺服器 ASP 頁面中暴露出的函數了。


--------------------------------------------------------------------------------

Visual InterDev 6.0 Page Object

讀到這裡,大家大概想到在 Visual InterDev 6.0 中,Remote Scripting 是如何方便地實現了。VI6 使用 Page Object DTC 幫我們封裝了大量內容,我們所需做的就是首先在 ASP 頁面中寫一段函數,然後使用 Page Object 將其暴露出來。在前台的 HTML 頁面中也加入 Page Object,幫我們引用(Reference)ASP 頁面,然後就可以在 Client-Side Script 中使用後台 ASP 頁面中的函數了。這種使用和以前的通過 Submit Form to ASP 的方法不同,無須離開 HTML 頁面。

  
Server-Side
建立 Server-Side ASP 頁面。
在 ASP 頁面中寫一段函數。
然後使用 Page Object 將其暴露出來。  Client-Side

建立 Client-Side 頁面。
使用 Page Object 引用需要的 ASP 頁面。
然後就可以在 Client-Side Script 調用寫好的 Server-Side 函數了。  

令人高興的是,函數的傳回值通過 Call Object 的屬性 callobject.return_value 來傳遞,可以是數組!

 

 



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

11.11 Big Sale for Cloud

Get Unbeatable Offers with up to 90% Off,Oct.24-Nov.13 (UTC+8)

Get It Now >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。