Active Server Pages (动态服务器页面)

ASP

ASP 文件可包含文本、 HTML 标签和脚本。ASP 文件中的脚本可在服务器上执行。

在学习之前,应具备的知识:

在继续学习之前,您需要对以下知识有基本的了解:

  • HTML / XHTML
  • 脚本语言,比如 JavaScript 或者 VBScript

ASP 是什么?

  • ASP 指 Active Server Pages (动态服务器页面)
  • ASP 是一项微软公司的技术
  • ASP 是在 IIS 中运行的程序
  • IIS 指 Internet Information Services (Internet 信息服务)
  • IIS 是 Windows 2000 及 Windows 2003 的免费组件
  • IIS 同时也是 Windows NT 4.0 的可选组件
  • 此可选组件可通过因特网下载
  • PWS 的体积更小 - 不过拥有 IIS 的完整功能
  • PWS 可在 Windows 95/98 的安装 CD 中找到

ASP 兼容性

  • 运行 IIS,需要 Windows NT 4.0 或更高的版本。
  • 运行 PWS ,需要 Windows 95 或者更高的版本。
  • ChiliASP 是一种在非 Windows 操作系统上运行 ASP 的技术
  • InstantASP 是另一种在非 Windows 操作系统上运行 ASP 的技术

ASP 文件是什么?

  • ASP 文件和 HTML 文件类似
  • ASP 文件可包含文本、HTML、XML 和脚本
  • ASP 文件中的脚本可在服务器上执行。
  • ASP 文件的扩展名是 “.asp”

ASP 和 HTML 有何不同?

  • 当浏览器请求某个 HTML 文件时,服务器会返回这个文件
  • 而当浏览器请求某个 ASP 文件时,IIS 将这个请求传递至 ASP 引擎。ASP 引擎会逐行地读取这个文件,并执行文件中的脚本。最后,ASP 文件将以纯 HTML 的形式返回到浏览器。

ASP 能为你做什么?

  • 动态地编辑、改变或者添加页面的任何内容
  • 对由用户从 HTML 表单提交的查询或者数据作出响应
  • 访问数据或者数据库,并向浏览器返回结果
  • 为不同的用户定制网页,提高这些页面的可用性
  • 用 ASP 替代 CGI 和 Perl 的优势在于它的简易性和速度
  • 由于 ASP 代码无法从来浏览器端察看,ASP 确保了站点的安全性。
  • 优秀的 ASP 编程可将网络负载降至最低

**重要事项:**由于 ASP 在服务器上运行,浏览器无需支持客户端脚本就可以显示 ASP 文件!

您可以在自己的 PC 上运行 ASP 。

把自己的 Windows PC 作为 Web 服务器

如果您安装了 IIS 或者 PWS,就可以把自己的 PC 配置为一台 web 服务器。

IIS 或 PWS 可以把您的计算机转变为 web 服务器。

微软的 IIS 和 PWS 是免费的 web 服务器组件。

IIS - Internet Information Server

IIS 是一个基于因特网的服务的集合,由微软开发,在 Windows 平台上使用。

Windows 2000、XP、Vista 以及 Windows 7 均提供 IIS。Windows NT 也可用 IIS。

IIS 很容易安装,是开发和测试 web 应用程序的理想工具。

PWS - Personal Web Server

PWS 用于更老的 Windows 系统,比如 Windows 95、98 以及 NT。

PWS 很容易安装,可用于开发和测试包含 ASP 的 web 应用程序。

我们不推荐使用 PWS,除非是用于培训。它已经过时,并存在安全问题。

Windows Web 服务器版本

Windows 版本是否提供或支持
Windows 7(所有版本)提供 IIS 7.5
Windows Server 2008提供 IIS 7
Windows Vista Business, Enterprise 以及 Ultimate提供 IIS 7
Windows Vista Home Premium提供 IIS 7
Windows Vista Home Edition不支持 PWS 或 IIS
Windows Server 2003提供 IIS 6
Windows XP Professional提供 IIS 5.1
Windows XP Home Edition不支持 IIS 或 PWS
Windows 2000 Professional提供 IIS 5.0
Windows NT Professional提供 IIS 3,并支持 IIS 4
Windows NT Workstation支持 PWS 和 IIS 3
Windows ME不支持 PWS 或 IIS
Windows 98提供 PWS
Windows 95支持 PWS

如何在 Windows 7 及 Windows Vista 上安装 IIS

