一. 綜述.
Remote Scripting(簡稱RS)是微軟采用java applet擴充asp功能的一項技術,RS技術給予了開發人員在同一頁面組合客戶,服務器兩端功能的能力.
在動態網頁領域中,以往是采用vbscript,javascript在客戶端處理用戶界面,做一些提交(submit)前的預處理工作,要與服務器端發生交互的話,必須將整個form內數據提交到服務器端,服務器端接收到提交的數據來做一些處理,再把處理結果返回到客戶端.
如果采用RS技術,客戶端程序與服務器端發生交互就可以繞過表單提交(submit)這個過程,直接調用服務器端的處理程序,然后得到返回結果在客戶端顯示.比如說,在一個網站的新用戶注冊時,往往需要填寫一個注冊表單,里面都會包含 “用戶名”,”密碼” 等信息,填寫完成以后點”提交”按鈕,這個用戶注冊信息發送到服務器上,服務器檢測”用戶名”是否有重復,有則提示錯誤,沒有就新注冊一個用戶. 這樣在用戶填寫整個注冊表單的過程中,用戶并不知道自己的”用戶名”是否已經存在,要等到提交整個表單以后才能得到結果.而RS技術則可以在用戶剛填寫完”用戶名”時就搜索服務器端數據庫,并得到是否有重復的結果,提示用戶要更換用戶名,這樣就可以保證整個注冊一次成功,減少了來回修改的時間,程序的交互性也由此提高.
RS技術能提高asp程序的響應速度(asp運行速度并沒有提高),因為普通方法必須提交整個表單(form),表單中不僅包含了用戶輸入的數據,也包括了客戶機地址,用戶瀏覽器,屏幕信息等等諸多數據,提交后再等待服務器返回處理結果. 而RS技術繞過了表單提交的過程,直接調用服務器上的程序,然后返回結果,這樣雖然在服務器端處理這一塊還是和以前一樣,但由于去掉表單提交的過程,故而響應速度有所提高.典型的應用場合如:搜索,刷新等.
二使用Remote Scripting 技術
在http://msdn.microsoft.com/scripting/remotescripting/x86/rs10ben.exe 下載RS(最新版本1.0b,文件大小143KB),安裝后會在開始菜單增加”Microsoft Windows Script”快捷方式,其中含有示例程序和詳細文檔. RS被安裝在了c:\intepub\wwwroot\_ScriptLibrary 目錄下,主要由三個文件組成(Rs.htm,Rs.asp, rsproxy.class) 使用RS 有以下兩步:
1. 客戶端配置
客戶端配置是在要與服務器端發生交互的頁面上進行,比如用戶注冊注冊時候填寫的個人資料的頁面register.htm
a. 建立一個javascript程序塊,引用rs.htm文件:
<SCRIPT LANGUAGE="JavaScript" src="RS.HTM"> //注意rs.htm文件的路徑 b.建立一個建立一個javascript程序塊,調用rs.htm里面的函數RSEnableScripting():
<SCRIPT LANGUAGE="JavaScript"> RSEnableRemoteScripting(“.”); //一定要和rs.htm的路徑對應,例如:rs.htm文件和當前程序在同一目錄,就 //用 RSEnableRemoteScripting(“.”), //在上一級目錄用 RSEnableRemoteScripting(“..”) 如果在當前程序的子//目錄下,經過我的試驗沒有成功,不知道為什么 ;-( </script>
基本配置到此結束,在完成服務器端配置后還要根據實際要求在客戶機寫上另外一些定制代碼,
2. 服務器端配置
服務器端配置是在你要調用的asp文件中進行的,比如說用戶注冊的時候是提交到register.asp,那么下面這些配置就是在register.asp中進行.
a. 包含rs.asp文件:
<!--#INCLUDE FILE="RS.ASP"--> b. 調用rs.asp文件中的方法 RSDispatch() <% RSDispatch %> c. 聲明方法,還是用戶注冊的例子,假如register.asp中的register函數用來執行實際的注冊過程,那么就必須將這個方法聲明才能夠被register.htm所調用. <SCRIPT LANGUAGE="JavaScript"> var public_description = new constructor(); //構造方法 function constructor() { this.methodName = functionName;//functionName是服務器端asp文件中的函數 //methodName是把asp文件模擬成對象的方法名 //functionName必須在asp中實際存在, //methodName可以自定義,在客戶端文件中就是用//這個名字來調用上面asp程序中的函數 } function functionName() { //some code. } </script> 3. 示例: 下面用實際的例子來說明rs技術的實際用法,這個例子就是一個普通的用戶注冊,用戶在register.htm文件中輸入用戶名和密碼,register.asp負責將用戶名和密碼插入數據庫,如果成功返回一個”用戶成功注冊”的信息.因為是示例,所以沒有寫的很完善,只是演示如何使用RS技術. 注意:必須要把rs.asp,rs.htm,rsproxy.class這三個文件放在和register.htm,register.asp同一個目錄下 <html>
<body bgcolor="#FFFFFF" text="#000000">
<script language="JavaScript" src="rs.htm"></script>
<script language="JavaScript">RSEnableRemoteScripting(".");</script>
<!--引用rs.htm文件,使客戶端能夠調用服務器上的asp程序-->
<script language=javascript>
var serverURL="register.asp"; //定義服務器上asp程序路徑
var obj;
var username;
var password;
function register()
{
username=document.form1.username.value; //得到用戶輸入的用戶名,密碼
password=document.form1.password.value;
obj=RSGetASPObject(serverURL); //將服務器上asp程序所在路徑模擬成為一//個對象,obj就成為這個模擬對象的實例
obj.register(username,password,callback,"obj");
//服務器上asp程序中的函數就被作為這個//模擬對象的方法,可以被客戶端調用了!其//中username,password都是方法的參數,可//以傳遞任意多個參數,callback是服務器//返回值在客戶端的處理程序,本例中使簡單//的用alert顯示
}
function callback(co) //callback中的co參數是包含服務器返回值 //的一個對象,他不僅有return_value //這個屬性,還有status, message, context等諸多屬//性,具體請參考rs的文檔
{
alert(co.return_value);//顯示服務器返回值,也就是 該用戶成功注冊的信息
}
</script>
<form name="form1" method="post">
用戶注冊<br>
<input type="text" name="username">
<br>
<input type="text" name="password">
<br>
<input type="button" value="注冊" onclick="register()">
</form>
</body>
</html>
register.asp源文件:
<!--#include file="rs.asp"-->
<%RSDISPATCH%>
<script language=javascript runat=server>
conn=server.createobject("adodb.connection");
conn.open("driver={SQL Server};SERVER=kjc;DATABASE=table3;uid=sa;pwd=;"); //打開數據庫連接
function constructor()
{
this.register=register; //將register.asp文件中的regitser
//函數模擬成為對象的register方法
}
public_description=new constructor(); //讓機器了解asp程序中那些函數被模//擬成為對象中的方法
function register(username,password) //實際存在的函數,完成注冊的過程
{
var username;
var password;
//插入數據,注意要在自己機器上建
//立相應的數據庫和表格才能正常插入數據
//var sql="insert into user_table(username,password)" +
//" values('"+username+"','"+password+"')";
//conn.execute(sql);
return "該用戶成功注冊!";
}
</script>
除以上所提到的將asp文件模擬成對象,調用對象中方法,也就是asp中的函數的這種調用方式,,RS還提供了一些其他方法可以執行服務器上的asp程序,因為效果和以上提到的差不多,所以這里就不再提及,具體可以參考RS的文檔.
三.總結
RS技術使用簡單,能夠有效減少asp程序相應時間,加強客戶和服務器的交互性,更重要的是它可以將用戶界面和實現過程分離開來(htm文件專注于界面,asp文件專注于功能實現),為asp開發的小組合作和以后維護提供很大的方便.
陳坤雋(kjcok@21cn.com)
2001.6.3 下午
四.附錄
參考資料
microsoft remote scripting 文檔和示例,地址:
http://msdn.microsoft.com/scripting/remotescripting/x86/rs10ben.exe
|