前言
Web源于静态文本,现在很多站点还是采用这种方式。静 态文本的缺点就是维护难(文件数目多)、查询难、修改难。虽说可以采用 FrontPage对站点进行管理,但这只是其中的一个办法。现在,很多的站点都会 在后台采用数据库,动态生成超文本。这样,要改变式样,只需修改几个文件, 要变更内容,只需对数据库进行操作即可,而且较容易保持一致性,而对于全文 检索等查询应用,这种方式的优越性就更为突出。
通用网关界面CGI(Common Gateway Interface)和网络服务 器应用程序界面ISAPI(Internet Server Application Programming Interface) 与其它相关技术: Personal Web Server 支持通用网关接口应用程序、 Internet 数据库接口 (IDC) 应用程序和 IIS 应用程序接口 (ISAPI) 应用程 序。使我们能够非常方便地与Web Server进行沟通,而ASP正是进行这种沟通的 最佳语言。
Windows 95(或后续版本)的 Personal Web Server 支持 运行和开发ASP 应用程序。它将成为一个个人发布服务器,而非 Web服务器。 您可以开发自己用的 ASP 应用程序,或在一个运行 Windows NT Server 的计算机上展开应用程序。要想使开发环境功能更强大,请考虑使用 Windows NT Workstation 或 Windows NT Server。
Internet 服务管理器和 Microsoft 脚本调试器是 Windows NTWorkstation 上的 Personal Web Server 或在 Internet Information Server上的开发和管理特征。它们在 Windows 95 上不可用。
Active Server Pages Active Server Pages (ASP) 是服务器端的脚本编写环境,您可用它来创建动态 Web 页或生成功能强大的 Web 应用程序。ASP 页是包括 HTML 标记、文本和脚本命令的文件。ASP 页可调用 ActiveX 组件来执行任务,例如连接到数据库或进行商务计算。通过 ASP,可为您的 Web 页添加交互内容或用 HTML 页构成整个 Web 应用程序,这些应用程序使用 HTML 页作为您的客户的界面。 如果您是位HTML 编写人员,您将发现 ASP 脚本提供了创建交互页的简便方法。如果您曾想从 HTML 表格中收集数据,或用顾客的姓名个人化 HTML 文件,或根据浏览器的不同使用不同的特性,您会发现 ASP 提供了一个出色的解决方案。以前,要想从 HTML 表格中收集数据,就不得不学习一门编程语言来创建一个 CGI 应用程序。现在,您只要将一些简单的指令嵌入到您的 HTML 文件中,就可以从表格中收集数据并进行分析。您再不必学习完整的编程语言 或者单独编译程序来创建交互页。
随着不断掌握使用 ASP和脚本语言的技巧,您可以创建更 复杂的脚本。对于 ASP,您可以便捷地使用 ActiveX 组件来执行复杂的任务,比如连接数据库以存储和检索信息。如果您已经掌握 一门脚本语言,如VBScript、JavaScript 或 PERL,而且您已经了解使用 ASP 的方法。只要安装了符合 ActiveX 脚本标准的相应脚本引擎,就可以在 ASP 页中使用任何一种脚本语言。ASP 带有 Microsoft® Visual Basic® Scripting Edition (VBScript)和 Microsoft® JScript™的脚本引擎,这样您可以立即开始编辑脚本。PERL、REXX 和 Python 的ActiveX 脚本引擎可以从第三方开发人员处获得。如果您已经掌握了一门编程语言,如 Visual Basic,您将发现 ASP 是快速创建 Web 应用程序的一个非常灵活的方法。通过向 HTML 中添加脚本命令,您能够创建应用程序的 HTML 接口。通过创建自己的 ActiveX 组件,可以将应用程序中的商业逻辑封装到能够从脚本、其他组件或从其他程序中调用的模块。
使用 ASP 进行计算的 Web 可转化为有形的利益,它使 Web 供应商能够提供交互的商业应用而不仅仅是发布内容。例如,旅行社能够比公布航空时刻表做得更多;用 ASP 脚本可以让客户察看现有的航班、比较费用并预定座位。
包含在 Windows NT Option pack 中的 Microsoft Transaction Server(MTS)可以降低在服务器上构造程序的复杂性和费用。MTS 可以解决开发那些保密性强的、可分级的以及可靠的 Web 应用程序的复杂性问题。
ASP(Active Server Pages)的处理流程
浏览器向 Web 服务器发出请求 要求返回.asp 文件的内容。Web服务器在接到请求后,发现它的后缀为.ASP ,于是就将这个文件交给专门的ASP处理程序,这个程序扫描.ASP,把其中用<% 和%>括起来的代码解释并执行,最后把执行的结果再传回Web服务器,Web服务器把结果通过HTTP协议传回到浏览器。您可以用浏览器的查看源代码功能查看一下,您并没有发现<% 和%>标记,因为它们已经在Web 服务器端被处理掉了, 浏览器所获得的仅仅是结果,是一些标准的HTML标记。整个过程如左图所示。
正是由于脚本在服务器上而不是在客户端运行,传送到浏览器上的 Web 页是在 Web 服务器上生成的。所以用不着担心浏览器能否处理脚本:Web 服务器已经完成了所有脚本的处理,并将标准的 HTML 传输到浏览器。由于只有脚本的结果返回到浏览器,所以服务器端脚本不易复制。用户看不到创建他们正在浏览的页的脚本命令。
创建ASP页的基本常识
Active Server Pages(ASP)文件是以 .asp 为扩展名的文本文件,这个文本文件可以包括下列部分的任意组合:
创建 .asp 文件非常容易。如果要在 HTML 文件中添加脚本,只需将该文件的扩展名 .htm 或 .html 替换为 .asp 就可以了。要使 .asp 文件可用于 Web 用户,请将这个新文件保存在 Web 站点上的目录中(请确定启用了该目录的脚本和执行权限)。使用浏览器查看该文件时,可以看到 ASP 处理并返回了 HTML 页。
注意 因为 .asp 文件需要额外的处理,请不要将所有的 HTML 页都转换为 ASP 页。应该只将包含脚本命令的文件转换为 .asp 文件。.asp 和 .htm 文件可以放置在相同的目录中。
使用任何的文本编辑器都可以创建 .asp 文件。使用那些带有 ASP 增强支持的编辑器将更能提高效率,如 Microsoft® Visual InterDev™ 。如果您从未使用过 HTML,请考虑先使用 Microsoft FrontPage 。使用 FrontPage 创建文档和格式化文本就象使用文字处理工具一样简单。接下来还可以使用 Insert Script 命令在 FrontPage 创建的 HTML 页中加入简单的 ASP 命令。
脚本是一系列的命令和指令。与 HTML 标签不同,script 命令指示 Web 服务器执行操作,而 HTML 标签只是简单地格式化文本或读取图形、视频及音频文件。Script 命令可以在变量中存储用户名,在返回到浏览器的页中显示用户名或将用户名存储在数据库中。
脚本命令是通过定界符与文本区别开来。定界符是字符或一串字符,它标志单元开始或结束。HTML 使用定界符——小于号(<)和大于号(>)括入 HTML 标签。而ASP是使用定界符 <% 和 %> 括入脚本命令的。您可以在定界符中括入任何命令,只要这些命令对正在使用的脚本语言有效。下面的例子展示了包含脚本命令的简单的 HTML 页:
<HTML>
<BODY>
This page was last refreshed on <%= Now %>.
</BODY>
</HTML>
VBScript 函数 Now 返回当前的日期和时间。Web 服务器处理该页时,会使用当前的日期和时间替换 <%= Now %> 并且将该页返回到浏览器:
This page was last refreshed on 8/1/97 2:20:00 PM.
定界符括入的命令被称为 主脚本命令。这些命令被主脚本语言处理。在脚本定界符中使用的任何命 令都必须对主脚本语言有效。默认情况下,主脚本语言是 VBScript。
如果您已经熟悉了客户端脚本编写(编写在浏览器上运行 的脚本),请注意不要用 HTML <SCRIPT> 元素括入表达式。在编写服务器端脚本时,只用 <SCRIPT> 元素在主脚本语言外的其他语言中定义过程。
在 ASP 定界符中可以包含任何在主脚本语言中合法的语句、中达式、过程或操作符。在 VBScript 和其他脚本语言中,语句是语法完整的单元,该单元表达某项活动、声明或定义。下面的条件语句 If...Then...Else 是一条常见的 VBScript 语句。
<%
If Time >= #12:00:00 AM# And Time < #12:00:00 PM# Then
Greeting = "Good Morning!"
Else
Greeting = "Hello!"
End If
%>
<%= Greeting %>
这条语句将值 "Good Morning!" 或值 "Hello!" 存储在变量 greeting 中。<%= Greeting %> 命令将当前的变量值发送到浏览器中。
这样,在(Web 服务器所在时区的)正午 12 点前浏览该脚本的用户将看到:Good Morning!
在正午 12 点或以后浏览此脚本的用户将看到:Hello!
在语句的不同部分之间可以加入 HTML 文本。例如,下面的脚本在If...Then...Else 语句中加入了 HTML,产生了与上面脚本同样的结果:
<% If Time >= #12:00:00 AM# And Time < #12:00:00 PM# Then %>
Good Morning!
<% Else %>
Hello!
<% End If %>
如果条件为真——也就是说,如果时间为午夜、午夜以后或者中午以前,那么 Web 服务器将跟随条件(“Good Morning”)的 HTML 发送到浏览器;否则,将跟随 Else 的 HTML(“Hello”)发送到浏览器。这种混合 HTML 和脚本命令的方式可以方便地将 If...Then...Else 语句变换为几行 HTML 文本。如果要在 Web 页上显示多处问候,前一个例子更为有用。只需要设置一次变量,就可以重复显示。
最好从脚本命令中将 HTML 文本返回到浏览器,而不用脚本命令散布 HTML 文本。要将文本返回到浏览器,请使用 ASP 的内建对象 Response。下面的例子可以产生与前一个脚本同样的结果:
<% If Time >= #12:00:00 AM# And Time < #12:00:00 PM# Then
Response.Write "Good Morning!"
Else
Response.Write "Hello!"
End If %>
Response.Write 将跟随的文本发送到浏览器。
如果正在使用 JScript 命令,可以插入花括号指示语句块直接进入 ASP 命令,而不用考虑它是否夹杂着 HTML 标签和文本。例如:
<% if (screenresolution == "low") { %>
This is the text version of a page.
<% } else { %>
This is the multimedia version of a page.
<% } %>
ASP还提供了您使用的脚本语言以外的指令。这是一些输出指令和处理指令。ASP 的输出指令 <%= expression %> 显示表达式的值。这个输出指令等同于使用 Response.Write 显示信息。例如,输出表达式 <%= sport %> 将文字 climbing(变量当前的值)传送到浏览器。
ASP 处理指令 <%@ keyword %> 为 ASP 提供处理 .asp 文件所需的信息。例如,下面的指令将 VBScript 设为该页的主脚本语言:
<%@ LANGUAGE=VBScript %>
处理指令必须出现在 .asp 文件的第一行。不要将处理指令放在包含 #include 语句的文件中。必须在 at 标记(@)和关键字之间加入一个空格。处理指令有下列关键字:
- LANGUAGE 关键字设置页的脚本语言。
- CODEPAGE 关键字设置页的代码页(字符编码)。
- LCID 关键字设置页的现场标识符。
- TRANSACTION 关键字指定将在事务处理环境下运行的页。
- ENABLESESSIONSTATE 关键字指定 ASP 页是否使用会话状态。
可以在单个指令中包含多个关键字;关键字/值对之间必须由空格分开。不要在等号(=)左右加入空格。下面的例子中设置了脚本语言和代码页:
<%@ LANGUAGE=JScript CODEPAGE=932 %>
如果您的主脚本语言是 VBScript 或者 JScript,ASP 从指令中删除空白字符。使用其他脚本语言时,ASP 保留空白字符,这样那些需要使用位置和缩进的语言,如 Python 就可以被正确解释了。空白字符包括空格、制表符、回车和换行符。
使用 VBScript 和 JScript 时,在打开定界符之后和关闭定界符之前使用空白字符更容易阅读命令。下面的命令都是合法的:
<% Color = "Green" %>
<%Color="Green"%>
<%
Color = "Green"
%>
ASP 将一个语句的关闭定界符与下一个语句的打开定界符之间的空白字符删除。 要保留两个语句间的空白字符,比如在句子中显示变量值的时候,请使用 HTML 不间断空符( )。例如:
<%
'Define two variables with string values.
Hello = "Hello"
World = "World"
%>
<P>My response is to say "<%= Hello %> <%= World %>." </P>
脚本语言是介于 HTML 和 Java、C++ 和 Visual Basic 之类的编程语言之间的语言。HTML 通常用于格式化文本和链接网页。编程语言通常用于向计算机发送一系列复杂 指令。脚本语言也可用来向计算机发送指令,但它们的语法和规则没有可编译 的编程语言那样严格和复杂。脚本语言主要用于格式化文本和使用以编程语言 编写的已编译好的组件。
Active Server Pages 使 Web 开发商用多种脚本语言编写完整的过程成为可能。事实上,在单个 .asp 文件内部就可以使用多种脚本语言。另外,由于脚本是在服务器端读取和处理 的,所以请求.asp 文件的客户端浏览器并不需要支持脚本。
您可以使用任意一种其相应的脚本引擎已安装在 Web 服务器上的脚本语言。脚本引擎是处理用某种语言书写的命令的程序。Active Server Pages 带有两个脚本引擎:Microsoft Visual Basic Scripting Edition (VBScript) 和 Microsoft JScript。您也可以安装和使用其他的脚本语言引擎,例如 REXX 和 Perl。如果您已经是 Visual Basic 程序员,就可以马上使用 VBScript,它是 Visual Basic 的子集。如果您是 Java、C 或 C++ 程序员,您会发现 JScript 语法对您来说是熟悉的,虽然 JScript 与 Java 或 C 并没有联系。如果您熟悉其他脚本语言,例如 REXX 或 Perl,您可获取和安装相应的脚本引擎,这样就可以使用您熟悉的脚本语言了。Active Server Pages 是 ActiveX 脚本的宿主。要使用一种语言,必须安装脚本引擎,该引擎必须遵循 ActiveX 脚本标准并作为一个 COM (组件对象模型)对象驻留在 Web 服务器上。
要设置单个页的主脚本语言,可将 <%@ LANGUAGE %> 指令添加到 .asp 文件的开头。该指令的语法是:
<%@ LANGUAGE=ScriptingLanguage %>
其中 ScriptingLanguage 就是您所设置的页的主脚本语言。如果对某页进行了设置,那么该页将忽略在应用程序中对所有页的全局设置。
注意 要将不支持Object.Method 语法的语言作为主脚本语言使用,必须先创建 LanguageEngines 注册表键。
在应用程序中,如要为所有页设置主脚本语言,可在 Internet 服务管理器的“App 选项”选项卡上设置“默认的 ASP 语言”属性。
在服务器端通过 ASP 使用 VBScript 时,两个 VBScript 特征将失效。由于 Active Server Pages 脚本是在服务器端执行的,表示用户接口的元素的 VBScript 语句 InputBox 和 MsgBox 将不被支持。另外,在服务器端的脚本中,请不要使用 VBScript 函数 CreateObject 和 GetObject。而要使用 Server.CreateObject,这样 ASP 就可以跟踪对象实例了。用 CreateObject 或 GetObject 创建的对象不能访问 ASP 内建对象,也不能参与事务处理。该规则的一个例外是如果您使用的是 Admin 对象和 Java monikers。
VBScript 支持撇号型注释。与 HTML 注释不同,当处理脚本时,它们将被删除,而不是被送到浏览器。
<%
'This line and the following two are comments.
'The PrintTable function prints all
'the elements in an array.
Call PrintTable(myarray())
%>
输出表达式不能包括注释。例如,下面的第一行将正常运行,而第二行则不能,因为它是以 <%= 开头的。
<% i = i +1 'this increments i. This script will work. %>
<%= name 'this prints the variable name. This script will fail. %>
JScript 支持 // 注释符。每一个注释行中都必须使用该注释符。
<% Call PrintDate %>
<SCRIPT LANGUAGE=JScript RUNAT=Server>
// This is a definition for the procedure PrintDate.
function PrintDate()
{
var x
x = new Date()
// This line sends the current date to the browser,
// translated to a string.
Response.Write(x.toString())
}
</SCRIPT>
VBScript 不区分大小写。例如,您可以用 Request 或 request 来引用 ASP Request 对象。不区分大小写的后果是您不能用大小写来区分变量名。例如,您不能创建两个名为 Color 和 color 的单独变量。
JScript 区分大小写。要在脚本中使用 JScript 关键字,就必须按参考页中所示的大小写来书写。例如,用 date 来代替 Date 将导致错误。在 JScript 中,对象名必须大写;方法名和属性名可大写也可小写。本文所示的 ASP 内建对象的情况将在 JScript 命令中正常工作。
VBScript 并不需要声明变量,但在使用所有变量前声明它们是一种好的脚本书写习惯。要在 VBScript 中声明变量,请用 Dim、 Public 或 Private 语句。例如:<% Dim UserName %>,可以在需要显式声明变量的 .asp 文件中用 VBScript Option Explicit 语句。Option Explicit 必须在任何一个 ASP 指令之后及任何一个 HTML 文本或脚本命令之前出现。该语句仅影响用 VBScript 书写的 ASP 命令,而不会影响 JScript 命令。
Microsoft JScript 仅当变量为本地过程变量时才需声明,但在使用所有变量前声明它们是一种好的脚本书写习惯。要声明一个变量,请使用 var 语句。例如:<% var UserName; %>。
变量的作用域即生命期,决定哪些脚本命令可访问变量。在过程内部声明的变量具有局部作用域。每执行一次过程,变量就被创建然后消亡。而过程外部的任何命令都不能访问它。在过程外部声明的变量具有全局作用域,其值能被 ASP 页上的任何脚本命令访问和修改。声明变量时,局部变量和全局变量可以有相同的名称。而改变其中一个的值并不会改变另一个的值。如果没有声明变量,则可能不小心会改变一个全局变量的值。例如,以下脚本命令返回值 1,虽然有两个名为 Y 变量:
<%
Dim Y
Y = 1
Call SetLocalVariable
Response.Write Y
Sub SetLocalVariable
Dim Y
Y = 2
End Sub
%>
由于变量没有显式声明,以下的脚本命令将返回 2。当过程调用将 Y 设置为 2 时,脚本引擎认为该过程是要修改全局变量:
<%
Y = 1
Call SetLocalVariable
Response.Write Y
Sub SetLocalVariable
Y = 2
End Sub
%>
养成显式声明所有变量的编程习惯可以避免许多问题。尤其在当您用 #include 语句将文件包含进 ASP 主页时,就显得更为重要。一个独立文件中被包含的脚本是被当作整个包含它的文件的一部分来处理的。用不同的名称来命名主脚本和被包含脚本中用到的变量,这容易被遗忘,除非声明变量。
全局变量仅在单个 ASP 页中可用,要使它在单个 ASP 页之外可用,就必须为变量赋予会话或应用程序作用域。会话作用域变量对一个用户所请求的 ASP 应用程序中的所有页都是可用的。应用程序作用域变量也如此。对单个用户来说,会话变量是存储信息的最佳途径,例如,首选项、用户名或用户标识。对于一个特殊应用程序的所有用户,应用程序作用域是存储信息的最佳途径,例如,应用程序特定的问候语或应用程序所需的初始值。
ASP 提供两个内建对象来让您存储变量:Session 对象和 Application 对象。您也可以创建具有会话或应用程序作用域的对象实例。
要为变量赋予会话作用域,将该变量存储到 Session 对象中即可,方法是为该对象的已命名条目指派一个值。例如,以下命令将两个新的变量存储到 Session 对象中。
<%
Session("FirstName") = "Jeff"
Session("LastName") = "Smith"
%>
要在Session 对象中检索信息,可以用输出指令 (<%=) 或 Response.Write 访问已命名的条目。以下示例用输出指令显示 Session("FirstName") 的当前值:
Welcome <%= Session("FirstName") %>
可在 Session 对象中存储用户首选项,然后就可以访问这些首选项,从而决定将哪一页返回给用户。例如,您可以允许用户在应用程序的第一页指定纯文本内容,然后将这一选择应用到用户在该应用程序中访问的所有后续页。
<% If Session("ScreenResolution") = "Low" Then %>
This is the text version of the page.
<% Else %>
This is the multimedia version of the page.
<% End If %>
要为变量赋予应用程序作用域,将该变量存储到 Application 对象中即可,方法是为该对象的已命名条目指派一个值。例如,以下命令将一个应用程序特定的问候语存储到Application 对象中:
<% Application("Greeting") = "Welcome to Exploration Air" %>
要从 Application 对象中检索信息,可以使用 ASP 输出指令 (<%=) 或 Response.Write 从该应用程序的任意后续页中访问已命名条目。以下示例用输出指令显示 Application("Greeting") 的值:
<%= Application("Greeting") %>
常量是用来代替一个数或字符串的名称。一些随 ASP 提供的基本组件,例如 ActiveX Data Objects (ADO),定义了您在脚本中可以使用的常量。组件可在一个组件类型库中声明常量,组件类型库是一个包含 ActiveX 组件所支持的对象和类型的信息的文件。一旦在 Global.asa 文件中声明了一个类型库,您就可以在该应用程序的任意页中使用已定义的常量。
可在 Global.asa 中用 <METADATA> 标记为应用程序声明类型库。例如,要声明 ADO 类型库,可用以下语句:
<!--METADATA TYPE="typelib"
FILE="c:\program files\common files\system\ado\msado15.dll"
-->
这样,您就可以在与 Global.asa 文件相同的应用程序的中使用 ADO 常量。在下面的示例中,adOpenKeyset 和 adLockOptimistic 是 ADO 常量:
'Create and Open Recordset Object
Set RsCustomerList = Server.CreateObject("ADODB.Recordset")
RsCustomerList.ActiveConnection = OBJdbConnection
RsCustomerList.CursorType = adOpenKeyset
RsCustomerList.LockType = adLockOptimistic
在以前版本的 ASP 中,一些组件在文件中提供常量定义,每个使用那些组件的 ASP 文件必须包含该文件。用 #include 指令来包含常量定义的用法仍被支持,但使用类型库通常更方便并且能使脚本更易于升级。在以后版本的 ASP 中,组件可能将不再提供常量定义文件。
您可以定义自己的常量。在 VBScript 中,用 Const 语句,在 JScript 中,用 var 语句。如果在多个 ASP 页中使用常量,可在独立的文件中放置常量,然后将其包含进每一个使用该常量的 ASP 文件中去。
过程 是一组能执行指定任务且具有返回值的脚本命令。您可以定义自己的过程,然后在脚本中反复调用它们。
您可以将过程定义放在调用过程的 .asp 文件中,也可以将通用过程放在一个共享的 .asp 文件中,然后用 SSI #include 指令将其包含进其他调用其过程的 .asp 文件中。您还可选择另一种方法,即把这些功能打包在 ActiveX 组件中。
过程定义可出现在 <SCRIPT> 和 </SCRIPT> 标记内部且必须遵循声明脚本语言的规则。如果过程所用的语言与主脚本语言不同,则要使用 <SCRIPT> 元素。主脚本语言中的过程用脚本分界符 (<% 和 %>) 分隔。
用 HTML <SCRIPT> 标记时,必须使用两个属性来保证服务器端能够处理脚本。使用 <SCRIPT> 标记的语法是:
<SCRIPT RUNAT=SERVER LANGUAGE=JSCRIPT>
procedure definition
</SCRIPT>
RUNAT=SERVER 属性通知 Web 服务器在服务器上处理脚本。若不设置该属性,脚本将由客户端浏览器处理。LANGUAGE 属性决定此脚本块所用的脚本语言。您可以指定任何一种具有脚本引擎的语言。请使用 VBSCRIPT 指定 VBScript; 用 JSCRIPT 指定 JScript。若不设置 LANGUAGE 属性,将用主脚本语言解释此脚本块。
脚本块中的命令必须用所选的脚本语言形成一个或多个完整的过程。例如,以下命令定义 JScript 过程 MyFunction。
<HTML>
<SCRIPT RUNAT=SERVER LANGUAGE=JSCRIPT>
function MyFunction()
{
Response.Write("MyFunction Called")
}
</SCRIPT>
要点 不要在服务器端的 <SCRIPT> 标记内部包含任何不属于某个完整过程的一部分的脚本命令。由于执行顺序不可预测,所以不属于过程的命令可能会导致意外结果。另外,在过程内不能使用 ASP 输出表达式 <%=,而应使用 Response.Write。
要调用过程,在命令中包含过程名即可。如果从 VBScript 中调用 JScript 过程,就必须在过程名后加上括号;如过程没有变量,就用空括号。不管是从 JScript 调用 VBScript 还是调用 JScript 过程,在过程后总要加上括号。
对于 VBScript,调用过程时要用 Call 关键字。如果调用的过程需要括号,变量表必须放在括号内。如果省略 Call 关键字,也必须省略变量表外的括号。如果用 Call 语法调用任何内建的或用户自定义的函数,函数的返回值将被丢弃。
下面将举例说明用两种不同的脚本语言(VBScript 和 JScript)创建和调用过程。
<%@ LANGUAGE = VBSCRIPT >%
<HTML>
<BODY>
<% Call Echo %>
<BR>
<% Call PrintDate() %>
</BODY>
</HTML>
<%
Sub Echo
Response.Write "<TABLE>"
Response.Write "<TR><TH>Name</TH><TH>Value</TH></TR>"
Set Params = Request.QueryString
For Each p in Params
Response.Write "<TR><TD>" & p & "</TD><TD>" & _
Params(p) & "</TD></TR>"
Next
Response.Write "</TABLE>"
End Sub
%>
<SCRIPT LANGUAGE=JScript RUNAT=Server>
function PrintDate()
{
var x
x = new Date()
Response.Write(x.toString())
}
</SCRIPT>
在 VBScript 中,要将一个完整的数组传递给过程,可使用数组名,后接空括号;而在 JScript 中,要用空的方括号。
ActiveX 组件是建立强大的 Web 应用程序的关键。组件提供了用在脚本中执行任务的对象。ASP 同样提供了可在脚本中使用的内建对象。
ActiveX 组件是一个文件,该文件包含执行某项或一组任务的代码。组件可以执行公用任务,这样就不必自己去创建执行这些任务的代码。例如,股票行情收报机组件可以在 Web 页上显示最新的股票报价。ASP 带有可以直接使用的组件,如 Database Access 组件。从第三方开发者处获得可以可选的组件。或者也可以编写自己的组件。
可以利用组件作为脚本和基于 Web 应用程序的基本构造块。只要知道如何访问组件提供的对象。即使是位编写脚本的新手,也可以在不了解组件运作方式的情况下编写脚本。总之,组件使您不用学习编程就能够编写强大的脚本。
如果您是位 Web 应用程序的开发者,可以通过编写组件封装商务逻辑。例如,可以编写组件来计算产品的销售税。然后可以在处理销售订单的脚本中调用这个组件。在订单的处理过程中独立计算税率可以在某地销售税改变的时候只更新组件,而无须更改整个处理过程。可以使用任何支持组件对象模型(COM)的语言来编写组件,如,C、C++、Java 或 Visual Basic。如果熟悉 COM 编程,ActiveX 组件就是 Automation 服务器。要在 Web 服务器上运行,ActiveX 组件不能有图形用户接口元素,如 Visual Basic 的 MsgBox 函数。
组件是可以重复使用的。在 Web 服务器上安装了组件后,就可以从 ASP 脚本、ISAPI 应用程序、服务器上的其他组件或由另一种 COM 兼容语言编写的程序中调用该组件。
组件是包含在动态链接库(.dll)或可执行文件(.exe)中的可执行代码。组件可以提供一个或多个对象以及对象的方法和属性。要使用组件提供的对象,请创建对象的实例并将这个新的实例分配变量名。使用 ASP 的 Server.CreateObject 方法可以创建对象的实例。接着,使用脚本语言的变量分配指令为对象实例命名。创建对象实例时,必须提供实例的注册名称(PROGID)。
例如,ASP 的 Ad Rotator 组件在图形广告中任意循环。Ad Rotator 组件提供了一个被称为 Ad Rotator 对象,该对象的 PROGID 是 "MSWC.AdRotator"。要创建一个 Ad Rotator 对象的实例,请使用下列指令:
VBScript:
<% Set MyAds = Server.CreateObject("MSWC.AdRotator") %>JScript:
<% var MyAds = Server.CreateObject("MSWC.AdRotator") %>
如果您已经非常熟悉 VBScript 或者 JScript ,将会注意到没有使用创建新对象实例的脚本语言函数,如 VBScript 中的 CreateObject 或 JScript 中的 New。您必须使用 ASP 的 Server.CreateObject 方法,否者 ASP 无法跟踪脚本语言中对象的使用。
使用 HTML <OBJECT> 标签同样可以创建对象实例。您必须为 RUNAT 属性提供服务器值,同时也要为将在脚本语言中使用的变量名提供 ID 属性组。使用注册名(PROGID)或注册号码(CLSID)可以识别该对象。下面的例子使用注册名(PROGID)创建 Ad Rotator 对象的实例:
<OBJECT RUNAT=Server ID=MyAd PROGID="MSWC.AdRotator"></OBJECT>
下面的例子使用注册号码(CLSID)创建 Ad Rotator 对象的实例:
<OBJECT RUNAT=Server ID=MyAd
CLASSID="Clsid:1621F7C0-60AC-11CF-9427-444553540000"></OBJECT>
使用 Java 语言编写的 ActiveX 组件可作为 Java 类而不是 DLL 提交。要使用 Server.CreateObject 创建 Java 类对象的实例,必须使用 Javareg 程序将该类注册为 COM 组件。然后就能够以 PROGID 或 CLSID 使用 Server.CreateObject 了。
如果对象实例不需要访问 ASP 内建对象和参与事务,就可以使用由 Java 监视程序提供的更为简单的机制直接调用 Java 类。必须用 Microsoft virtual machine for Java 2.0(由该 Internet Information Server 和 Personal Web Server 的发布版提供)使用 Java 监视程序。
如果要使用监视程序实例化对象,就必须使用 VBScript 或者 JScript 的 GetObject 指令并以 java:classname 的形式提供 java 类的全名。下面这个关于 VBScript 的例子生成了 Java Date 对象的实例。
<%
Dim date
Set date = GetObject("java:java.util.Date")
%>
<p> The date is <%= date.toString() %>
通过调用 GetObject 而不是 Server.CreateObject 生成的对象不能访问 ASP 内建对象也不能参与事务处理。