请根据以下四个步骤来安装 IIS:

  1. 从开始菜单打开控制面板
  2. 双击“程序和功能”
  3. 点击“打开或关闭 Windows 功能”
  4. 选择 “Internet 信息服务”的复选框,然后点击确定

在您安装完成 IIS 之后,请确保安装所有补丁包(运行 Windows 更新)。

在浏览器中通过查看源代码的方式是无法看到 ASP 源代码的,你只能看到由 ASP 文件输出的结果,而那些只是纯粹的 HTML 而已。这是因为,在结果被送回浏览器前,脚本已经在服务器上执行了。

在我们的 ASP 教程中,每个例子都提供隐藏的 ASP 代码。这样会使您更容易理解它们的工作原理。

实例[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7XOLzaMH-1689475525403)(C:\Users\dragon\AppData\Roaming\Typora\typora-user-images\image-20230716000353997.png)]

  • 用 ASP 写文本

    如果使用 ASP 生成文本。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FbghO1r5-1689474904460)(C:\Users\dragon\AppData\Roaming\Typora\typora-user-images\image-20230716000353997.png)]

  • 向文本添加 HTML

    如果同时生成 HTML 标签和纯文本。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f0hM24m0-1689474904460)(C:\Users\dragon\AppData\Roaming\Typora\typora-user-images\image-20230716000359107.png)]

基本的 ASP 语法规则

通常情况下,ASP 文件包含 HTML 标签,类似 HTML 文件。不过,ASP 文件也能够包含服务器端脚本,这些脚本被分隔符 <%%> 包围起来。

服务器脚本在服务器上执行,可包含合法的表达式、语句、或者运算符。

向浏览器写输出

response.write 命令用来向浏览器写输出。下面的例子向浏览器传送了一段文本:“Hello World”。

<html>
<body>
<%
response.write("Hello World!")
%>
</body>
</html>

还有一种 response.write 命令的简写方法。下面的例子和上面的例子是等效的:

<html>
<body>
<%="Hello World!"%>
</body>
</html>

在 ASP 中使用 JavaScript

如果需要使用 JavaScript 作为某个特定页面的默认脚本语言,就必须在页面的顶端插入一行语言设定:

<%@ language="javascript"%>
<html>
<body>
<%
Response.Write("Hello World!")
%>
</body>
</html>

**注意:**与 VBScript 不同 - JavaScript 对大小写敏感。所以你需要根据 JavaScript 的需要使用不同的大小写字母编写 ASP 代码。

其他的脚本语言

ASP 与 VBScript 和 JScript 的配合是原生性的(JScript 是微软的 JavaScript 实现)。如果你需要使用其他语言编写脚本,比如 PERL、REXX 或者 Python,那就必须安装相应的脚本引擎。

**重要事项:**因为脚本在服务器端执行,所以显示 ASP 文件的浏览器根本无需支持脚本。

ASP 变量

变量用于存储信息。

假如在子程序之外声明变量,那么这个变量可被 ASP 文件中的任何脚本改变。假如在子程序中声明变量,那么当子程序每次执行时,它才会被创建和撤销。

实例:

  • 声明变量

    变量用于存储信息。本例演示如何声明变量,为变量赋值,并在程序中使用这个变量

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ubmk9SVF-1689474904461)(C:\Users\dragon\AppData\Roaming\Typora\typora-user-images\image-20230716001120756.png)]

  • 声明数组

    数组用于存储一系列相关的数据项目。本例演示如何声明一个存储名字的数组。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VaWKZQFQ-1689474904461)(C:\Users\dragon\AppData\Roaming\Typora\typora-user-images\image-20230716001300980.png)]

  • 循环生成 HTML 标题

    如何循环生成 6 个不同的 HTML 标题。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CIuzMFVL-1689474904461)(C:\Users\dragon\AppData\Roaming\Typora\typora-user-images\image-20230716001523003.png)]

使用 JavaScript 制作基于时间的问候语

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RuBuvLrs-1689474904462)(C:\Users\dragon\AppData\Roaming\Typora\typora-user-images\image-20230716001324095.png)]

变量的生存期

在子程序外声明的变量可被 ASP 文件中的任何脚本访问和修改。

在子程序中声明的变量只有当子程序每次执行时才会被创建和撤销。子程序外的脚本无法访问和修改该变量。

如需声明供多个 ASP 文件使用的变量,请将变量声明为 session 变量或者 application 变量。

