ASP 篇 (一)

看 了《 如 何 令 你 的 网 站“ 动 感 十 足”》 一 文 后, 是 否 令 你 怦 然 心 动? 是 否 已 经 急 不 可 待 地 想 构 建 属 于 你 自 己 的 动 态 网 站? 本 文 将 以 Active Server Pages 为 中 心, 向 你 全 面 展 示 制 作 动 态 商 业 网 站 的 步 骤 和 技 巧 并 通 过 大 量 的 实 例, 让 你 在 不 断 的 理 论 和 实 践 之 中 笑 傲“ 网 络” ……

  上 一 章 给 大 家 简 要 介 绍 了 建 立 动 态 网 站 的 一 些 方 法 和 制 作 工 具, 本 章 将 以 如 何 建 立 基 于 IIS 的 ASP 动 态 网 站 为 中 心 向 大 家 一 步 一 步 地 揭 示 动 态 商 业 网 站 设 计 的 真 正 奥 秘。 为 了 使 各 位 能 够 全 面、 细 致 地 掌 握 ASP 的 开 发 技 巧, 本 文 今 后 将 采 取 连 载 的 形 式, 手 把 手 地 教 你 如 何 建 立 属 于 自 己 ASP 动 态 网 站。 由 于 本 文 是 作 者 根 据 自 己 的 学 习 和 实 践 经 验 并 结 合 了 一 些 外 文 资 料 而 写 成 的, 因 此 不 免 会 有 一 些 偏 颇, 希 望 各 位 见 谅。 如 发 现 本 文 有 何 不 当 之 处, 请 及 时 通 知 作 者, 谢 谢。

    Microsoft Active Server Pages 即 我 们 所 称 的 ASP , 其 实 是 一 套 微 软 开 发 的 服 务 器 端 脚 本 环 境, ASP 内 含 于 IIS 3.0 和 4.0 之 中 , 通 过 ASP 我 们 可 以 结 合 HTML 网 页、 ASP 指 令 和 ActiveX 元 件 建 立 动 态、 交 互 且 高 效 的 WEB 服 务 器 应 用 程 序。 有 了 ASP 你 就 不 必 担 心 客 户 的 浏 览 器 是 否 能 运 行 你 所 编 写 的 代 码, 因 为 所 有 的 程 序 都 将 在 服 务 器 端 执 行, 包 括 所 有 嵌 在 普 通 HTML 中 的 脚 本 程 序。 当 程 序 执 行 完 毕 后, 服 务 器 仅 将 执 行 的 结 果 返 回 给 客 户 浏 览 器, 这 样 也 就 减 轻 了 客 户 端 浏 览 器 的 负 担, 大 大 提 高 了 交 互 的 速 度。 以 下 罗 列 了 Active Server Pages 所 独 具 的 一 些 特 点:  1. 使 用 VBScript 、 JScript 等 简 单 易 懂 的 脚 本 语 言, 结 合 HTML 代 码, 即 可 快 速 地 完 成 网 站 的 应 用 程 序。
  2. 无 须 compile 编 译, 容 易 编 写, 可 在 服 务 器 端 直 接 执 行。
  3. 使 用 普 通 的 文 本 编 辑 器, 如 Windows 的 记 事 本, 即 可 进 行 编 辑 设 计。
  4. 与 浏 览 器 无 关 (Browser Independence), 用 户 端 只 要 使 用 可 执 行 HTML 码 的 浏 览 器, 即 可 浏 览 Active Server Pages 所 设 计 的 网 页 内 容。 Active Server Pages 所 使 用 的 脚 本 语 言 (VBScript 、 Jscript) 均 在 WEB 服 务 器 端 执 行, 用 户 端 的 浏 览 器 不 需 要 能 够 执 行 这 些 脚 本 语 言。
  5.Active Server Pages 能 与 任 何 ActiveX scripting 语 言 相 容。 除 了 可 使 用 VBScript 或 JScript 语 言 来 设 计 外, 还 通 过 plug-in 的 方 式, 使 用 由 第 三 方 所 提 供 的 其 他 脚 本 语 言, 譬 如 REXX 、 Perl 、 Tcl 等。 脚 本 引 擎 是 处 理 脚 本 程 序 的 COM(Component Object Model) 物 件。
  6.Active Server Pages 的 源 程 序, 不 会 被 传 到 客 户 浏 览 器, 因 而 可 以 避 免 所 写 的 源 程 序 被 他 人 剽 窃, 也 提 高 了 程 序 的 安 全 性。
  7. 可 使 用 服 务 器 端 的 脚 本 来 产 生 客 户 端 的 脚 本。
  8. 物 件 导 向( Object-oriented )。
  9.ActiveX Server Components(ActiveX 服 务 器 元 件 ) 具 有 无 限 可 扩 充 性。 可 以 使 用 Visual Basic 、 Java 、 Visual C++ 、 COBOL 等 编 程 语 言 来 编 写 你 所 需 要 的 ActiveX Server Component 。

    ASP 的 奇 妙 之 处 真 是 不 胜 枚 举, 下 面 就 请 各 位 系 好 安 全 带, 我 将 带 领 大 家 进 入 ASP 的 梦 幻 世 界。

    首 先, 让 我 们 来 看 看 运 行 ASP 所 需 的 环 境:

    正 如 前 文 所 述, 与 一 般 的 程 序 不 同, .asp 程 序 无 须 编 译, ASP 程 序 的 控 制 部 份, 是 使 用 VBScript 、 JScript 等 脚 本 语 言 来 设 计 的, 当 执 行 ASP 程 序 时, 脚 本 程 序 将 一 整 套 命 令 发 送 给 脚 本 解 释 器 ( 即 脚 本 引 擎 ) , 由 脚 本 解 释 器 进 行 翻 译 并 将 其 转 换 成 服 务 器 所 能 执 行 的 命 令。 当 然, 同 其 他 编 程 语 言 一 样, ASP 程 序 的 编 写 也 遵 循 一 定 的 规 则, 如 果 你 想 使 用 你 所 喜 爱 的 脚 本 语 言 编 写 ASP 程 序, 那 么 你 的 服 务 器 上 必 须 要 有 能 解 释 这 种 脚 本 语 言 的 脚 本 解 释 器。 当 你 安 装 ASP 时, 系 统 提 供 了 两 种 脚 本 语 言: VBsrcipt 和 JScript , 而 VBscript 则 被 作 为 系 统 默 认 的 脚 本 语 言。 你 也 可 以 根 据 自 己 的 喜 好 改 变 系 统 默 认 的 脚 本 语 言, 关 于 如 何 改 变 系 统 默 认 的 脚 本 语 言 请 看《 在 ASP 中 使 用 脚 本 语 言》 一 文。

    ASP 本 身 并 不 是 一 种 脚 本 语 言, 它 只 是 提 供 了 一 种 使 镶 嵌 在 HTML 页 面 中 的 脚 本 程 序 得 以 运 行 的 环 境。 但 是, 要 学 好 ASP 又 必 须 掌 握 它 的 语 法 和 规 则。 现 在 就 让 我 们 开 始 一 步 一 步 地 认 识 并 学 习 Active Server Pages 。

    ASP 程 序 其 实 是 以 扩 展 名 为 .asp 的 纯 文 本 形 式 存 在 于 WEB 服 务 器 上 的, 你 可 以 用 任 何 文 本 编 辑 器 打 开 它, ASP 程 序 中 可 以 包 含 纯 文 本、 HTML 标 记 以 及 脚 本 命 令。 你 只 需 将 .asp 程 序 放 在 WEB 服 务 器 的 虚 拟 目 录 下( 该 目 录 必 须 要 有 可 执 行 权 限), 就 可 以 通 过 WWW 的 方 式 访 问 ASP 程 序 了。 要 学 好 ASP 程 序 的 设 计, 必 须 掌 握 脚 本 的 编 写, 那 么 究 竟 什 么 是 脚 本 呢? 其 实 脚 本 是 由 一 系 列 的 脚 本 命 令 所 组 成 的, 如 同 一 般 的 程 序, 脚 本 可 以 将 一 个 值 赋 给 一 个 变 量, 可 以 命 令 WEB 服 务 器 发 送 一 个 值 到 客 户 浏 览 器, 还 可 以 将 一 系 列 命 令 定 义 成 一 个 过 程。 要 编 写 脚 本, 你 必 须 要 熟 悉 至 少 一 门 脚 本 语 言, 如 VBScript 。 脚 本 语 言 是 一 种 介 乎 于 HTML 和 诸 如 JAVA 、 Visual Basic 、 C++ 等 编 程 语 言 之 间 的 一 种 特 殊 的 语 言, 尽 管 它 更 接 近 后 者, 但 它 却 不 具 有 编 程 语 言 复 杂、 严 谨 的 语 法 和 规 则。 如 前 所 述 ASP 所 提 供 的 脚 本 运 行 环 境 可 支 持 多 种 脚 本 语 言, 譬 如: JScript 、 REXX 、 PERL 等 等, 这 无 疑 给 ASP 程 序 设 计 者 提 供 了 广 泛 的 发 挥 余 地。 ASP 的 出 现 使 得 广 大 WEB 设 计 者 不 必 在 为 客 户 浏 览 器 是 否 支 持 而 担 心, 实 际 上 就 算 你在 同 一 个 .asp 文 件 中 使 用 不 同 的 脚 本 语 言, 你 都 无 须 为 此 担 忧, 因 为 所 有 的 一 切 都 将 在 服 务 器 端 进 行, 客 户 浏 览 器 得 到 的 只 是 一 个 程 序 执 行 的 结 果, 而 你 也 只 需 在 .asp 中 声 明 使 用 不 同 的 脚 本 语 言 即 可。 下 面 是 一 个 典 型 的 在 同 一 .asp 文 件 中 使 用 两 种 脚 本 语 言 的 例 子: < HTML>
