远程脚本调用(Remote Scripting)
-增强asp交互性,提高asp响应的一大利器
一. 综述.
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