Session 变量

Session 变量用于存储单一用户的信息,并且对一个应用程序中的所有页面均有效。存储于 session 中的典型数据是姓名、id 或参数。

Application 变量

Application 变量同样对一个应用程序中的所有页面均有效。Application 变量用于存储一个特定的应用程序中所有用户的信息。

ASP 子程序

在 ASP 中,你可通过 VBScript 和其他方式调用子程序。

实例:

  • 调用使用 JavaScript 的子程序

    如何从 ASP 调用以 JavaScript 编写的子程序。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RHWZymnk-1689474904462)(C:\Users\dragon\AppData\Roaming\Typora\typora-user-images\image-20230716002303991.png)]

  • 调用使用 VBScript 和 JavaScript 的子程序

    如何在一个 ASP 文件中调用以 VBScript 和 JavaScript 编写的子程序。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s2I14x4J-1689474904463)(C:\Users\dragon\AppData\Roaming\Typora\typora-user-images\image-20230716002512658.png)]

VBScript 与 JavaScript 之间的差异

当从一个用 VBScript 编写的 ASP 文件中调用 VBScript 或者 JavaScript 子程序时,可以使用关键词 “call”,后面跟着子程序名称。假如子程序需要参数,当使用关键词 “call” 时必须使用括号包围参数。假如省略 “call”,参数则不必由括号包围。假如子程序没有参数,那么括号则是可选项。

当从一个用 JavaScript 编写的 ASP 文件中调用 VBScript 或者 JavaScript 子程序时,必须在子程序名后使用括号。

调用使用 VBScript 的子程序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hwt7wh4o-1689474904463)(C:\Users\dragon\AppData\Roaming\Typora\typora-user-images\image-20230716002857122.png)]

ASP 表单和用户输入

Request.QueryString 和 Request.Form 命令可用于从表单取回信息,比如用户的输入。

实例:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EgF5zr4u-1689474904464)(C:\Users\dragon\AppData\Roaming\Typora\typora-user-images\image-20230716003433470.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aDJsaQo1-1689474904464)(C:\Users\dragon\AppData\Roaming\Typora\typora-user-images\image-20230716003613825.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CKJ0Fuem-1689474904464)(C:\Users\dragon\AppData\Roaming\Typora\typora-user-images\image-20230716003919182.png)]

用户输入的信息可通过两种方式取回:Request.QueryString 或 Request.Form。

Request.QueryString

Request.QueryString 命令用于搜集使用 method=“get” 的表单中的值。使用 GET 方法从表单传送的信息对所有的用户都是可见的(出现在浏览器的地址栏),并且对所发送信息的量也有限制。

HTML 表单实例

<form method="get" action="simpleform.asp">
<p>First Name: <input type="text" name="fname" /></p>
<p>Last Name: <input type="text" name="lname" /></p>
<input type="submit" value="Submit" />
</form>

如果用户在上面的表单实例中输入 “Bill” 和 “Gates”,发送至服务器的 URL 会类似这样:

http://www.w3school.com.cn/simpleform.asp?fname=Bill&lname=Gates

假设 ASP 文件 “simpleform.asp” 包含下面的代码:

<body>
Welcome
<%
response.write(request.querystring("fname"))
response.write(" " & request.querystring("lname"))
%>
</body>

浏览器将显示如下:

Welcome Bill Gates

Request.Form

Request.Form 命令用于搜集使用 “post” 方法的表单中的值。使用 POST 方法从表单传送的信息对用户是不可见的,并且对所发送信息的量也没有限制。

HTML 表单实例

<form method="post" action="simpleform.asp">
<p>First Name: <input type="text" name="fname" /></p>
<p>Last Name: <input type="text" name="lname" /></p>
<input type="submit" value="Submit" />
</form>

如果用户在上面的表单实例中输入 “Bill” 和 “Gates”,发送至服务器的 URL 会类似这样:

http://www.w3school.com.cn/simpleform.asp

假设 ASP 文件 “simpleform.asp” 包含下面的代码:

<body>
Welcome
<%
response.write(request.form("fname"))
response.write(" " & request.form("lname"))
%>
</body>

浏览器将显示如下:

Welcome Bill Gates

表单验证

只要有可能,就应该对用户输入的数据进行验证(通过客户端的脚本)。浏览器端的验证速度更快,并可以减少服务器的负载。