< BODY>
< TABLE>
< % Call Callme %>
< /TABLE>
< % Call ViewDate %>
< /BODY>
< /HTML>
< SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Callme
  Response.Write "< TR>< TD>Call< /TD>< TD>Me< /TD>< /TR>"
End Sub
< /SCRIPT>

< SCRIPT LANGUAGE=JScript RUNAT=Server>
function ViewDate()
{
  var x
  x = new Date()
  Response.Write(x.toString())
}
< /SCRIPT>

    这 是 各 位 在 本 文 中 接 触 的 第 一 个 真 正 的 ASP 程 序, 千 万 不 要 被“ < % %> ” 符 号 搞 糊 涂, 这 其 实 是 标 准 的 ASP 定 界 符, 而“ < SCRIPT>< /SCRIPT> ” 之 间 的 就 是 脚 本 语 言。 ASP 不 同 于 脚 本 语 言, 它 有 自 己 特 定 的 语 法, 所 有 的 ASP 命 令 都 必 须 包 含 在 < % 和 %> 之 内, 如: < % test="English" %> , ASP 通 过 包 含 在 < % 和 %> 中 的 表 达 式 将 执 行 结 果 输 出 到 客 户 浏 览 器 , 如: < % =test %> 就 是 将 前 面 赋 给 变 量 test 的 值 English 发 送 到 客 户 浏 览 器 中, 而 当 变 量 test 的 值 为 Mathematics 时 , 以 下 程 序:
    This weekend we will test < % =test %>.

    在 客 户 浏 览 器 中 则 显 示 为:
    This weekend we will test Mathematics.

    学 习 ASP 最 好 的 方 法 莫 过 于 亲 自 动 手 编 写, 为 了 在 最 短 的 时 间 内 使 各 位 掌 握 ASP 的 程 序 设 计 技 巧, 本 文 将 采 取 实 例 分 析 法, 通 过 一 系 列 的 实 例 让 各 位 在 实 践 中 学 习 ASP 。 建 立 一 个 ASP 页 面, 你 所 需 的 只 是 打 开 一 个 文 本 编 辑 器, 如: Notepad , 然 后 跟 我 开 始 动 手 编 写 第 一 个 ASP 程 序。 下 面 我 们 将 建 立 一 个 自 动 监 测 浏 览 时 间 并 根 据 不 同 时 段 动 态 显 示 不 同 页 面 内 容 的 ASP 程 序, 请 将 以 下 代 码 剪 贴 到 你 的 文 本 编 辑 器 中 , 并 存 为 test1.asp : < html>
