asp基础教程
Active Server Page基础教材一、 关于 ASP 2
二、 ASP 的新功能 4
三、 创建 ASP 页 5
四、 使用脚本语言 8
五、 使用变量和常量 10
六、 使用集合 13
七、 ASP 内建对象 19
八、 向浏览器发送内容 23
九、 包含文件 28
十、 访问数据库 32
十一、 调试 ASP 脚本 40
十二、 维护 ASP 应用程序的安全 47
雨菲亭整理
[email]draker@163.net[/email]
http:\\yft.yeah.net
http:\\[url]www.chinajinyang.com[/url]\yl\yl.htm
一、 关于 Active Server Page
Microsoft? Active Server Pages(ASP)是服务器端脚本编写 环境,使用它可以创建和运行动态、交互的 Web 服务器应用程序。使用 ASP 可以组合 HTML 页、脚本命令和 ActiveX 组件以创建交互的 Web 页和基于 Web 的功能强大的应用程序。ASP 应用程序很容易开发和修改。
HTML 编写人员
如果您是位 HTML 编写人员,您将发现 ASP 脚本提供了创建交互页的简便方法。如果您曾想从 HTML 表格中收集数据,或用顾客的姓名个人化 HTML 文件,或根据浏览器的不同使用不同的特性,您会发现 ASP 提供了一个出色的解决方案。以前,要想从 HTML 表格中收集数据,就不得不学习一门编程语言来创建一个 CGI 应用程序。现在,您只要将一些简单的指令嵌入到您的 HTML 文件中,就可以从表格中收集数据并进行分析。您再不必学习完整的编程语言或者单独编译程序来创建交互页。
随着不断掌握使用 ASP 和脚本语言的技巧,您可以创建更复杂的脚本。对于 ASP,您可以便捷地使用 ActiveX 组件来执行复杂的任务,比如连接数据库以存储和检索信息。
对 ASP 脚本的逐步介绍,请参阅 ASP 教程。然后您可以再回到这些主题中了解关于编写 ASP 脚本的详细信息。
有经验的脚本编写人员
如果您已经掌握一门脚本语言,如 VBScript、JavaScript 或 PERL,而且您已经了解使用 ASP 的方法。只要安装了符合 ActiveX 脚本标准的相应脚本引擎,就可以在 ASP 页中使用任何一种脚本语言。ASP 带有 Microsoft? Visual Basic? Scripting Edition (VBScript)和 Microsoft? JScript? 的脚本引擎,这样您可以立即开始编辑脚本。PERL、REXX 和 Python 的 ActiveX 脚本引擎可以从第三方开发人员处获得。
Web 开发人员
如果您已经掌握了一门编程语言,如 Visual Basic,您将发现 ASP 是快速创建 Web 应用程序的一个非常灵活的方法。通过向 HTML 中添加脚本命令,您能够创建应用程序的 HTML 接口。通过创建自己的 ActiveX 组件,可以将应用程序中的商业逻辑封装到能够从脚本、其他组件或从其他程序中调用的模块。
使用 ASP 进行计算的 Web 可转化为有形的利益,它使 Web 供应商能够提供交互的商业应用而不仅仅是发布内容。例如,旅行社能够比公布航空时刻表做得更多;用 ASP 脚本可以让客户察看现有的航班、比较费用并预定座位。
包含在 Windows NT Option pack 中的 Microsoft Transaction Server(MTS)可以降低在服务器上构造程序的复杂性和费用。MTS 可以解决开发那些保密性强的、可分级的以及可靠的 Web 应用程序的复杂性问题。
Active Server Pages 模型
浏览器从 Web 服务器上请求 .asp 文件时,ASP 脚本开始运行。然后 Web 服务器调用 ASP,ASP 全面读取请求的文件,执行所有脚本命令,并将 Web 页传送给浏览器。
由于脚本在服务器上而不是在客户端运行,传送到浏览器上的 Web 页是在 Web 服务器上生成的。所以不必担心浏览器能否处理脚本:Web 服务器已经完成了所有脚本的处理,并将标准的 HTML 传输到浏览器。由于只有脚本的结果返回到浏览器,所以服务器端脚本不易复制。用户看不到创建他们正在浏览的页的脚本命令。
二、 Active Server Page 的新功能
Active Server Pages 在功能方面有所增强,更易于开发应用程序。
Microsoft 脚本调试程序。 您可以使用脚本调试程序调试 .asp 文件。请参阅 调试 ASP 脚本。
事务性脚本。 ASP 页和页中使用的对象可以运行于事务环境之下。在页上的全部工作只有两种结果:提交或终止。事务可以保护应用程序免于因失败而导致数据丢失。请参阅 创建事务性脚本。
管理工具。 许多应用程序设置可在 Internet 服务管理器上进行,这是 Internet Information Server 和 Personal Web Server(在 Windows NT Workstation 上)的管理工具。请参阅 配置 ASP 应用程序。
隔离 ASP 应用程序。 您可以隔离 ASP 应用程序以便它们能在 Web 服务器上独立的内存空间内运行。万一某个应用程序失败时,可以保护其他应用程序和 Web 服务器。它也使您可以在不停止 Web 服务器的情况下,停止一个应用程序或从内存中卸载其组件。请参阅 隔离应用程序.
文件上载。 浏览器可以通过 Posting Acceptor 应用程序将文件上载到 Web 服务器。可以编写 ASP 脚本来发送带有从 Posting Acceptor 传来的信息的 email,如每一个上载文件的位置和名称。请参阅 Posting Accepter 文档(在 Microsoft Site Server Express 的目录表中)。
新的 ASP 组件。 ASP 提供了新的基础组件。有关概述请参阅 ActiveX 组件。
应用程序根目录的改变。 ASP 应用程序的根目录在您的 Web 站点上可以是物理目录。以前,根目录必须映射为虚拟目录。现在可以用 Internet 服务管理器指示 ASP 应用程序的根目录。请参阅 创建应用程序。必须将 .asp 文件置于应用程序树中,Web 服务器才能检测文件的改变并且自动重装它们。
支持 Internet Explorer 4.0 通道和 Web 预测。 当 ASP 要发送包含通道定义命令的文件时,它会自动告诉 Internet Explorer 4.0。使用 ASP 很容易就能生成通道定义 (.cdf) 文件。
支持 HTTP 1.1 协议。 Internet Information Server 和 Personal Web Server 支持 HTTP 1.1 协议。在响应支持 HTTP 1.1 的浏览器(例如 Internet Explorer 4.0)时,这一支持可使 ASP 利用新协议的高效率。例如,当向浏览器返回页的时候,ASP 使用大块转换编码以提高网络效率。
三、 创建 Active Server Page 页
Active Server Pages(ASP)文件是以 .asp 为扩展名的文本文件,这个文本文件可以包括下列部分的任意组合:
文本
HTML 标记
ASP 脚本命令
创建 .asp 文件非常容易。如果要在 HTML 文件中添加脚本,只需将该文件的扩展名 .htm 或 .html 替换为 .asp 就可以了。要使 .asp 文件可用于 Web 用户,请将这个新文件保存在 Web 站点上的目录中(请确定启用了该目录的脚本和执行权限)。使用浏览器查看该文件时,可以看到 ASP 处理并返回了 HTML 页。现在可以在 .asp 文件中添加脚本命令了。
注意 因为 .asp 文件需要额外的处理,请不要将所有的 HTML 页都转换为 ASP 页。应该只将包含脚本命令的文件转换为 .asp 文件。.asp 和 .htm 文件可以放置在相同的目录中。
使用任何的文本编辑器都可以创建 .asp 文件。使用那些带有 ASP 增强支持的编辑器将更能提高效率,如 Microsoft? Visual InterDev? 。如果您从未使用过 HTML,请考虑先使用 Microsoft FrontPage 。使用 FrontPage 创建文档和格式化文本就象使用文字处理工具一样简单。接下来还可以使用 Insert Script 命令在 FrontPage 创建的 HTML 页中加入简单的 ASP 命令。
加入 Script 命令
脚本是一系列的命令和指令。与 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> 元素在主脚本语言外的其他语言中定义过程。关于详细信息,请参阅 使用脚本语言。
合成 HTML 和脚本命令
在 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 将跟随的文本发送到浏览器。要动态构造返回浏览器的文本,请在语句中使用 Response.Write。例如,可能要构造包含一些变量值的字符串。在 使用组件和对象 以及 向浏览器传送内容 中了解到更多有关 Response 对象和一般对象的信息。现在,先了解将脚本命令插入到 HTML 页中的几种方法。
在 ASP 定界符中可以包含用默认主脚本语言编写的过程。详细信息,请参阅 使用脚本语言。
如果正在使用 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 提供了您使用的脚本语言以外的指令。这是一些输出指令和处理指令。
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 不间断空符([$nbsp])。例如:
<% 'Define two variables with string values.
Hello = "Hello"
World = "World"
%>
<P>My response is to say "<%= Hello %>[$nbsp]<%= 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 服务器上。
设置主脚本语言
ASP 主脚本语言 是用来处理在分界符 <% 和 %> 内部的命令的语言。默认时,主脚本语言是 VBScript。您可以将任何一种具有脚本引擎的脚本语言作为主脚本语言。您可以逐页设置主脚本语言,也可以在 ASP 应用程序中设置所有页的主脚本语言。
为某页设置语言
要设置单个页的主脚本语言,可将 <%@ LANGUAGE %> 指令添加到 .asp 文件的开头。该指令的语法是:
<%@ LANGUAGE=ScriptingLanguage %>
其中 ScriptingLanguage 就是您所设置的页的主脚本语言。如果对某页进行了设置,那么该页将忽略在应用程序中对所有页的全局设置。
请遵循使用 ASP 指令的指导。详细信息,请参阅 创建 ASP 页。
注意 要将不支持Object.Method 语法的语言作为主脚本语言使用,必须先创建 LanguageEngines 注册表键。详细信息,请参阅 注册表。
为应用程序设置语言
在应用程序中,如要为所有页设置主脚本语言,可在 Internet 服务管理器的“App 选项”选项卡上设置“默认的 ASP 语言”属性。详细信息,请参阅配置 ASP 应用程序。
在服务器上使用 VBScript 和 JScript
在服务端通过 ASP 使用 VBScript 时,两个 VBScript 特征将失效。由于 Active Server Pages 脚本是在服务器端执行的,表示用户接口的元素的 VBScript 语句 InputBox 和 MsgBox 将不被支持。另外,在服务器端的脚本中,请不要使用 VBScript 函数 CreateObject 和 GetObject。而要使用 Server.CreateObject,这样 ASP 就可以跟踪对象实例了。用 CreateObject 或 GetObject 创建的对象不能访问 ASP 内建对象,也不能参与事务处理。该规则的一个例外是如果您使用的是 Admin 对象和 Java monikers。详细信息,请参阅 IIS Admin 对象 和 创建 Java 类的实例。
关于所有 VBScript 和 JScript 的操作符、函数、语句、对象、属性及方法的列表及详细说明,请参阅 VBScript 语言参考 和 JScript 语言参考。
包含注释
由于 ASP 脚本是在服务器端处理的,所以即使客户端的浏览器不支持脚本语言,也不必通过包含进 HTML 注释标记来隐藏脚本,但客户端的脚本则通常需要这样处理。在内容送到浏览器之前,所有 ASP 命令都已被处理好了。您可用 HTML 注释将注释加进 HTML 页。注释将返回给浏览器,若用户浏览 HTML 源文件,就可以看见。
VBScript 注释
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 注释
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 并不需要声明变量,但在使用所有变量前声明它们是一种好的脚本书写习惯。要在 VBScript 中声明变量,请用 Dim、 Public 或 Private 语句。例如:
<% Dim UserName %>
可以在需要显式声明变量的 .asp 文件中用 VBScript Option Explicit 语句。Option Explicit 必须在任何一个 ASP 指令之后及任何一个 HTML 文本或脚本命令之前出现。该语句仅影响用 VBScript 书写的 ASP 命令,而不会影响 JScript 命令。
关于这些命令的详细信息,请参阅 VBScript 语言参考。
JScript
Microsoft JScript 仅当变量为本地过程变量时才需声明,但在使用所有变量前声明它们是一种好的脚本书写习惯。要声明一个变量,请使用 var 语句。例如:
<% var UserName; %>
有关 var 语句的详细信息,请参阅 JScript 语言参考。
变量作用域
变量的作用域即生命期,决定哪些脚本命令可访问变量。在过程内部声明的变量具有局部作用域。每执行一次过程,变量就被创建然后消亡。而过程外部的任何命令都不能访问它。在过程外部声明的变量具有全局作用域,其值能被 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
有关 <METADATA> 标记的参考信息,请参阅 TypeLibrary 声明。
在以前版本的 ASP 中,一些组件在文件中提供常量定义,每个使用那些组件的 ASP 文件必须包含该文件。用 #include 指令来包含常量定义的用法仍被支持,但使用类型库通常更方便并且能使脚本更易于升级。在以后版本的 ASP 中,组件可能将不再提供常量定义文件。
您可以定义自己的常量。在 VBScript 中,用 Const 语句,在 JScript 中,用 var 语句。如果在多个 ASP 页中使用常量,可在独立的文件中放置常量,然后将其包含进每一个使用该常量的 ASP 文件中去。
六、 使用集合
大多数 ASP 内建对象支持集合。集合是存储字符串、数字、对象和其他值的地方。除了在存储或取出项目时集合会自动扩展与搜索外,集合与数组非常相近。与数组不同的是,集合被修改后,项目的位置将会移动。可以通过集合中项目的名称、索引或者通过在集合的所有项目中遍历访问项目。
通过名称和索引访问项目
通过使用项目名称可以访问集合中的具体项目。例如,Contents 集合拥有在 Session 对象中保存的所有变量。同样也拥有由 Server.CreateObject 创建的所有对象。假设在 Session 对象中存储了下列用户信息:
<%
Session.Contents("FirstName") = "Sam"
Session.Contents("LastName") = "Woo"
Session.Contents("Age") = 29
%>
可以使用在集合中存储项目时关联的名称访问项目。例如,下面的表达式返回字符串“Sam”:
<%= Session.Contents("FirstName") %>
通过使用与项目关联的索引或号码也可以访问项目。例如,下面的表达式检索存储在 Session 对象的第二个存储槽中的信息并且返回“Woo”:
<%= Session.Contents(2) %>
ASP 集合从 1 开始编号。当在集合中增加或删除项目时,与项目关联的索引将会改变。所以不能认为项目的索引始终不变。正如将在下面的主题中说明的那样,利用索引的访问一般用来遍历集合,或访问只读集合中的项目。
通过使用速记的名称可以访问项目。ASP 以特定的顺序搜索与对象关联的集合。如果在对象的集合中特定名称的项目只出现一次的话,可以消除该集合的名称:
<%= Session("FirstName") %>
访问存储在 Application 或 Session 对象中的项目时,消除集合名称一般是安全的。但是,对于 Request 对象,最好指定集合名称,因为该集合很可能包含重复的名称。
遍历集合
在集合的所有项目中遍历可以了解集合中存储的项目或修改项目。遍历集合时,必须提供集合名称。例如,可以使用 VBScript 中的 For...Each 语句访问存储在 Session 对象中的项目:
<%
'Declare a counter variable.
Dim Item
'For each item in the collection, display its value.
For Each Item in Session.Contents
Response.Write Session.Contents(Item) & "<BR>"
Next
%>
可以使用 VBScript 中的 For...Next 语句遍历集合。例如,要列出上例中存储在 Session 中的三个项目,可以使用下列语句。
<%
'Declare a counter variable.
Dim Item
'Repeat the loop until the value of counter is equal to 3.
For Item = 1 to 3
Response.Write Session.Contents(Item) & "<BR>"
Next
%>
因为一般不知道存储在集合中的项目个数,ASP 支持集合的 Count 属性,这个属性返回集合中的项目数。可以使用 Count 属性指定计数器的终值。
<%
'Declare a counter variable.
Dim Item
'Repeat this loop until the counter equals the number of items
'in the collection.
For Item = 1 to Session.Contents.Count
Response.Write Session.Contents(Item) & "<BR>"
Next
%>
可以在脚本中使用 for 语句在集合中循环。在 JScript 的 for 语句中使用 Count 属性时,为了收到更大的效果,应该将 Count 值分配给本地变量并使用该变量设置计数器终值。这样,脚本引擎就不需要每次循环都查寻 Count 的值。下面的例子展示了这个技巧:
<%
var item, numitems;
numitems = Session.Contents.Count;
for (item = 1; item <= numitems; item++) {
Response.Write(Session.Contents(item) + "<BR>")
}
%>
Microsoft JScript 3.0 引入了 Enumerator 对象。可以使用该对象遍历 ASP 集合。atEnd 方法指出了集合中是否还存在项目。moveNext 方法移动到集合中的下一个项目。
<%
// Create an Enumerator object
var mycoll = new Enumerator(Session.Contents);
//Iterate through the collection and display each item
while (!mycoll.atEnd()) {
var x = mycoll.item();
Response.Write(Session.Contents(x) + "<BR>");
mycoll.moveNext();
}
%>
遍历带子关键字 (Subkeys) 的集合
脚本在单一 cookie 中嵌入相关值以减少在浏览器和 Web 服务器之间传送的 cookie 数目。因此 Request 和 Response 对象的 Cookies 集合能够在单一项目中拥有多个值。这些子项目或子关键字可以被单个访问。只有 Request.Cookies 和 Response.Cookies 集合支持子关键字 (Subkeys)。Request.Cookies 只支持读操作;Response.Cookies 只支持写操作。
可以列举 Request.Cookie 集合中所有的 cookie 以及 Cookie 中所有的子关键字 (Subkeys)。但是,如果在没有子关键字 (Subkeys) 的 Cookie 上遍历子关键字,将不会产生任何结果。通过使用 .HasKeys 语法首先检查 cookie 是否含有子关键字 (Subkeys),就可以避免这种情况。下面的这个例子展示了这个技巧。
<%
'Declare counter variables
Dim Cookie, Subkey
'Display the entire cookie collection.
For Each Cookie in Request.Cookies
Response.Write Cookie & "<BR>"
If Request.Cookies(Cookie).HasKeys Then
'Display the subkeys
For Each Subkey in Request.Cookies(Cookie)
Response.Write Subkey & "=" & Request.Cookies(Cookie)(Subkey) & "<BR>"
Next
Else
Response.Write "No subkeys in this cookie <BR>"
End If
Next
%>
遍历对象集合
Session 和 Application 集合可以保存数量变量或者对象实例。Contents 集合拥有数量变量和通过调用 Server.CreateObject 生成的对象实例。StaticObjects 集合拥有在 Global.asa 文件中使用 HTML <OBJECT> 元素创建的对象。
在遍历包含对象的集合时,可以访问对象的标识符或对象的方法和属性。例如,假设应用程序使用一些对象创建用户帐号,而且每个对象有初始化方法,可以遍历 StaticObjects 集合来调用每个初始化方法:
<%
For Each Object in Session.StaticObjects
Session.StaticObjects(Object).InitializeUser
Next
%>
ASP 集合有何不同之处?
尽管在本主题中讨论的 ASP 集合与 Visual Basic 的 Collection 对象非常相似,但还是有些不同。ASP 集合支持 Count 属性和 Item 方法,但不支持 Add 和 Remove 方法。
设置对象作用域
对象的作用域决定哪些脚本可以使用该对象。默认情况下,当您创建对象实例时,该对象具有页作用域。同一 ASP 页中的任何脚本命令都能使用该页作用域的对象;当 ASP 页送回客户端时,该对象即被释放。对大多数对象来说,推荐的作用域是页作用域。您可以改变一个对象的作用域,使其可被其他页的脚本使用。本主题将解释如何使用页作用域的对象以及如何改变对象的作用域。
使用页作用域对象
在 ASP 页上用 Server.CreateObject 创建的对象在该页的生存期内一直存在。该对象对该页的任何脚本命令都是可访问的,当 ASP 处理完该页时,该对象即被释放。因此,对象具有该页的作用域或生命周期。
在用 Visual Basic 或 VBScript 编程时,要注意在 ASP 处理完该页之前不要释放对象。例如,以下语句经常用于通过将对象变量赋以 Nothing 值来释放对象:
Set myObj = Nothing
如果您在 ASP 页中包含了该语句,那么任何使用 myObj 的企图都将会返回一个预期的错误代码。但在内部,即使在对象释放以后,ASP 仍保留对它的引用。当您在脚本中不能使用对象时,对象的资源直到 ASP 处理完页之后才释放。同样,如果您通过创建另一个对象实例并将其赋给已使用过的对象变量来释放该对象时,ASP 将保留对原对象实例的引用。对大多数脚本来说,创建多个对象可能不会产生问题,但如果对象使用共享资源,比如数据库连接,就有可能出现问题。
由于对象有页作用域,所以不要依靠手工释放的对象。例如,以下的循环创建 1001 个 Connection 对象,它将能打开大多数的连接甚至于一个大型的 SQL server:
<%
For I = 0 to 1000
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "connection string"
Next
%>
总的来说,应该尽量避免在一个循环内部创建对象。如果无法避免,您应该手工释放被对象使用过的资源。如果 Connection 对象仅被创建一次,且数据资源的物理连接在每个循环中被打开然后关闭,那么上例将会正常运行:
<%
Set Conn = Server.CreateObject("ADODB.Connection")
For I = 0 to 1000
Conn.Open "connection string"
Conn.Close
Next
%>
为对象赋予会话作用域
在应用程序中,对于每个新会话,都会创建 session-scope 对象,并且在会话结束后会将其释放。因此,每个活动的会话都有一个对象。会话作用域用于从多个脚本中调用的对象,但只影响一个用户会话。您可以只在需要时才为对象赋予会话作用域。如果确实需要使用会话作用域,那么就必须了解提供对象的组件的线程模型,因为它影响性能和对象的安全环境。详细信息,请参阅本主题的“高级信息:性能问题” 。
要为对象赋予会话作用域,请将对象存储在 ASP Session 内建对象中,您既可以在 Global.asa 文件中使用 <OBJECT> 标记,也可以在 ASP 页上使用 Server.CreateObject 方法创建具有会话作用域的对象实例。
在 Global.asa 文件中,您可用扩展了 RUNAT 属性(必须设置为 Sever)和 SCOPE 属性(必须设置为 Session)的 ;OBJECT> 标记。以下示例创建一个 Ad Rotator 对象的会话作用域实例:
<OBJECT RUNAT=Server SCOPE=Session ID=MyAd PROGID="MSWC.Adrotator">
</OBJECT>
一旦您在 Session 对象中存储了对象,您就可以从应用程序的任何页中访问该对象。下面的语句使用上例中由 <OBJECT> 标记创建的对象实例:
<%= MyAd.GetAdvertisement("addata.txt") %>
在 ASP 页上,您也可以使用 Server.CreateObject 方法将对象存储在 Session 内建对象中。以下示例在 Session 对象中存储 Ad Rotator 对象的一个实例。
<% Set Session("MyAd") = Server.CreateObject("MSWC.Adrotator") %>
要显示广告,您首先应该获取存储在 Session 对象中的 Ad Rotator 对象的实例,然后才能调用方法来显示对象:
<% Set MyAd = Session("MyAd") %>
<%= MyAd.GetAdvertisement("addata.txt") %>
在用 <OBJECT> 标记声明的对象被某个 .asp 文件中的脚本命令引用之前,ASP 并不创建其实例。Server.CreateObject 方法则立即创建该对象实例。因此,对会话作用域对象来说,使用 <OBJECT> 标记要比 Server.CreateObject 属性更好。
为对象赋予应用程序作用域
application-scope 对象是在应用程序启动时就创建的对象的单个实例。该对象由所有客户端请求共享。仅在极少数情况下,您才需要为对象赋予应用程序作用域。一些实用程序对象,例如计数器等,可能需要应用程序作用域。但一般来说,您可用在下一节中建议的替代方案。另外,线程模型会影响性能和对象安全环境(请参阅本主题的“高级信息:性能问题”)。
要为对象赋予应用程序作用域并将其存储在 ASP Application 内建对象中,既可以使用 Global.asa 文件中的 <OBJECT> 标记,也可以使用 ASP 页上的 Server.CreateObject 方法创建应用程序作用域的对象实例。
在 Global.asa 文件中,您可用扩展了 RUNAT 属性(必须设置为 Sever)和 SCOPE 属性(必须设置为 Session)的 ;OBJECT> 标记。在 ASP 页中,您可以使用 Server.CreateObject 将对象实例存储在 Application 内建对象中。关于使用 <OBJECT> 标记和 Server.CreateObject 的示例,请参阅上一节“为对象赋予会话作用域”。
会话和应用程序作用域的替代方案
仅当需要时,才能为对象赋予会话或应用程序作用域。因为在会话或应用程序结束运行之前,这些对象会一直保留。它们会占用内存或数据库连接等资源,这些资源可能会在其他方面更有用。另外,组件的线程模型会影响您从中所创建的对象的性能,尤其是那些具有会话或应用程序作用域的对象。
在很多情况下,比创建应用程序或会话作用域对象更好的方法就是利用会话或应用程序作用域变量,将信息传递给在网页一级创建的对象。例如,不要为 ADO Connection 对象赋予会话或应用程序作用域,因为它创建的连接会在相当长的一段时间一直保持打开而此时脚本已不再使用 ODBC 连接共享。但您可以将 ODBC 连接字符串存储在 Session 或 Application 内建对象中,并在网页上从创建的 Connection 对象实例中获取该字符串。通过这种方式,您可以存储在会话或应用程序名称空间中频繁使用的信息,但只有在需要时才创建用该信息的对象。关于作用域变量的详细信息,请参阅“使用变量和常量”。
用户自定义的 JScript 对象
您可以通过定义一个创建和初始化新对象的属性和方法的构造函数来创建自己的 JScript 对象。当脚本用 new 操作符来调用构造函数时,就会创建该对象的实例。ASP 脚本支持用户自定义的对象,当具有页作用域时,后者正常运行。但如果为用户自定义的 JScript 对象赋予应用程序或会话作用域,将可能影响该对象的功能。特别是,若一个对象具有会话或应用程序作用域,则其他页的脚本可以获取该对象的属性,但是却不能调用其方法。
高级信息:性能问题
组件的线程模型可能会影响 Web 站点的性能,一般来说,带有 Both 标记的对象是推荐在所有的 ASP 脚本中使用的对象,尤其是在 Session 和 Application 对象中。不推荐使用单线程对象。
因为您可能不会始终控制所用对象的线程模型,所以,以下的指导可帮助您获得最佳性能:
页作用域对象。带有 Both 或 Apartment 标记的对象将给予您最佳的性能。
应用程序作用域对象。一般来说,应避免在 Application 对象中放置对象。如果确需使用应用程序作用域对象,您会从结合了 FreeThreadedMarshaler 的带有 Both 标记的对象中获得最佳性能。您既可以用 <OBJECT> 标记也可以用 Server.CreateObject 方法在 Application 对象中存储带有 Single、Free 或 Both 标记的对象。您必须用单元线程对象来使用 <OBJECT> 标记。
会话作用域对象。带有 Both 标记的对象将为您提供最佳性能。用单线程或单元线程对象会导致 Web 服务器将会话锁定在一个线程上。自由线程对象不会锁定会话,但运行速度不高。在 Session 对象中,您可以用 <OBJECT> 标记或 Server.CreateObject 方法存储对象 。
如果您已安装了 SDK 文档,请参阅“创建 ASP 组件”,您将会获得有关线程模型及其隐含的组件性能的详细信息。( 在 Windows 95 及其后续版本中 SDK 文档不可用。)
七、 Active Server Page 内建对象
Active Server Pages 提供内建对象,这些对象使用户更容易收集通过浏览器请求发送的信息、响应浏览器以及存储用户信息(如用户首选项)。本文简要说明每一个对象。有关每个对象的详细信息,请参阅 内建对象参考。
Application 对象
可以使用 Application 对象使给定应用程序的所有用户共享信息。
Request 对象
可以使用 Request 对象访问任何用 HTTP 请求传递的信息,包括从 HTML 表格用 POST 方法或 GET 方法传递的参数、cookie 和用户认证。Request 对象使您能够访问发送给服务器的二进制数据,如上载的文件。
Response 对象
可以使用 Response 对象控制发送给用户的信息。包括直接发送信息给浏览器、重定向浏览器到另一个 URL 或设置 cookie 的值。
Server 对象
Server 对象提供对服务器上的方法和属性进行的访问。最常用的方法是创建 ActiveX 组件的实例 (Server.CreateObject)。其他方法用于将 URL 或 HTML 编码成字符串,将虚拟路径映射到物理路径以及设置脚本的超时期限。
Session 对象
可以使用 Session 对象存储特定的用户会话所需的信息。当用户在应用程序的页之间跳转时,存储在 Session 对象中的变量不会清除;而用户在应用程序中访问页时,这些变量始终存在。也可以使用 Session 方法显式地结束一个会话和设置空闲会话的超时期限。
ObjectContext 对象
可以使用 ObjectContext 对象提交或撤消由 ASP 脚本初始化的事务。
Application 对象
集合:
Contents
StaticObjects
方法:
Lock
Unlock
事件:
Application_OnEnd
Application_OnStart
ObjectContext 对象
方法:
SetAbort
SetComplete
事件:
OnTransactionAbort
OnTransactionCommit
Request 对象
集合:
ClientCertificate
Cookies
Form
QueryString
ServerVariables
属性:
TotalBytes
方法:
BinaryRead
Response 对象
集合:
Cookies
属性:
Buffer
CacheControl
Charset
ContentType
Expires
ExpiresAsolute
IsClientConnected
PICS
Status
方法:
AddHeader
AppendToLog
BinaryWrite
Clear
End
Flush
Redirect
Write
Server 对象
属性:
ScriptTimeout
方法:
CreateObject
HTMLEncode
MapPath
URLEncode
Session 对象
集合:
Contents
StaticObjects
属性:
CodePage
LCID
SessionID
Timeout
方法:
Abandon
事件:
Session_OnEnd
Session_OnStart
---------------------------------------------------------------------------
ActiveX 组件
本部分概述了 Active Server Pages(ASP)中的 ActiveX 组件。有关这些组件的完整介绍及其对象、属性和方法的列表,请参阅 可安装的 ASP 组件。
ActiveX 组件作为基于 Web 的应用程序部分在 Web 服务器上运行。组件提供了应用程序的主要功能(如访问数据库),这样就不必创建或重新创建执行这些任务的代码。
数据库访问
可以使用 Database Access 组件 在应用程序中访问数据库。然后可以显示表的整个内容、允许用户构造查询以及在 Web 页执行其他一些数据库查询。
Ad Rotator
可以使用 Ad Rotator 组件 来交替显示图像,并提供从显示的图形到另一个 URL 的链接。在文本文件中保存广告列表;Ad Rotator 组件依照在数据文件中的指令来显示它们。
Content Rotator
Content Rotator 组件 在 Web 页上自动循环 HTML 内容字符串。每次用户请求 Web 页时,Content Rotator 组件基于 Content Schedule 文件中指定的信息显示新的 HTML 内容字符串。
由于内容字符串可以包含 HTML 标记,就可以显示 HTML 能够表示的任何内容类型:文本、图形或超文本链接。例如,可以使用该组件在每日牌价或超文本链接中循环,或者在每次打开 Web 页时,改变文本和背景的颜色。
Browser Capabilities
通过使用 Browser Capabilities 组件,可以基于浏览器的功能剪裁发送到该浏览器的内容。
File Access
File Access 组件 提供可用于在计算机文件系统中检索和修改文件的对象。
Content Linking
Content Linking 组件使在应用程序中提供 .asp 文件的逻辑导航变得简单易行。不用在许多 .asp 文件中维护 URL 引用,而只需在易于编辑的文本文件中指定 .asp 文件的次序组织。
Collaboration Data Objects for Windows NT Server
Collaboration Data Objects for NTS 组件 提供 Web 应用程序所使用的邮件对象。这个库使您能够简单快捷地在应用程序上添加收发邮件的功能。您可以创建可编程邮件对象,然后利用它们的属性和方法来满足应用程序的需要。
MyInfo、Status、System 和 Tools
MyInfo、Status、System 和 Tools 组件为在 Macintosh 上和在运行 Microsoft Windows 的计算机上开发的应用程序提供兼容性。
MyInfo 组件跟踪 Web 站点所有者的个人信息,如经营 Web 站点的组织名称和地址及 Web 站点的设置,还有 Web 站点是否有 guest book。
Status 组件跟踪 Web 站点的信息,如访问者的数量以及 HTTP 连接的个数。
System 组件创建包含服务器状态信息的 status 对象。当前该服务器状态只在 Personal Web Server for Macintosh 上可用。
Tools 组件提供了生成随机数、检查文件是否存在或处理 HTML 表格的方法。
Page Counter
Page Counter 组件 统计并显示 Web 页被请求的次数。以一定的时间间隔,将捕获的数字写入到文本文件中,这样服务器关闭后,数据也不会丢失。
Permission Checker
Permission Checker 组件测试 Web 用户对某文件或某页的访问权。可以使用 Permission Checker 组件为不同类型的用户定制基于 ASP 的页。例如,如果 Web 页包含超文本链接,就可以使用 Permission Checker 组件测试用户对相应 Web 页的访问权限并忽略用户无权访问的页或使这些链接失效。
八、 向浏览器发送内容
在处理 ASP 脚本时,任何没有包含在 ASP 定界符或 <SCRIPT> 标记中的文本或图形都将被简单地返回给浏览器。可以通过使用 Response 对象显示地把内容发送给浏览器。
发送内容
要将内容从 ASP 定界符内部或过程发送给浏览器,可以使用 Response 对象的 Write 方。例如,下面的语句可以根据用户是否访问过此页而发送不同的问候语:
<%
If FirstTime = True Then
Response.Write "<H3 ALIGN=CENTER>Welcome to the Overview Page</H3>"
Else
Response.Write "<H3 ALIGN=CENTER>Welcome Back to the Overview Page</H3>"
End If
%>
在过程外部,不必使用 Response.Write 将内容送回用户。不在脚本定界符内部的内容被直接发送给浏览器,浏览器将其格式化和显示。例如,下面的脚本过程与上面的脚本输出相同:
<H3 ALIGN=CENTER>
<% If FirstTime Then %>
Welcome to the Overview Page.
<% Else %>
Welcome Back to the Overview Page.
<% End If %>
</H3>
当您只需要将输出返回一次或很方便地向现有 HTML 文本中加入语句时,可使用混合脚本命令和 HTML。当您不想用定界符分隔一条语句或当您想创建返回给浏览器的字符串时,可使用 Response.Write。例如,可构建一个文本的字符串,用从一个 HTML 表送回的值创建表格的一行:
Response.Write "<TR><TD>" & Request.Form("FirstName") _
& "</TD><TD>" & Request.Form("LastName") & "</TD></TR>"
Request.Form 返回从 HTML 表格(参阅 使用 HTML 表格)发送的值。(&) 字符是 VBScript 字符串连接字符。
设置内容的类型
当 Web 服务器将文件返回给浏览器时,会同时告诉浏览器文件中包含的内容的类型。这使浏览器能够决定是否它能自己显示文件或必须调用另一个应用程序。例如,如果网络服务器返回 Microsoft Excel 表格,则浏览器必须调用 Microsoft Excel 的副本显示此页。Web 服务器通过将文件的扩展名映射到 MIME 类型表来识别文件类型。
可以使用 Response 对象的 ContentType 属性为发送给用户的内容设置 HTTP 内容类型字符串。例如,下面的命令为通道定义设置内容类型:
<% Response.ContentType = "application/x-cdf" %>
有关通道的详细信息,请参阅本主题中的“创建动态通道”。
其他的通用内容类型是 text/plain(用于作为文本内容返回而不是已解释的 HTML 语句)、text/gif(用于 GIF 图像)和 video/quicktime(用于 Apple QuickTime? 格式的电影)。一套标准的 MIME 类型已经定义,另外,Web 服务器或 Web 浏览器都支持 MIME 类型。要想查看您的 Microsoft Web 服务器支持哪些内容类型,可使用 Internet 服务管理器打开您的 Web 站点的属性页,单击“HTTP 标题”选项卡,然后单击“文件类型”选项卡。
重定向浏览器
用 Redirect 方法可将浏览器重定向到另一个 URL,而不是将内容发送给用户。例如,如果您想确认用户是否已从主页进入了您的应用程序,以便能收到一个客户 ID,则可以检验他们是否有客户 ID 号;如果没有,就可以将其重定向到主页。
<%
If Session("CustomerID") = 0 Then
Response.Redirect "homepage.asp"
End If
%>
除非缓冲区已经打开,否则,在任何内容或标题返回给浏览器之前,您必须重定向浏览器。将 Response.Redirect 语句放在页的顶部和<HTML> 标记之前可确保没有任何内容返回给浏览器。如果在返回给浏览器的内容或标题后使用 Response.Redirect,将看到一个错误信息。
如果在页的中间使用 Response.Redirect,请将其与 Response.Buffer 属性一起使用,下面的部分将进行解释。
缓冲内容
默认情况下,Web 服务器返回 HTML 和在处理 ASP 页时的脚本处理结果。但是,您可以设置 Response 对象的 Buffer 属性以便在向用户发送任何内容之前,先处理页上的所有的服务器脚本命令。
可以使用缓冲技术来确定在页处理过程中的某个点,而您并不想将该点之前的内容发送给用户。也可以用 Response 对象的 Redirect 方法将用户重定向到另一页,或者用 Response 对象的 Clear 方法清除缓冲区并将不同的内容发送给用户。下面的例子使用了以上两种方法。
<%
'Turn on buffering. This statement must appear before the <HTML> tag.
Response.Buffer = True %>
<html>
<body>
%>
If Request("FName") = "" Then
Response.Clear
Response.Redirect "/samples/test.html"
Else
Response.Write Request("FName")
End If
%>
</body>
</html>
也可以使用 Response.Buffer 避免 Web 服务器在脚本修改 HTTP 标题之前将其返回。有些属性和方法,例如 Response.Expires 和 Response.Redirect 可修改 HTTP 标题。
当在脚本中设置 Buffer 属性并且没有调用 Flush 方法时,服务器将保持用户发出的 Keep-Alive 请求。养成这样的脚本编写习惯有益于提高服务器的性能,因为,服务器不必为每一个用户请求创建新的连接(假定服务器、用户和任何代理服务器都支持 Keep-Alive 要求)。但是,这种方法的一个潜在的不利因素是:在用户处理完当前的 asp 文件的所有的脚本之前,缓冲区不显示任何响应给用户。对于较长的和较复杂的脚本,用户可能要被迫等待很长一段时间才能看到这一页。
默认情况下,缓冲区对于 ASP 应用程序是关闭的。可以使用 Internet 服务管理器为整个 ASP 应用程序打开缓冲区。详细信息,请参阅 配置 ASP 应用程序。
允许代理服务器缓存页
通过代理服务器,应用程序可以发送页给用户。代理服务器 代替用户浏览器从 Web 站点请求网页。代理服务器缓存 HTML 页以便相同页的重复请求能够快速有效地返回给浏览器。代理服务器执行请求并缓存网页,并减轻网络和 Web 服务器的负荷。
尽管缓存对 HTML 页都能很好运行,但对包含动态生成信息的 ASP 页则不尽人意。例如,报告股市行情或显示大量业务的存货清单需要提供即时信息。一小时前的信息对目前来讲是很不准确的。如果应用程序返回个人的信息,例如,自定义的主页,希望用户不能看到另一个用户的个人信息。
默认情况下,ASP 命令代理服务器自己不能缓存 ASP 页(尽管缓存图像、位图、小型应用程序,和其他缓存页上的参考项)。可以使用 Response.CacheControl 属性设置缓存控制 HTTP 标题字段允许缓存某一页。Response.CacheControl 的默认值是字符串 "Private",它避免代理服务器缓存此页。要允许缓存,可将缓存控制标题字段设置为 Public:
<% Response.CacheControl = "Public" %>
因为在任何页的内容被发送之前,HTTP 标题必须被送给浏览器或代理服务器,所以,可在任何 HTML 标记之前设置 Response.CacheControl 属性或使用 Response.Buffer 缓存此页。
缓存控制标题字段是 HTTP 1.1 规格的一部分。在只支持 HTTP 1.0 的代理服务器上不能缓存 ASP 页,因为没有到期的标题字段发送。
避免浏览器缓存页
每一个浏览器版本都有它自己的规格来规定是否缓存页。要避免浏览器缓存 ASP 页,可使用 Response.Expires 设置到期标题:
<% Response.Expires = 0 %>
值为 0 强迫缓存页到期。因为在任何页被发送之前,HTTP 标题必须被送给浏览器,所以可通过将 Response.Expires 属性放在 HTML 标记之前或使用 Response.Buffer 缓存该页。
创建动态通道
Internet Explorer 4.0 有一个新的特性,Web 规划人员可以使用该属性将带有公用主题的 Web 页并入一个通道。在浏览器中,通道被显示在通道标题栏上;用户通过单击图标访问通道。通道在后台自动更新;用户不必访问站点就可以在自己的浏览器上下载最新的页。通道为用户提供了一条浏览一组相关的 Web 页的快速而直接的通路,并且这些 Web 页是自动更新的。
使用 ASP,可以编写脚本来收集用户的首选项,然后动态地创建通道。通道定义文件 (.cdf) 建立了通道内容的组织和顺序。在 .cdf 文件中的命令使用与 HTML 标记相同的语法,以便于掌握和从脚本中生成。在编写 ASP 脚本来创建通道定义文件时,脚本用 .cdx 扩展名。当 ASP 读取一个以 .cdx 为扩展名的文件时,将自动发送 application/x-cdf 内容类型,它告诉浏览器用通道定义来解释字节。如果不使用 .cdx 作扩展名,则脚本必须用 Response.ContentType 手工将内容类型设置为 application/x-cdf。
下面是一个有关如何使用通道的示例。下面的 HTML 表格要求用户选择通道。提交时,该表格调用 .cdx 文件的脚本去创建通道的定义。
<P> Choose the channels you want. </P>
<FORM METHOD="POST" ACTION="chan.cdx">
<P><INPUT TYPE=CHECKBOX NAME=Movies> Movies
<P><INPUT TYPE=CHECKBOX NAME=Sports> Sports
<P><INPUT TYPE="SUBMIT" VALUE="SUBMIT">
</FORM>
Chan.cdx 中的脚本根据与请求一起提交的表格的值创建通道定义。
<% If Request.Form("Movies") <> "" Then %>
<CHANNEL>
channel definition statements for the movie pages
</CHANNEL>
<% End If %>
<% If Request.Form("Sports") <> "" Then %>
<CHANNEL>
channel definition statements for the sports pages
</CHANNEL>
<% End If %>
有关通道和通道定义文件的信息,请参阅 Exploration Air 范例站点。
向服务器发送文件
浏览器可以使用 Posting Acceptor 应用程序将文件发送给 Web 服务器。当 Posting Acceptor 上载文件时,将发送列出每一个收到的文件名称和位置的 URL-encoded 表格字段。可以将邮递处理的 URL 添加到脚本中,此脚本上载文件去调用 ASP 脚本来处理这些字段名。例如,可以编写一个脚本,自动地通过文件的名称和位置发送 e-mail 给系统管理员。有关 Posting Acceptor 的详细信息,包括 ASP 脚本示例,请参阅 Posting Acceptor。
-------------------------------------------------------------------------------
向浏览器传送脚本
尽管 ASP 主要用来创建和处理服务器端脚本,还是可以使用它生成由客户浏览器处理的客户端脚本来扩展其效用。通过组合传送到浏览器的脚本命令可以编写服务器端脚本。
通过组合由 HTML 注释括起来的客户端脚本和由定界符括起来的服务器端脚本可以做到这一点:
<SCRIPT LANGUAGE="VBScript">
<!--
client script
<% server script %>
client script
<% server script %>
client script
->
</SCRIPT>
使用脚本语言的这个功能,您能够创建令人兴奋的应用程序。举例来说,下面的脚本将生成在用户的 Web 浏览器上运行的客户脚本的子程序。
<%
ServerTime = Time
ServerDate = Date
For i = 1 to 4
Randomize
GreetCondition = int(rnd * 3)
%>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub ServeInfo<%= i %>()
Select Case <%= GreetCondition%>
Case 0
Msg = "Hello, the time is <%= ServerTime %>."
Case 1
Msg = "Welcome! Today's date is <%= ServerDate %>."
Case 2
Msg = "Hi, the time is <%= ServerTime %> and the date is <%= ServerDate %>.
End Select
Document.Write Msg
End Sub
ServeInfo<%= i %>()
//-->
</SCRIPT>
<br>
<%
Next
%>
在以上的脚本中,ASP 在服务器上检索时间和日期信息,然后通过几次循环生成在用户的 Web 服务器上运行的子程序。每个客户端子程序提出随机选择的问候,显示时间和日期信息。
这种脚本可扩展,例如,将配置信息检索并提交到指定的客户端脚本或组件,如 ActiveX 控件。灵活地使用这种脚本的编写技巧,同样可以加快 Web 服务器处理和返回用户信息请求的速度。
九、 包含文件
SSI 指令为用户提供在 Web 服务器处理之前将一个文件的内容插入到另一个文件的方法。ASP 只使用这一机制的 #include 指令。要在 .asp 文件中插入一个文件,使用下面的语法:
<!--#include virtual | file ="filename"-->
virtual 和 file 关键字指示用来包含该文件的路径的类型,filename 是您想包含的文件的路径和名称。
被包含文件不要求专门的文件扩展名;但是,为被包含文件赋予 .inc 扩展名以便和其他类型文件相区分是一个良好的编程习惯。
使用 Virtual 关键字
使用 Virtual 关键字指出路径开始于虚拟目录。例如,如果一个被命名为 Footer.inc 的文件属于一个名为 /Myapp 的虚拟目录,则下面的一行将把 Footer.inc 的内容插入到包含该行的文件中:
<!--#include virtual ="/myapp/footer.inc"-->
使用 File 关键字
使用 file 关键字指示使用相对路径。相对路径开始于含有该包含文件的目录。例如,如果您的文件位于目录 Myapp 中,而文件 Header1.inc 在 Myapp\Headers 中,下面的一行将把 Header1.inc 插入到您的文件中:
<!--#include file ="headers/header1.inc"-->
注意,到被包含文件 Headers/header1.inc 的路径是相对于包含文件的;如果包含 #include 语句的脚本不在 /Myapp 目录中,那么该语句将不起作用。
如果在 Internet 服务管理器中的“启用上层目录”选项被选中,则也可以使用 file 关键字和 ../ 语法包含父目录即上一层目录中的文件。有关命令,请参阅 配置 ASP 应用程序。
被包含文件的位置
被包含文件可以在您的 Web 站点内的某个目录中,也可以在您的 Web 站点之外。通常,您应该使被包含文件位于 Web 站点的目录中。如果一个被包含文件位于您的 Web 站点内,则当浏览器下次请求包含文件时,将显示对被包含文件的改变。但是,如果被包含文件位于您的 Web 站点之外,直到 ASP 应用程序重新启动或 Web 服务器重新启动时,这种改变才能体现出来。ASP 检测在应用程序命名空间中(在应用程序的起始目录下)的任何包含文件的改变。
包含文件:提示和警告
一个被包含文件也可以包含其他的文件。如果 #include 指令没有导致循环,一个 .asp 文件可以多次包括同一个文件。例如,如果文件 First.asp 包含文件 Second.inc,则 Second.inc 一定不能再包含 First.asp。一个文件也不能包含自身。ASP 检测此类循环或嵌套错误,并在检测到时产生一个错误消息,同时停止处理被请求的 .asp 文件。
ASP 在执行脚本命令之前包含文件。因此,不能用脚本命令去创建被包含文件的名称。例如,下面的脚本将不能打开 Header1.inc,因为 ASP 会在它分配一个文件名给变量 name 之前先执行 #include 指令。
<!-- This script will fail -->
<% name=(header1 & ".inc") %>
<!--#include file="<%= name %>"-->
脚本命令和过程必须完全包含在脚本定界符 <% 和 %> 、HTML 标记 <SCRIPT> 和 </SCRIPT> 或 HTML 标记 <OBJECT> 和 </OBJECT> 中。也就是说,不能在一个 .asp 包含文件中打开一个脚本定界符,然后在一个被包含的文件中才关闭该定界符;脚本或脚本命令必须是一个完整的单元。例如,下面的脚本将无法运行:
<!-- This script will fail -->
<%
For i = 1 To n
statements in main file
<!--#include file="header1.inc" -->
Next
%>
下面的脚本将正常运行:
<%
For i = 1 to n
statements in main file
%>
<!--#include file="header1.inc" -->
<% Next %>
--------------------------------------------------------------------------------
使用 HTML 表格
使用 ASP Request 对象,您可以创建一个简单而功能强大的脚本来收集和处理 HTML 表格数据。在本主题中,您将不仅学会如何创建基本的表格处理脚本,而且还将获得用于验证 Web 服务器和用户浏览器上的表格信息的一些有用技术。
关于 HTML 表格
HTML 表格是收集 Web 信息最常用的方法,是在 Web 页上提供用户界面控件的特殊的 HTML 标记的排列。文本框、按钮和复选框都是典型的控件,这些控件使用户和 Web 页实现交互,并且将信息提交给 Web 服务器。
下面的 HTML 示例产生一个表格,在表格中,用户可以输入姓名、年龄并包含一个将这些信息提交给 Web 服务器的按钮。该表格也包含了一个隐含的控件(Web 浏览器不显示),可以用该控件向 Web 浏览器传递附加信息。
<FORM METHOD="POST" ACTION="myfile.asp">
<INPUT TYPE="text" NAME="firstname">
<INPUT TYPE="text" NAME="lastname">
<INPUT TYPE="text" NAME="age">
<INPUT TYPE="hidden" NAME="userstatus" VALUE= "new">
<INPUT TYPE="submit" VALUE="Enter">
</FORM>
处理 ASP 输入的表格
在表格向 Web 服务器提交信息时,用户的 Web 浏览器请求用 HTML <FORM > 标记的 ACTION 属性所指定的 .asp 文件(在前面的例子中,该文件被称为 Myfile.asp)。.asp 文件包含了处理表格值(如显示结果表或从数据库查询信息)的脚本。
可以通过三种途径用 .asp 文件收集 HTML 表格的值
静态的 .htm 文件可以包含一个将其数值邮送给 .asp 文件的表格。
.asp 文件可以创建一个将其信息邮送给另一个 .asp 文件的表格。
.asp 文件可以创建一个将其信息邮送给自身的表格,即包含该表格的文件。
前两个方法的操作方式相同,当表格与网关程序交互时,除 ASP 之外,可以包含读取和响应用户选择的命令。
创建一个包含表格定义且传送信息给自身的 .asp 文件较复杂,但却是有很强功能的处理表格的方法。这一过程在 验证表格输入 中演示。
获得表格输入
ASP Request 对象提供了两种集合,在很大程度上简化了检索附加在 URL 请求上的表格信息的任务。
QueryString 集合
QueryString 集合获取作为跟在请求的 URL 的问号后面的文本传递给 Web 服务器的值。通过使用 HTTP GET 方法或手工将表格的值添加到 URL,表格的值可以被附加在请求的 URL 之后。
例如,如果先前的表格示例使用 GET 方法 (ACTION = "GET") 且用户键入 Jeff、Smith 和 30,那么下面的 URL 请求将被发送给服务器:
[url]http://scripts/Myfile.asp?firstname=Jeff&lastname=Smith&age=30&userstatus=new[/url]
Myfile.asp 包含下面的表格处理脚本:
Hello, <%= Request.QueryString("firstname") %> <%= Request.QueryString("lastname") %>.
You are <%= Request.QueryString("age") %> years old.
<%
If Request.QueryString("userstatus") = "new user" then
Response.Write"This is your first visit to this Web site!"
End if
%>
在这种情况下,Web 服务器将返回下面的文本给用户的 Web 浏览器:
Hello, Jeff Smith. You are 30 years old. This is your first visit to this Web site!
QueryString 集合有一个可选参数,可用来访问显示在请求正文中的多个值中的一个。也可以使用 Count 属性计算一个特殊类型的值的出现次数。
例如,表格包含一个多项目的列表框可以提交下面的请求:
[url]http://list.asp?food=apples&food=olives&food=bread[/url]
您也可以使用下面的命令去对多个值计数:
Request.QueryString("food").Count
如果想显示多个值的类型,List.asp 应包含下面的脚本;
<%Total = Request.QueryString("food").Count%>
<%For i = 1 to Total%>
<%= Request.QueryString("food")(i) %> <BR>
<%Next%>
上述脚本将显示:
apples
olives
bread
Form 集合
当使用 HTTP GET 方法去向 Web 服务器传递长而复杂的表格值时,将可能丢失信息。大多数的 Web 服务器倾向于严格控制 URL 查询字符串的长度,以便用 GET 方法传送的冗长的表格值被截断。如果您需要从表格发送大量信息到 Web 服务器,就必须使用 HTTP POST 方法。此法用于在 HTTP 请求正文中发送表格数据,而且发送的字符的个数可以无限多。也可以使用 ASP Request 对象的 Form 集合检索用 POST 方法发送的值。
Form 集合与 QueryString 集合存储数值的方式相同。例如,如果用户用一长串名称填充表格,您就可以用下面的脚本检索这些名称:
<% For i = 1 to Request.Form.Count %>
<% =Request.Form("names")(i) %>
<% Next %>
验证表格输入
一个好的表格处理脚本在处理数据前,应先验证输入表格的信息是否有效。验证脚本可以检验用户输入到表格的信息类型是否正确。例如,如果您的 Web 站点包含一个表格,该表格允许用户计算财务信息,那么在处理结果之前,需要验证用户确实输入了数值信息而不是文本。
一个非常方便的验证表格输入的方法是创建一个向自身传递信息的表格。在这种情况下,.asp 文件包含可获取信息的表格。例如,下面的脚本通过向自身传递信息来验证用户是否在 "age" 表格字段中输入了数值:
<% If Isnumeric(Request.QueryString("Age")) then %>
<p>Hello, your age is <%=Request.QueryString("age")%>
<%Else %>
<p>Please enter a numerical age.
<%End If %>
<FORM METHOD= "POST" ACTION="verify.asp" >
Name: <INPUT TYPE="text" NAME="Name" >
Age: <INPUT TYPE="text" NAME="Age" >
<INPUT TYPE="submit" VALUE="Enter">
</FORM>
在这个例子中,脚本也在包含表格的同一 Verify.asp 文件中。表格通过在 ACTION 属性中指定 Verify.asp 向自身传送信息。
您也可以创建客户端脚本来检验用户是否输入了有效的信息。验证用户在 Web 浏览器上的输入除了更迅速地向用户提示表格项错误外,还可以减少 Web 服务器的网络流量。下面的脚本运行在用户的 Web 浏览器上,在将信息提交到 Web 服务器之前,验证用户信息。
<SCRIPT LANGUAGE="VBScript">
<!--
Sub btnEnter_OnClick
Dim TheForm
Set TheForm = Document.MyForm
If IsNumeric(TheForm.Age.Value) Then
TheForm.submit
Else
Msgbox "Please enter a numerical age."
End if
End Sub
//-->
</SCRIPT>
<FORM METHOD= "POST" NAME= MyForm ACTION="myfile.asp" >
Name: <INPUT TYPE="text" NAME="Name" >
Age: <INPUT TYPE="text" NAME="Age" >
<INPUT TYPE="button" NAME="btnEnter" VALUE="Enter">
</FORM>
十、 访问数据库
ActiveX Data Objects (ADO) 是一项容易使用并且可扩展的将数据库访问添加到 Web 页的技术。可以使用 ADO 去编写紧凑简明的脚本以便连接到 Open Database Connectivity (ODBC) 兼容的数据库和 OLE DB 兼容的数据源。如果您是一个对数据库连接有一定了解的脚本编写人员,那么您将发现 ADO 命令语句并不复杂而且容易掌握。同样地,如果您是一个经验丰富的数据库编程人员,您将会正确认识 ADO 的先进的与语言无关性和查询处理功能。
创建 ODBC DSN 文件
在创建数据库脚本之前,必须提供一条使 ADO 定位、标识和与数据库通讯的途径。数据库驱动程序使用 Data Source Name (DSN) 定位和标识特定的 ODBC 兼容数据库,将信息从 Web 应用程序传递给数据库。典型情况下,DSN 包含数据库配置、用户安全性和定位信息,且可以获取 Windows NT 注册表项中或文本文件的表格。
通过 ODBC,您可以选择希望创建的 DSN 的类型:用户、系统 或 文件。用户和系统 DSN 存储在 Windows NT 注册表中。系统 DSN 允许所有的用户登录到特定的服务器上去访问数据库,而用户 DSN 使用适当的安全身份证明限制数据库到特定用户的连接。文件 DSN 用于从文本文件中获取表格,提供了对多用户的访问,并且通过复制 DSN 文件,可以轻易地从一个服务器转移到另一个服务器。由于以上原因,本主题中的示例将使用文件 DSN。
通过在 Windows 的“开始”菜单打开“控制面板”,您可以创建基于 DSN 的文件。双击“ODBC”图标,然后选择“文件 DSN”属性页,单击“添加”,选择数据库驱动程序,然后单击“下一步”。按照后面的指示配置适用于您的数据库软件的 DSN。
配置 Microsoft Access 数据库的文件 DSN
在“创建新数据源”对话框中,从列表框选择“Microsoft Access Driver”,然后单击“下一步”。
键入您的 DSN 文件名,然后单击“下一步”。
单击“完成”创建数据源。
在“ODBC Microsoft Access 97 安装程序”对话框中,单击“选择”。选择 Microsoft Access 数据库文件 (*.mdb),然后单击“确定”。
注意 由于性能和可靠性的原因,我们极力推荐您使用“客户-服务器数据库引擎”配置由这样一种 Web 应用程序驱动的数据,这些 Web 应用程序必须满足 10 个以上的用户的同时访问。尽管 ASP 可以使用任何 ODBC 兼容的数据库,但它是为使用客户-服务器数据库而设计的,而且经过了严格的测试,这些数据库包括 Microsoft ? SQL Server、Oracle 等。
ASP 支持共享文件数据库(如 Microsoft ? Access 或 Microsoft ? FoxPro)作为有效的数据源。尽管在 ASP 文档中的一些示例使用共享文件数据库,但我们建议只将此类数据库引擎用于开发或有限的配置方案。共享文件数据库可能无法很好地适用于可满足高需求、高质量的 Web 应用程序的客户-服务器数据库。
配置 SQL Server 数据库文件 DSN
注意 如果数据库驻留在远程服务器上,请与服务器管理员联系,获取附加的配置信息;下面的过程使用 SQL Server 的 ODBC 默认的设置,它可能不适用于您的硬件配置。
在“创建新数据源”对话框中,从列表框中选择“SQL Server”,然后单击“下一步”。
键入 DSN 文件的名称,然后单击“下一步”。
单击“完成”创建数据源。
键入运行 SQL 服务程序的服务器的名称、登录 ID 和密码。
在“创建 SQL Server 的新数据源”对话框中,在“服务器”列表框中键入包含 SQL Server 数据库的服务器的名称,然后单击“下一步”。
选择验证登录 ID 的方式。
如果要选择 SQL 服务器验证,请输入一个登录 ID 和密码,然后单击“下一步”。
在“创建 SQL Server 的新数据源”对话框中,设置默认数据库、存储过程设置的驱动程序和 ANSI 标识,然后单击“下一步”。(要获取详细信息,请单击“帮助”。)
在对话框(同样名为“创建 SQL Server 的新数据源”)中,选择一种字符转换方法,然后单击“下一步”。 (详细信息,请单击“帮助”。)
在下一个对话框(同样名为“创建 SQL Server 的新数据源”)中,选择登录设置。
注意 典型情况下, 您只能使用日志来调试数据库访问问题。
在“ODBC Microsoft SQL Server 安装程序”对话框中,单击“测试数据源”。如果 DSN 正确创建,“测试结果”对话框将指出测试成功完成。
SQL server 连接和安全信息
如果您正在开发用于连接远程 SQL Server 数据库的 ASP 数据库应用程序,应考虑以下问题:
连接方案- 您可以选择 TCP/IP 套接字和命名管道的方法访问远程的 SQL Server 数据库。当使用命名管道时,因为在建立连接之前,数据库用户必须被 Windows NT 确认,所以对只有适当的 SQL Server 访问身份而在该计算机上没有 Windows NT 用户帐号的用户可能会被拒绝访问命名管道。作为一种替代方案,使用 TCP/IP 套接字的连接可直接连接到数据库服务器,而不必通过使用命名管道的中间计算机。因为使用 TCP/IP 套接字连接可直接连接到数据库 server,所以通过 SQL Server 的确认,用户就可以获得访问权,而不必通过 Windows NT 的确认。
注意 在连接到远程数据库时使用 TCP/IP 套接字可提高性能。
安全性 - 如果您使用 SQL Server 的 集成 或 混合 安全特性,并且 SQL Server 数据库位于远程服务器上,则不能使用 Windows NT 请求/响应的确认。也就是说,不能将 Windows NT 请求/响应身份证转发到远程计算机上,而只能使用基本身份验证,它根据用户提供用户名和口令信息进行。
有关这一主题的详细信息,请参阅 [url]http://www.microsoft.com/sqlsupport/[/url]
上的 Microsoft SQL Server 技术支持主页。
配置 Oracle 数据库文件 DSN
首先要确保 Oracle 用户软件被正确地安装要创建 DSN 的计算机上。详细信息,请与服务器管理员联系或参阅数据库软件文档。
在“创建新数据源”对话框中,从列表框中选择“Microsoft ODBC for Oracle”,然后单击“下一步”。
键入 DSN 文件的名称,然后单击“下一步”。
单击“完成”创建数据源。
输入用户名、密码和服务器名,然后单击“确定”。
注意 DSN 文件用 .dsn 扩展名,位于 \Programs\Common Files\ODBC\Data Sources 目录中。
有关创建 DSN 文件的详细信息,请访问 Microsoft ODBC Web 站点:[url]http://microsoft.com/odbc/[/url]。
连接数据库
访问数据库信息的第一步是和数据库源建立连接。ADO 提供 Connection 对象,可以使用该对象建立和管理应用程序和 ODBC 数据库之间的连接。Connection 对象具有各种属性和方法,可以使用它们打开和关闭数据库连接,并且发出查询请求来更新信息。
要建立数据库连接,首先应创建 Connection 对象的实例。例如,下面的脚本创建 Connection 对象,接着打开数据库连接:
<%
'Create a connection object
Set cn = Server.CreateObject("ADODB.Connection")
'Open a connection; the string refers to the DSN
cn.Open "FILEDSN=MyDatabase.dsn"
%>
注意 无论在等号 (=) 之前还是之后,DSN 字符串都不能包含空格。
在这种情况下,Connection 对象的 Open 方法引用基于 DSN 的文件,其中包含关于数据库的位置和配置信息。也可以不引用 DSN,直接显式引用供应程序、数据源、用户 ID 和密码。有关建立连接的可选方法的详细信息,请参阅 Microsoft ActiveX Data Objects (ADO)。
用 Connection 对象执行查询
用 Connection 对象的 Execute 方法,您可以发出结构化查询语言 (SQL) 查询数据库源并检索结果。SQL 是用于与数据库通讯的工业标准语言,它有许多命令可用来检索和更新信息。
下?/div> 内容太多,慢慢看,楼主辛苦
页:
[1]