如果用户数据会输入到数据库中,那么你应该考虑使用服务器端的验证。有一种在服务器端验证表单的好的方式,就是将(验证过的)表单传回表单页面,而不是转至不同的页面。用户随后就可以在同一个页面中得到错误的信息。这样做的话,用户就更容易发现错误了。

ASP Cookie

cookie 常用来对用户进行识别。

实例

  • Welcome cookie

    如何创建欢迎 cookie。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YHNHlRTT-1689474904465)(C:\Users\dragon\AppData\Roaming\Typora\typora-user-images\image-20230716004904852.png)]

cookies的过期时间为创建时间+365天

什么是 Cookie?

cookie 常用来对用户进行识别。cookie 是一种服务器留在用户电脑中的小文件。每当同一台电脑通过浏览器请求页面时,这台电脑也会发送 cookie。通过 ASP,您能够创建并取回 cookie 的值。

如何创建 cookie?

“Response.Cookies” 命令用于创建 cookie。

**注意:**Response.Cookies 命令必须位于 标签之前。

在下面的例子中,我们会创建一个名为 “firstname” 的 cookie,并向其赋值 “Alex”:

<%
Response.Cookies("firstname")="Alex"
%>

向 cookie 分配属性也是可以的,比如设置 cookie 的失效时间:

<%
Response.Cookies("firstname")="Alex" 
Response.Cookies("firstname").Expires=#May 10,2020#
%>

如何取回 cookie 的值?

“Request.Cookies” 命令用于取回 cookie 的值。

在下面的例子中,我们取回了名为 “firstname” 的 cookie 的值,并把值显示到了页面上:

<%
fname=Request.Cookies("firstname")
response.write("Firstname=" & fname)
%>

输出:

Firstname=Alex

带有键的 cookie

如果一个 cookie 包含多个值的一个集合,我们就可以说 cookie 拥有键(Keys)。

在下面的例子中,我们会创建一个名为 “user” 的 cookie 集。“user” cookie 拥有包含用户信息的键:

<%
Response.Cookies("user")("firstname")="John"
Response.Cookies("user")("lastname")="Adams"
Response.Cookies("user")("country")="UK"
Response.Cookies("user")("age")="25"
%>

读取所有的 cookie

请阅读下面的代码:

<%
Response.Cookies("firstname")="Alex"
Response.Cookies("user")("firstname")="John"
Response.Cookies("user")("lastname")="Adams"
Response.Cookies("user")("country")="UK"
Response.Cookies("user")("age")="25"
%>

假设您的服务器将所有的这些 cookie 传给了某个用户。

现在,我们需要读取这些 cookie。下面的例子向您展示如何做到这一点(请注意,下面的代码会使用 HasKeys 检查 cookie 是否拥有键):

<html>
<body>

<%
dim x,y

 for each x in Request.Cookies
  response.write("<p>")
  if Request.Cookies(x).HasKeys then
    for each y in Request.Cookies(x)
      response.write(x & ":" & y & "=" & Request.Cookies(x)(y))
      response.write("<br />")
    next
  else
    Response.Write(x & "=" & Request.Cookies(x) & "<br />")
  end if
  response.write "</p>"
next
%>

</body>
</html>

输出:

firstname=Alex

user:firstname=John
user:lastname=Adams
user:country=UK
user:age=25

如何应对不支持 cookie 的浏览器?

如果您的应用程序需要和不支持 cookie 的浏览器打交道,那么您不得不使用其他的办法在您的应用程序中的页面之间传递信息。这里有两种办法:

1. 向 URL 添加参数

您可以向 URL 添加参数:

<a href="welcome.asp?fname=John&lname=Adams">
Go to Welcome Page
</a>

然后在类似于下面这个 “welcome.asp” 文件中取回这些值:

<%
fname=Request.querystring("fname")
lname=Request.querystring("lname")
response.write("<p>Hello " & fname & " " & lname & "!</p>")
response.write("<p>Welcome to my Web site!</p>")
%>

2. 使用表单

您还可以使用表单。当用户点击提交按钮时,表单会把用户输入的数据提交给 “welcome.asp” :

<form method="post" action="welcome.asp">
First Name:  <input type="text" name="fname" value="">
Last Name: <input type="text" name="lname" value="">
<input type="submit" value="Submit">
</form>

然后在 “welcome.asp” 文件中取回这些值,就像这样:

<%
fname=Request.form("fname")
lname=Request.form("lname")
response.write("<p>Hello " & fname & " " & lname & "!</p>")
response.write("<p>Welcome to my Web site!</p>")
%>

ASP Session 对象

Session 对象用于存储用户的信息。存储于 session 对象中的变量持有单一用户的信息,并且对于一个应用程序中的所有页面都是可用的。

Session 对象

当您操作某个应用程序时,您打开它,做些改变,然后将它关闭。这很像一次对话(Session)。计算机知道您是谁。它清楚您在何时打开和关闭应用程序。但是在因特网上有一个问题:由于 HTTP 地址无法存留状态,web 服务器并不知道您是谁以及您做了什么。

ASP 通过为每位用户创建一个唯一的 cookie 的方式解决了这个问题。cookie 被传送至客户端,它含有可识别用户的信息。这种接口被称作 Session 对象。

Session 对象用于存储关于用户的信息,或者为一个用户的 session 更改设置。存储于 session 对象中的变量存有单一用户的信息,并且对于应用程序中的所有页面都是可用的。存储于 session 对象中的信息通常是 name、id 以及参数。服务器会为每个新的用户创建一个新的 Session,并在 session 到期时撤销掉这个 Session 对象。

Session 何时开始?

Session 开始于:

  • 当某个新用户请求了一个 ASP 文件,并且 Global.asa 文件引用了 Session_OnStart 子程序时;
  • 当某个值存储在 Session 变量中时;
  • 当某个用户请求了一个 ASP 文件,并且 Global.asa 使用 标签通过 session 的 scope 来例示某个对象时;

Session 何时结束?

假如用户没有在规定的时间内在应用程序中请求或者刷新页面,session 就会结束。默认值为 20 分钟。

如果您希望将超时的时间间隔设置得更长或更短,可以设置 Timeout 属性。

下面的例子设置了 5 分钟的超时时间间隔:

<%
Session.Timeout=5
%>

要立即结束 session,可使用 Abandon 方法:

<%
Session.Abandon
%>

**注意:**使用 session 时主要的问题是它们该在何时结束。我们不会知道用户最近的请求是否是最后的请求。因此我们不清楚该让 session“ 存活”多久。为某个空闲的 session 等待太久会耗尽服务器的资源。然而假如 session 被过早地删除,那么用户就不得不一遍又一遍地重新开始,这是因为服务器已经删除了所有的信息。寻找合适的超时间隔时间是很困难的。

**提示:**如果您正在使用 session 变量,请不要在其中存储大量的数据。

存储和取回 session 变量

Session 对象最大的优点是可在其中存储变量,以供后续的网页读取,其应用范围是很广的。

下面的例子把 “Donald Duck” 赋值给名为 username 的 session 变量,并把 “50” 赋值给名为 age 的 session 变量:

<%
Session("username")="Donald Duck"
Session("age")=50
%>

一旦值被存入 session 变量,它就能被 ASP 应用程序中的任何页面使用:

Welcome <%Response.Write(Session("username"))%>

上面这行程序返回的结果是: “Welcome Donald Duck”。

也可以在 session 对象中保存用户参数,然后通过访问这些参数来决定向用户返回什么页面。

下面的例子规定,假如用户使用低显示器分辨率,则返回纯文本版本的页面:

<%If Session("screenres")="low" Then%> 
  This is the text version of the page
<%Else%> 
  This is the multimedia version of the page
<%End If%>

移除 session 变量

contents 集合包含所有的 session 变量。

可通过 remove 方法来移除 session 变量。

在下面的例子中,假如 session 变量 “age” 的值小于 18,则移除 session 变量 “sale”:

<%
If Session.Contents("age")<18 then 
  Session.Contents.Remove("sale")
End If 
%>

如需移除 session 中的所有变量,请使用 RemoveAll 方法:

<%
Session.Contents.RemoveAll()
%>

遍历 contents 集合

contents 集合包含所有的 session 变量。可通过遍历 contents 集合,来查看其中存储的变量:

<%
Session("username")="Donald Duck"
Session("age")=50

dim i
For Each i in Session.Contents
  Response.Write(i & "<br />")
Next
%>

结果:

username
age

如果需要了解 contents 集合中的项目数量,可使用 count 属性:

<%
dim i
dim j
j=Session.Contents.Count
Response.Write("Session variables: " & j)
For i=1 to j
  Response.Write(Session.Contents(i) & "<br />")
Next
%>