< body>
< FONT COLOR="Green">
< % If Time < #12:00:00# And Time >= #00:00:00# Then %>
早 上 好, 今 天 天 气 不 赖 啊 !
< % ElseIf Time < #19:00:00# And Time >= #12:00:00# Then %>
下 午 好 !
< % Else %>
哈 喽 ! 今 晚 你 有 没 有 去 IRC 聊 天 !
< % End If %>
< /body>
< /html>

    将 test1.asp 保 存 在 WEB 服 务 器 的 虚 拟 目 录 ( 如: aspsamp/) 下, 并 在 浏 览 器 中 用 HTTP 的 方 式 进 行 浏 览, 如: http://yourcomputername/aspsamp/test1.asp , 你 将 会 新 奇 地 发 现, 你 的 页 面 真 的 活 起 来 了。 虽 然, 这 只 是 一 个 非 常 简 单 的 实 例, 而 且 这 一 功 能 完 全 可 以 通 过 JavaScript 完 成, 但 是 不 难 发 现 使 用 ASP 要 比 JavaScript 简 洁、 迅 速 得 多, 而 且 运 用 此 法, 你 完 全 可 以 轻 而 易 举 地 令 你 的 网 页 在 不 同 的 时 段 展 示 不 同 的 风 格。 此 例 中 的“ Time ” 实 际 上 是 一 个 VBScript 内 置 的 显 示 系 统 当 前 时 间 的 函 数, 由 于 系 统 默 认 的 脚 本 语 言 是 VBScript , 因 此 当 你 在 ASP 命 令 中 调 用 该 函 数 时, 脚 本 引 擎 会 自 动 将 其 转 换 成 当 前 的 系 统 时 间。 接 下 来 我 们 将 给 test1.asp 添 加 一 点 色 彩, 在 < body> 标 识 中 添 加“ bgcolor="< % =bgc %> ” 即 变 为 < body bgcolor="< % =bgc %>"> , 并 在 < body> 标 记 前 添 加 如 下 语 句:
< % If Time < #12:00:00# And Time >= #00:00:00# Then
bgc="silver"
ElseIf Time < #19:00:00# And Time >= #12:00:00# Then
bgc="navy"
Else
bgc="red"
End If
%>

    如 此 一 来, 当 用 户 在 不 同 的 时 段 访 问 你 的 页 面 时, 他 们 将 会 看 到 不 同 的 页 面 背 景 色。 我 们 可 以 做 的 事 情 还 有 很 多, 譬 如 你 想 知 道 在 凌 晨 至 十 二 点 之 间 浏 览 你 页 面 的 客 户 的 姓 名, 并 向 他 或 她 问 好, 那 么 下 面 的 这 段 程 序 将 能 助 你 达 成 心 愿。 首 先 你 需 要 在 页 面 中 设 置 表 单, 将 以 下 HTML 代 码 剪 贴 到“ < % If Time < #12:00:00# And Time >= #00:00:00# Then %> ” 之 后:

欢 迎 光 临 我 的 主 页, 请 填 写 以 下 信 息 : < FORM METHOD="POST" ACTION="test1.asp">
< P>
First Name: < INPUT NAME="fname" SIZE="48">
< P>
Last Name: < INPUT NAME="lname" SIZE="48">
< P>
Title: < INPUT NAME="title" TYPE=RADIO VALUE="mr">Mr.
< INPUT NAME="title" TYPE=RADIO VALUE="ms">Ms.
< P>< INPUT TYPE=SUBMIT>< INPUT TYPE=RESET>
< /FORM>

    然 后 在 以 上 HTML 代 码 后 面 添 加 如 下 ASP 命 令: < %
