另外,几乎是一瞬间,人们就不再满足于 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 应用模式。
而在实际应用中,复杂的 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) ------ 该对象的属性中包含了许多有用的信息,其中包含函数返回值。