结果:

Session variables: 2
Donald Duck
50

遍历 StaticObjects 集合

可通过循环 StaticObjects 集合,来查看存储在 session 对象中所有对象的值:

<%
dim i
For Each i in Session.StaticObjects
  Response.Write(i & "<br />")
Next
%>

ASP Application 对象

web 上的一个应用程序可以是一组 ASP 文件。这些 ASP 文件一起协同工作来完成某项任务。ASP 中的 Application 对象用来把这些文件捆绑在一起。

Application 对象用于存储和访问来自任何页面的变量,类似于 session 对象。不同之处在于,所有的用户分享一个 Application 对象,而 session 对象和用户的关系是一一对应的。

Application 对象存有会被应用程序中的许多页面使用的信息(比如数据库连接信息)。这意味着可以从任何的页面访问这些信息。同时也意味着你可在一个地点改变这些信息,然后这些改变会自动反映在所有的页面上。

存储和取回 Application 变量

Application 变量可被应用程序中的任何页面访问和改变。

可以像这样在 “Global.asa” 中创建 Application 变量:

<script language="vbscript" runat="server">

Sub Application_OnStart
application("vartime")=""
application("users")=1
End Sub

</script>

在上面的例子中,我们创建了两个 Application 变量:“vartime” 和 “users”。

可以像这样访问 Application 变量的值:

There are 
<%
Response.Write(Application("users"))
%> 
active connections.

遍历 Contents 集合

Contents 集合包含着所有的 application 变量。我们可以通过对 contents 集合进行遍历,来查看其中存储的变量:

<%
dim i
For Each i in Application.Contents
  Response.Write(i & "<br />")
Next
%>

如果你不清楚 contents 集中的项目数量,可使用 count 属性:

<%
dim i
dim j
j=Application.Contents.Count
For i=1 to j
  Response.Write(Application.Contents(i) & "<br />")
Next
%>

遍历 StaticObjects 集合

可通过循环 StaticObjects 集合,来查看所有存储于 Application 对象中的对象的值:

<%
dim i
For Each i in Application.StaticObjects
  Response.Write(i & "<br />")
Next
%>

锁定和解锁

我们可以使用 “Lock” 方法来锁定应用程序。当应用程序锁定后,用户们就无法改变 Application 变量了(除了正在访问 Application 变量的用户)。我们也可使用 “Unlock” 方法来对应用程序进行解锁。这个方法会移除对 Application 变量的锁定:

<%
Application.Lock
  'do some application object operations
Application.Unlock
%>

ASP 文件引用

#include 指令用于在多重页面上创建需重复使用的函数、页眉、页脚或者其他元素等。

#include 指令

通过使用 #include 指令,我们可以在服务器执行 ASP 文件之前,把另一个ASP文件插入这个文件中。#include 命令用于在多个页面上创建需要重复使用的函数、页眉、页脚或者其他元素等。

如何使用 #include 指令

这里有一个名为 “mypage.asp” 的文件:

<html> 
<body> 
<h2>Words of Wisdom:</h2>
<p><!--#include file="wisdom.inc"--></p> 
<h2>The time is:</h2>
<p><!--#include file="time.inc"--></p>
</body> 
</html>

这是 “wisdom.inc” 文件:

"One should never increase, beyond what is necessary,
the number of entities required to explain anything."

这是 “time.inc” 文件:

<%
Response.Write(Time)
%>

在浏览器中查看的源代码应该类似这样:

<html>
<body>
<h2>Words of Wisdom:</h2>
<p>"One should never increase, beyond what is necessary,
the number of entities required to explain anything."</p>
<h2>The time is:</h2>
<p>11:33:42 AM</p>
</body>
</html>

Including 文件的语法:

如需在 ASP 中引用文件,请把 #include 命令置于注释标签之中:

<!--#include virtual="somefilename"-->

或者:

<!--#include file ="somefilename"-->

关键词 Virtual

关键词 virtual 指示路径以虚拟目录开始。

如果 “header.inc” 文件位于虚拟目录 /html 中,下面这行代码会插入文件 “header.inc” 中的内容:

<!-- #include virtual ="/html/header.inc" -->

关键词 File

关键词 File 指示一个相对的路径。相对路径起始于含有引用文件的目录。

假设文件位于 html 文件夹的子文件夹 headers 中,下面这段代码可引用 “header.inc” 文件的内容:

<!-- #include file ="headers\header.inc" -->