title=request.form("title")
if title="mr" then
%>
欢 迎 您 Mr.< % =request.form("fname") %> 。
< % elseif title="ms" then %>
欢 迎 您 Ms.< % =request.form("fname") %> 。
< % else %>
< B>< font color=blue> 欢 迎 您 < % =request.form("fname")&" "&request.form("lname") %> 。 < /font>< /B>
< % end if %>

    保 存 文 件 test1.asp , 并 在 浏 览 器 中 以 HTTP 方 式 进 行 浏 览, 如 果 此 时 的 系 统 时 间 在 凌 晨 0:00:00 和 中 午 12:00:00 之 间 的 话, 浏 览 器 将 显 示 如 下 画 面:

    这 其 实 是 一 个 在 Internet 和 Intranet 上 常 见 的 功 能, 即 当 用 户 在 浏 览 器 端 填 写 完 表 单 后, 通 过 调 用 一 个 通 用 网 关 程 序 将 用 户 数 据 传 送 到 服 务 器, 由 服 务 器 进 行 处 理 后 再 将 结 果 返 还 给 客 户 浏 览 器。 过 去 为 了 实 现 这 样 的 功 能 必 须 编 写 一 个 独 立 于 HTML 之 外 的 CGI 程 序, 并 通 过 HTML 进 行 调 用, 撇 开 CGI 编 写 复 杂 等 缺 点 不 谈, CGI 的 执 行 效 率 也 是 一 个 大 问 题, 每 一 个 表 单 (form) 均 须 执 行 一 个 可 执 行 文 档, 当 多 人 同 时 上 线 使 用 时, 多 个 文 档 同 时 执 行, 将 大 大 降 低 WEB 服 务 器 的 执 行 速 度, 如 今 ASP 提 供 了 与 HTML 完 全 相 融 的 编 程 环 境, 显 然 要 比 使 用 CGI 便 捷 得 多。

    在 本 期 的 最 后 让 我 们 再 来 看 看 ASP 的 循 环 功 能, 譬 如 你 希 望 当 客 户 在 晚 间 7:00 至 凌 晨 0:00:00 浏 览 你 的 页 面 时, 在 页 面 中 央 显 示 6 个 笑 脸  表 示 问 候, 那 么 你 只 需 要 将 以 下 命 令 剪 贴 到“ Good Evening! ” 后 面 即 可: < % for i=1 to 6 %>
< p>< center>< img src="smile.gif" width="32" height="32" alt=" 晚 上 好 ">< /p>
< % next %>

    这 是 一 个 最 最 基 本 的 循 环 语 句, 它 将 一 个 笑 脸 图 片 重 复 调 用 六 次 并 显 示 在 页 面 上。 当 然 此 例 的 效 果 完 全 可 以 用 HTML 做 到, 但 是 不 难 发 现 使 用 ASP 大 大 缩 短 了 代 码 的 重 复 编 写, 使 得 程 序 具 有 良 好 的 可 阅 读 性。 另 外, 当 你 制 作 一 个 诸 如 根 据 用 户 投 票 来 给 所 评 测 的 对 象 评 定 星 级 的 评 测 站 点 时, 使 用 此 法, 你 就 完 全 不 需 要 为 每 一 个 星 级 制 作 一 幅 图 片。 如 果 一 个 对 象 被 评 为 4 星 级, 那 只 需 将 一 颗 星 的 图 片 循 环 显 示 4 次, 以 此 类 推 即 可。 当 然, 当 工 作 量 较 小 的 时 候 你 不 会 感 觉 到 ASP 的 好 处, 然 而 一 旦 数 据 量 巨 增, 你 将 会 深 刻 的 体 会 到 ASP 动 态 网 站 给 你 带 来 的 前 所 未 有 的 轻、 爽 感 受 !