ASP 篇 (三)
通 过 前 两 篇 的 学 习,相 信 各 位 已 经 对 ASP 的 动 态 网 站 设 计 有 了 一 个 基 本 的 概 念 和 整 体 的 印 象 。从 本 篇 开 始 作 者 将 从 脚 本 语 言 的 使 用 着 手,由 浅 入 深 地 带 领 大 家 探 索 ASP 动 态 网 站 设 计 的 真 正 奥 秘。
本 文 第 二 篇 刊 登 后,很 多 朋 友 给 我 发 了“妹 儿”,希 望 能 尽 快 看 到 本 文 的 第 三、第 四、乃 至 第 … … 篇,甚 至 有 位 朋 友 焦 急 地 要 我 将 ASP 篇 的 全 文 发 给 他。看 到 有 如 此 之 多 志 同 道 合 的 朋 友,令 我 精 神 大 振。虽 然 ASP 早 在 两 年 前 就 已 经 推 出 了,但 直 到 今 年 它 才 以 其 灵 活 便 捷 的 开 发 过 程、良 好 的 WEB 数 据 库 连 接 功 能 受 到 了 国 人 的 重 视,然 而 由 于 目 前 国 内 尚 缺 乏 关 于 ASP 开 发 WEB 应 用 程 序 的 详 尽 教 材,因 此 使 得 国 内 广 大 WEB 开 发 者 们 仍 处 在 闭 门 啃 E 文 的 阶 段,也 包 括 作 者 本 人。也 正 因 为 如 此,作 者 才 蒙 发 了 写 文 章 的 念 头,在 得 到 Chinabyte 网 络 学 院 翁 斌 先 生 的 大 力 支 持 后,各 位 才 得 以 见 到 此 文。
作 者 殷 切 希 望 能 通 过 此 文 为 广 大 WEB 开 发 者 和 爱 好 者 提 供 便 利,使 大 家 共 同 来 参 加 ASP 的 学 习 和 交 流,为 了 顾 全 不 同 层 次 读 者 的 需 求 作 者 还 是 决 定 从 最 基 本 的 脚 本 语 言 的 编 制 着 手,随 后 再 一 步 一 步 地 讲 解 ASP 内 建 对 象、ActiveX 组 件 以 及 用 ASP 开 发 WEB 应 用 程 序 的 实 例,相 信 通 过 一 段 时 间 持 续 的 学 习,不 出 几 个 月 各 位 都 能 够 得 心 应 手 地 开 发 自 己 的 动 态 网 站。下 面 就 先 请 大 家 跟 我 来 学 习 一 些 ASP 中 应 用 脚 本 语 言(以 VBScript 为 主)的 基 础 知 识。
在 开 始 学 习 脚 本 语 言 之 前,你 应 该 理 解 一 些 简 单 的 概 念 -- 变 量、进 程。所 谓 变 量 是 计 算 机 内 存 中 已 命 名 的 存 储 位 置,其 中 包 含 了 数 字 或 字 符 串 等 数 据,它 使 用 户 便 于 理 解 脚 本 操 作 的 名 称,为 用 户 提 供 了 一 种 存 储、检 索 和 操 作 数 据 的 途 径。程 序 是 由 一 个 或 多 个 进 程 组 成 的,在 VBScript 中,进 程 就 是“指 令 块”,通 常 意 义 上 的 进 程,如 Sub,只 是 为 了 简 单 的 数 据 处 理。
在 VBScript 中,严 格 的 来 讲 变 量 是 不 用 声 明 的,
如:< % Mystring="This is my string" % >
然 而,即 使 在 使 用 变 量 前 不 需 要 去 声 明 变 量,也 应 养 成 在 编 程 时 声 明 变 量
的 良 好 习 惯,因 为 这 样 有 助 于 防 止 错 误 发 生。声 明 一 个 变 量 意 味 着 告 诉 脚 本 引 擎,有 一 个 特 定 名 称
的 变 量,这 样 就 可 以 在 脚 本 中 引 用 该 变 量。在 VBScript 中 声 明 一 个 变 量 可 以 使 用“Dim”语 句,如 下:
< script language="VBScript" >
< !--
Option
Explicit ' 要 求 在 脚 本 中 声 明 所 有 的 变 量
Dim Mystring
Mystring="This
is my string"
-- >
< /script>
变 量 的 作 用 域 即 生 命 期,决 定 哪 些 脚 本 命 令 可 访 问 变 量。在 过 程 内 部 声 明
的 变 量 具 有 局 部 作 用 域。每 执 行 一 次 过 程,变 量 就 被 创 建 然 后 消 亡。而 过 程 外 部 的 任 何 命 令 都 不 能
访 问 它。在 过 程 外 部 声 明 的 变 量 具 有 全 局 作 用 域,其 值 能 被 ASP 页 上 的 任 何 脚 本 命 令 访 问 和 修
改。声 明 变 量 时,局 部 变 量 和 全 局 变 量 可 以 有 相 同 的 名 称。而 改 变 其 中 一 个 的 值 并 不 会 改 变 另 一 个
的 值。如 果 没 有 声 明 变 量,则 可 能 不 小 心 会 改 变 一 个 全 局 变 量 的 值。例 如,以 下 脚 本 命 令 返 回 值 1,虽
然 有 两 个 名 为 Y 变 量:
< %
Dim YY = 1Call
SetLocalVariableResponse.Write Y
Sub SetLocalVariable
Dim Y
Y = 2End Sub % >
由 于 变 量 没 有 显 式 声 明,以 下 的 脚 本 命 令 将 返 回 2。当 过 程 调 用 将 Y 设 置
为 2 时,脚 本 引 擎 认 为 该 过 程 是 要 修 改 全 局 变 量:
<%
Y = 1Call
SetLocalVariableResponse.Write Y
Sub SetLocalVariable
Y = 2
End Sub% >
然 而,全 局 变 量 仅 在 单 个 ASP 页 中 可 用,要 使 它 在 单 个 ASP 页 之 外 可 用,就 必 须 为 变 量 赋 予 会 话 或 应 用 程 序 作 用 域。会 话 作 用 域 变 量 对 一 个 用 户 所 请 求 的 ASP 应 用 程 序 中 的 所 有 页 都 是 可 用 的。应 用 程 序 作 用 域 变 量 也 如 此。对 单 个 用 户 来 说,会 话 变 量 是 存 储 信 息 的 最 佳 途 径,例 如,用 户 首 选 项、用 户 名 或 用 户 的 标 识。对 于 一 个 特 殊 应 用 程 序 的 所 有 用 户,应 用 程 序 作 用 域 是 存 储 信 息 的 最 佳 途 径,例 如,应 用 程 序 特 定 的 问 候 语 或 应 用 程 序 所 需 的 初 始 值。ASP 提 供 两 个 内 建 对 象 来 让 您 存 储 变 量:Session 对 象 和 Application 对 象,这 将 在 今 后 的 ASP 内 建 对 象 中 着 重 讨 论。
让 我 们 再 来 看 看 常 量 的 定 义,常 量 是 用 来 代 替 一 个 数 或 字 符 串 的 名 称,它 在 整 个 脚 本 中 保 持 不 变。您 可 以 使 用 Const 语 句 在 VBScript 中 创 建 用 户 自 定 义 常 数。使 用 Const 语 句 可 以 创 建 名 称 具 有 一 定 含 义 的 字 符 串 型 或 数 值 型 常 数,并 给 它 们 赋 原 义 值。例 如:。
如:< % Const mystring=" 这 是 一 个 常 量 " % >
< % Const myage=100 % >
请 注 意 字 符 串 文 字 包 含 在 两 个 引 号 (" ") 之 间。这 是 区 分 字 符 串 型 常 数 和 数 值 型 常 数 的 最 明 显 的 方 法。日 期 文 字 和 时 间 文 字 包 含 在 两 个 井 号 (#) 之 间。例 如:
< % Const CutoffDate = #6-1-97# % >
在 理 解 了 常 量 和 变 量 之 后,我 们 来 看 看 什 么 是 过 程。它 是 一 组 能 执 行 指 定 任 务 且 具 有 返 回 值 的 脚 本 命 令。您 可 以 定 义 自 己 的 过 程,然 后 在 脚 本 中 反 复 调 用 它 们。您 可 以 将 过 程 定 义 放 在 调 用 过 程 的 .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 属 性,将 用 主 脚 本 语 言 解 释 此 脚 本 块。
在 VBScript 中,过 程 被 分 为 两 类:Sub 过 程 和 Function 过 程。Sub 过 程 是 包 含 在 Sub 和 End Sub 语 句 之 间 的 一 组 VBScript 语 句,执 行 操 作 但 不 返 回 值。Sub 过 程 可 以 使 用 参 数(由 调 用 过 程 传 递 的 常 数、变 量 或 表 达 式)。如 果 Sub 过 程 无 任 何 参 数,则 Sub 语 句 必 须 包 含 空 括 号 ()。
Function 过 程 是 包 含 在 Function 和 End Function 语 句 之 间 的 一 组 VBScript 语 句。Function 过 程 与 Sub 过 程 类 似,但 是 Function 过 程 可 以 返 回 值。Function 过 程 可 以 使 用 参 数(由 调 用 过 程 传 递 的 常 数、变 量 或 表 达 式)。如 果 Function 过 程 无 任 何 参 数,则 Function 语 句 必 须 包 含 空 括 号 ()。Function 过 程 通 过 函 数 名 返 回 一 个 值,这 个 值 是 在 过 程 的 语 句 中 赋 给 函 数 名 的。Function 返 回 值 的 数 据 类 型 总 是 Variant。在 下 面 的 示 例 中 Sub 过 程 使 用 两 个 固 有 的(或 内 置 的)VBScript 函 数,即 MsgBox 和 InputBox,来 提 示 用 户 输 入 信 息。然 后 显 示 根 据 这 些 信 息 计 算 的 结 果。计 算 由 使 用 VBScript 创 建 的 Function 过 程 完 成,Celsius 函 数 将 华 氏 度 换 算 为 摄 氏 度。Sub 过 程 ConvertTemp 调 用 此 函 数 时,包 含 参 数 值 的 变 量 被 传 递 给 函 数。换 算 结 果 返 回 到 调 用 过 程 并 显 示 在 消 息 框 中。
Sub ConvertTemp()
temp = InputBox(" 请 输 入 华 氏 温
度。", 1)
MsgBox " 温 度 为 " & Celsius(temp) & " 摄 氏 度。"
End
Sub
Function Celsius(fDegrees)
Celsius = (fDegrees - 32) * 5 / 9
End Function
给 过 程 传 递 数 据 的 途 径 是 使 用 参 数。参 数 被 作 为 要 传 递 给 过 程 的 数 据 的 占 位 符。参 数 名 可 以 是 任 何 有 效 的 变 量 名。使 用 Sub 语 句 或 Function 语 句 创 建 过 程 时,过 程 名 之 后 必 须 紧 跟 括 号。括 号 中 包 含 所 有 参 数,参 数 间 用 逗 号 分 隔。例 如,在 下 面 的 示 例 中,fDegrees 是 传 递 给 Celsius 函 数 的 值 的 占 位 符:
Function Celsius(fDegrees)
Celsius = (fDegrees -
32) * 5 / 9
End Function
要 从 过 程 获 取 数 据,必 须 使 用 Function 过 程。请 记 住,Function 过 程 可 以 返 回 值;Sub 过 程 不 返 回 值。
以 上 给 大 家 简 要 介 绍 了 VBScript,由 于 篇 幅 的 原 因,作 者 不 可 能 在 此 详 尽 介 绍 VBScript 的 所 有 知 识。但 是 由 于 ASP 本 身 并 不 是 一 种 编 程 语 言,因 此 在 大 家 编 写 ASP 应 用 程 序 的 过 程 中,必 须 借 助 脚 本 语 言 来 实 现 许 多 特 殊 的 功 能,所 以 灵 活 熟 练 地 掌 握 脚 本 语 言 对 一 个 使 用 ASP 编 写 WEB 应 用 程 序 的 程 序 员 来 说 是 至 关 重 要 的。无 论 您 是 一 个 有 丰 富 编 程 经 验 的 高 手 还 是 一 个 初 学 者,只 要 您 现 在 希 望 通 过 ASP 编 写 WEB 应 用 程 序,作 者 极 力 建 议 您 掌 握 至 少 一 门 脚 本 语 言(如 VBScript)。在 本 篇 的 末 尾 作 者 将 留 一 道 课 后 作 业 给 大 家,希 望 各 位 能 通 过 自 学 有 关 书 籍 并 在 实 践 中 迅 速 掌 握 脚 本 语 言。
课 后 作 业:
作 者 正 在 用 ASP 制 作 一 套 基 于 WEB 的 BBS 系 统,作 者 希 望 能 在 其 中 添 加 一 项 特 殊 功 能,即 当 任 何 用 户 登 陆 该 BBS 后 都 能 够 查 阅 近 七 天 来 所 有 新 发 布 的 信 息。由 于 ASP 本 身 的 内 建 对 象 和 组 件 并 没 有 提 供 此 项 功 能,因 此 作 者 请 大 家 从 VBScript 着 手,来 设 计 这 样 一 个 功 能。如 有 任 何 疑 问 请 EMAIL 作 者,答 案 将 在 下 一 篇 公 布。敬 请 关 注