**注意:**被引用文件的路径是相对于引用文件的。假如包含 #include 声明的文件不在 html 目录中,这个声明就不会起效。

您也可以使用关键词 file 和语法 (…) 来引用上级目录中的文件。

提示和注释

在上面的一节中,我们使用 “.inc” 来作为被引用文件的后缀。注意:假如用户尝试直接浏览 INC 文件,这个文件中内容就会暴露。假如被引用的文件中的内容涉及机密,那么最好还是使用 “asp” 作为后缀。ASP 文件中的源代码被编译后是不可见的。被引用的文件也可引用其他文件,同时一个 ASP 文件可以对同一个文件引用多次。

**重要事项:**在脚本执行前,被引用的文件就会被处理和插入。

下面的代码无法执行,这是由于 ASP 会在为变量赋值之前执行 #include 命令:

<%
fname="header.inc"
%>
<!--#include file="<%=fname%>"-->

不能在脚本分隔符之间包含文件引用:

<%
For i = 1 To n
  <!--#include file="count.inc"-->
Next
%>

但是这段脚本可以工作:

<% For i = 1 to n %>
<!--#include file="count.inc" -->
<% Next %

ASP Global.asa 文件

Global.asa 文件是一个可选的文件,它可包含可被 ASP 应用程序中每个页面访问的对象、变量以及方法的声明。

Global.asa 文件

Global.asa 文件是一个可选的文件,它可包含可被 ASP 应用程序中每个页面访问的对象、变量以及方法的声明。所有合法的浏览器脚本都能在 Global.asa 中使用。

Global.asa 文件可包含下列内容:

  • Application 事件
  • Session 事件
  • 声明
  • TypeLibrary 声明
  • #include 指令

**注释:**Global.asa 文件须存放于 ASP 应用程序的根目录中,且每个应用程序只能有一个 Global.asa 文件。

Global.asa 中的事件

在 Global.asa 中,我们可以告知 application 和 session 对象在启动和结束时做什么事情。完成这项任务的代码被放置在事件操作器中。Global.asa 文件能包含四种类型的事件:

Application_OnStart - 此事件会在首位用户从 ASP 应用程序调用第一个页面时发生。此事件会在 web 服务器重起或者 Global.asa 文件被编辑之后发生。“Session_OnStart” 事件会在此事件发生之后立即发生。

Session_OnStart - 此事件会在每当新用户请求他或她的在 ASP 应用程序中的首个页面时发生。

Session_OnEnd - 此事件会在每当用户结束 session 时发生。在规定的时间(默认的事件为 20 分钟)内如果没有页面被请求,session 就会结束。

Application_OnEnd - 此事件会在最后一位用户结束其 session 之后发生。典型的情况是,此事件会在 Web 服务器停止时发生。此子程序用于在应用程序停止后清除设置,比如删除记录或者向文本文件写信息。

Global.asa 文件可能类似这样:

<script language="vbscript" runat="server">

sub Application_OnStart
  'some code
end sub

sub Application_OnEnd
  'some code
end sub

sub Session_OnStart
  'some code
end sub

sub Session_OnEnd
  'some code
end sub

</script>

**注释:**由于无法使用 ASP 的脚本分隔符 (<% 和 %>) 在 Global.asa 文件中插入脚本,我们需使用 HTML 的

声明

可通过使用 标签在 Global.asa 文件中创建带有 session 或者 application 作用域的对象。

注释: 标签应位于

语法:

<object runat="server" scope="scope" id="id"
{progid="progID"|classid="classID"}>
....
</object>
参数描述
scope设置对象的作用域(作用范围)(Session 或者 Application)。
id为对象指定一个唯一的 id。
ProgID与 ClassID 关联的 id。ProgID 的格式是:[Vendor.]Component[.Version]。ProgID 或 ClassID 必需被指定。
ClassID为 COM 类对象指定唯一的 id。ProgID 或 ClassID 必需被指定。

实例

第一个实例创建了一个名为 “MyAd” 且使用 ProgID 参数的 session 作用域对象:

<object runat="server" scope="session" id="MyAd" progid="MSWC.AdRotator">
</object>

第二个实例创建了名为 “MyConnection” 且使用 ClassID 参数的

<object runat="server" scope="application" id="MyConnection"
classid="Clsid:8AD3067A-B3FC-11CF-A560-00A0C9081C21">
</object>

在此 Global.asa 文件中声明的这些对象可被应用程序中的任何脚本使用。

GLOBAL.ASA:

<object runat="server" scope="session" id="MyAd" progid="MSWC.AdRotator">
</object>

您可以从 ASP 应用程序中的任意页面引用此 “MyAd” 对象:

某个 .ASP 文件:

<%=MyAd.GetAdvertisement("/banners/adrot.txt")%>

TypeLibrary 声明

TypeLibrary (类型库)是一个容器,其中装有对应于 COM 对象的 DLL 文件。通过在 Global.asa 中包含对 TypeLibrary 的调用,可以访问 COM 对象的常量,同时 ASP 代码也能更好地报告错误。假如您的站点的应用程序依赖于已在类型库中声明过数据类型的 COM 对象,您可以在 Global.asa 中对类型库进行声明。

语法:

<!--METADATA TYPE="TypeLib"
file="filename"
uuid="typelibraryuuid"
version="versionnumber"
lcid="localeid"
-->
参数描述
file规定指向类型库的绝对路径。参数 file 或者 uuid,两者缺一不可。
uuid规定了针对类型库的唯一的标识符。参数 file 或者 uuid,两者缺一不可。
version可选。用于选择版本。假如没有找到指定的版本,将使用最接近的版本。
lcid可选。用于类型库的地区标识符。

错误值

服务器会返回以下的错误消息之一:

错误代码描述
ASP0222Invalid type library specification
ASP0223Type library not found
ASP0224Type library cannot be loaded
ASP0225Type library cannot be wrapped

**注释:**METADATA 标签可位于 Global.asa 文件中的任何位置(在

限定

关于可以在 Global.asa 文件中引用的内容的限定:

你无法显示 Global.asa 文件中的文本。此文件无法显示信息。

你只能在 Application_OnStart 和 Application_OnEnd 子例程中使用 Server 和 Application 对象。在 Session_OnEnd 子例程中,你可以使用 Server、Application 和 Session 对象。在 Session_OnStart 子例程中,你可使用任何内建的对象。

如何使用子例程

Global.asa 常用于对变量进行初始化。

下面的例子展示如何检测访问者首次到达站点的确切时间。时间存储在名为 “started” 的 Session 对象中,并且 “started” 变量的值可被应用程序中的任何 ASP 页面访问:

<script language="vbscript" runat="server">
sub Session_OnStart
Session("started")=now()
end sub
</script>

Global.asa 也可用于控制页面访问。

下面的例子展示如何把每位新的访问者重定向到另一个页面,在这个例子中会定向到 “newpage.asp” 这个页面:

<script language="vbscript" runat="server">
sub Session_OnStart
Response.Redirect("newpage.asp")
end sub
</script>

我们还可以在 Global.asa 中包含函数。

在下面的例子中,当 Web 服务器启动时,Application_OnStart 子例程也会启动。随后,Application_OnStart 子例程会调用另一个名为 “getcustomers” 的子例程。“getcustomers” 子例程会打开一个数据库,然后从 “customers” 表中取回一个记录集。此记录集会赋值给一个数组,在不查询数据库的情况下,任何 ASP 页面都能够访问这个数组:

<script language="vbscript" runat="server">

sub Application_OnStart
getcustomers
end sub

sub getcustomers 
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open "c:/webdata/northwind.mdb"
set rs=conn.execute("select name from customers")
Application("customers")=rs.GetRows
rs.Close
conn.Close
end sub

</script>

Global.asa 实例

在这个例子中,我们要创建一个可计算当前访客的 Global.asa 文件。

Application_OnStart 设置当服务器启动时,Application 变量 “visitors” 的值为 0。

每当有新用户访问时,Session_OnStart 子例程就会给变量 “visitors” 加 1。

每当 Session_OnEnd 子例程被触发时,此子例程就会从变量 “visitors” 减 1。

Global.asa 文件:

<script language="vbscript" runat="server">

Sub Application_OnStart
Application("visitors")=0
End Sub

Sub Session_OnStart
Application.Lock
Application("visitors")=Application("visitors")+1
Application.UnLock
End Sub

Sub Session_OnEnd
Application.Lock
Application("visitors")=Application("visitors")-1
Application.UnLock
End Sub

</script>

此 ASP 文件会显示当前用户的数目:

<html>
<head>
</head>
<body>
<p>There are <%response.write(Application("visitors"))%> online now!</p>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值