ASP 篇 (二)

本 文 ASP 篇 (1) 展 示 了 ASP 动 态 网 站 设 计 的 一 些 最 基 本 的 方 法, 相 信 通 过 实 践 各 位 对 ASP 已 经 有 了 最 基 本 的 了 解, 本 篇 在 答 复 大 家 所 提 问 题 的 同 时, 将 进 一 步 介 绍 ASP 动 态 网 站 的 一 些 基 本 技 巧。

  自 本 文 第 一 篇 刊 登 后 , 络 绎 不 绝 地 收 到 了 一 些 朋 友 的 来 信, 出 乎 作 者 的 意 料, 其 中 有 相 当 一 部 分 是 初 次 接 触 ASP , 因 此 有 许 多 朋 友 都 提 出 为 何 在 浏 览 器 中 浏 览 ASP 篇 (1) 中 的 范 例 时 看 到 的 竟 然 是 原 代 码? 由 于 遇 到 此 问 题 的 朋 友 较 多, 故 作 者 在 此 一 并 回 答。 首 先, 我 要 再 次 强 调 ASP 是 一 套 服 务 器 端 的 脚 本 环 境, 当 用 户 从 浏 览 器 向 Web 服 务 器 请 求 .asp 文 件 时, ASP 脚 本 开 始 运 行, 然 后 Web 服 务 器 调 用 ASP , ASP 全 面 读 取 请 求 的 文 件, 执 行 所 有 脚 本 命 令, 并 将 Web 页 传 送 给 浏 览 器, 这 就 意 味 着 你 不 能 简 单 地 在 现 有 的 操 作 系 统 ( 如 Win95 、 98) 下, 用 浏 览 器 中 的 " 打 开 " 命 令 来 浏 览 .asp 文 件; 其 次, 运 行 .asp 文 件 需 要 服 务 器 端 的 支 持, 目 前 除 了 WindowsNT 下 的 Microsoft Internet Information Server 支 持 Active Server 技 术 外, Active Server 还 可 用 于 MS Windows NT Workstation 和 MS Windows 95/98 中 的 Personal Web Server 的 构 件, 因 此 无 论 你 安 装 的 是 NT 还 是 WIN95/98 , 都 必 须 在 原 系 统 上 安 装 支 持 ASP 的 服 务 器 端 环 境, 才 能 使 你 的 机 器 得 以 运 行 .asp 文 件。 由 于 目 前 绝 大 多 数 朋 友 安 装 的 是 Win95 或 是 98 , 因 此 作 者 就 在 这 里 着 重 介 绍 如 何 在 Win95/98 下 运 行 和 浏 览 .asp 文 件。 因 为 MSPersonal Web Server 支 持 通 用 网 关 接 口 (CGI) 应 用 程 序、 Internet 数 据 库 接 口 (IDC) 应 用 程 序 和 IIS 应 用 程 序 接 口 (ISAPI) 应 用 程 序, 并 且 支 持 运 行 和 开 发 ASP 应 用 程 序, 所 以 使 得 Win95 及 其 以 后 操 作 平 台 具 备 了 近 似 于 NT 的 健 全 的 网 站 运 作 和 管 理 功 能。 你 所 要 做 的 只 是 在 现 有 的 Win95/98 系 统 上 安 装 MS Personal Web Server , 建 议 安 装 最 新 的 4.0 版 本, 具 体 步 骤 详 见《 轻 松 建 网 Microsoft Personal WebServer 4.0 》 一 文。 当 安 装 完 成 后, PWS4.0 会 在 系 统 启 动 时 自 动 加 载。 打 开 PWS , 选 择 左 栏 中 的 " 高 级 " 按 钮 ( 见 下 图 Asp2a.gif) , 点 取 " 虚 拟 目 录 " 下 的 "/_private" 目 录, 然 后 点 击 右 边 的 " 编 辑 属 性 " 按 钮, 如 图 所 示, 在 对 话 框 中 你 可 以 编 辑 该 虚 拟 目 录 的 物 理 路 径 和 目 录 名, 上 图 中 "/_private" 的 物 理 路 径 为 "D:\Inetpub\wwwroot" , 该 目 录 是 系 统 默 认 的 WWW 发 布 根 目 录, 将 上 一 篇 中 的 范 例 test1.asp 文 件 复 制 到 "D:\Inetpub\wwwroot" 目 录 下。 最 后, 你 只 要 将 该 虚 拟 目 录 的 访 问 权 限 选 择 为 " 执 行 " , 并 在 浏 览 器 的 " 地 址 " 栏 中 输 入 "http://localhost/test1.asp" 就 可 以 运 行 并 浏 览 该 ASP 程 序 了。

    知 道 了 如 何 运 行 并 浏 览 ASP 程 序, 下 面 我 们 就 继 续 ASP 动 态 网 站 设 计 的 学 习。

    上 一 篇 给 大 家 介 绍 了 几 个 最 基 本 的 ASP 程 序, 相 信 大 家 已 经 对 ASP 的 应 用 有 了 大 致 的 了 解, 本 篇 将 继 续 介 绍 一 些 用 ASP 编 写 的 WEB 动 态 功 能。 由 于 WEB 浏 览 器 标 准 的 不 一 致 从 而 使 得 如 何 能 够 让 自 己 制 作 的 网 站 去 适 应 各 种 不 同 的 浏 览 器 成 为 了 广 大 网 站 设 计 者 最 为 头 疼 的 事, 在 如 今 的 形 势 之 下, 我 们 不 肯 也 不 可 能 去 抛 弃 Netscape 或 IE 中 的 任 何 一 种 客 户 群, 但 我 们 有 时 候 又 不 得 不 去 考 虑 客 户 端 浏 览 器 的 实 际 浏 览 效 果, 过 去 我 们 常 用 JavaScript 编 写 一 段 程 序 来 辨 别 客 户 端 使 用 的 不 同 的 浏 览 器, 那 么 今 天 就 让 我 们 来 看 看 如 何 使 用 ASP 更 为 便 捷 且 精 确 地 达 到 这 一 目 的。 将 以 下 代 码, 剪 贴 到 你 的 Notebook 中, 并 保 存 为 browser.asp 。   < %@ LANGUAGE = VBScript %>
  < HTML>
  < HEAD>
     < TITLE>用ASP提 供 的 浏 览 器 性 能 组 件 来 辨 别 客 户浏 览 器< /TITLE>
   < /HEAD>
   < BODY BGCOLOR="White" topmargin="10" leftmargin="10">
    < font size="4" face="Arial, Helvetica">
    < b>用ASP提 供 的 浏 览 器 性 能 组 件 来 辨< br>别 客 户 浏 览 器< /b>< /font>< br>
    < hr size="1" color="#000000">
     < !-- 定 义 并 创 建 浏 览 器 性 能 对 象 -->
     < %
      Dim bc
      Set bc = Server.CreateObject("MSWC.BrowserType")
     %>
     < !-- 在 表 格 中 描 述 客 户 浏 览 器 的 信 息 -->
     < Table border=1>
       < tr>
       < td>Browser Name< /td>
       < td> < %=bc.Browser %> < /Td>
       < tr>
       < td>Browser Version< /td>
       < td> < %=bc.Version %> < /Td>
       < tr>
       < td>Major Version< /td>
       < td> < %=bc.Majorver %> < /Td>
       < tr>
       < td>Minor Version< /td>
       < td> < %=bc.Minorver %> < /Td>
       < tr>
       < td>Frame Support< /td>
       < td> < %=bc.Frames %> < /Td>
       < tr>
       < td>Table Support< /td>
       < td> < %=bc.Tables %> < /Td>
       < tr>
       < td>Cookie Support< /td>
       < td> < %=bc.Cookies %> < /Td>
       < tr>
       < td>Background Sound Support< /td>
       < td> < %=bc.BackgroundSounds %> < /Td>
       < tr>
       < td>VBScript Support< /td>
       < td> < %=bc.VBScript %> < /Td>
       < tr>
       < td>JavaScript Support< /td>
       < td> < %=bc.JavaScript %> < /Td>
     < /table>
   < /BODY>
< /HTML>

    用 http 方 式 浏 览 该 文 件, 根 据 使 用 的 浏 览 器 的 不 同, 你 会 看 到 类 似 下 图 (Asp2b.gif) 的 页 面。 在 本 例 中 我 们 用 到 了 一 个 ASP 提 供 的 ActiveX 组 件 --"Browser Capabilities" 。 ActiveX 组 件 作 为 基 于 Web 的 应 用 程 序 部 分 在 Web 服 务 器 上 运 行, 组 件 提 供 了 应 用 程 序 的 主 要 功 能 ( 如 访 问、 修 改 数 据 库 等 ) , 这 样 WEB 设 计 者 们 就 不 必 创 建 或 重 新 创 建 执 行 这 些 任 务 的 代 码, 从 而 提 高 了 工 作 的 效 率, 有 关 ActiveX 组 件 将 在 今 后 详 细 讨 论。 为 了 使 用 ASP 辨 别 客 户 浏 览 器, 在 这 里 我 们 利 用 "Browser Capabilities" 组 件 创 建 了 一 个 Browser Type 对 象, 该 对 象 提 供 带 有 客 户 端 网 络 浏 览 器 功 能 说 明 的 用 户 脚 本, 当 浏 览 器 连 接 到 网 络 服 务 器 上 时, 它 会 自 动 发 送 一 个 UserAgentHTTP 标 题, 该 标 题 是 一 个 声 明 浏 览 器 及 其 版 本 的 ASCII 字 符 串。 此 Browser Type 对 象 将 该 标 题 和 在 Browscap.ini 文 件 中 的 项 进 行 比 较 (Win98 、 IIS3 、 IIS4 的 用 户 分 别 可 以 在 以 下 目 录 中 "win98\system\inersrv" 、 "\winnt\system32\inetsrv\asp\cmpnts" 、 "\winnt\system32\inetsrv" 找 到 该 文 件 ) 。 如 果 找 到 匹 配 的 项, 则 该 Browser Type 对 象 将 认 为 浏 览 器 列 表 属 性 与 UserAgent 标 题 匹 配。 若 该 对 象 在 browscap.ini 文 件 中 找 不 到 与 该 标 题 匹 配 的 项, 那 么 将 使 用 默 认 的 浏 览 器 属 性。 若 该 对 象 既 未 找 到 匹 配 项 且 browscap.ini 文 件 中 也 未 指 定 默 认 的 浏 览 器 设 置, 则 它 将 每 个 属 性 都 设 为 字 符 串 "UNKNOWN" 。 我 们 可 以 通 过 更 新 browscap.ini 文 件 将 属 性 或 新 的 浏 览 器 定 义 添 加 到 该 组 件 中, 从 而 扩 大 ASP 识 别 的 浏 览 器 范 围 和 精 确 度。 下 面 列 出 了 browscap.ini 中 的 一 部 分 内 容 ( 不 包 括 注 释 部 分 ) :

[IE 4.0] ;;HTTPUserAgentHeader
browser=IE ;;指 定 该 浏 览 器 的 名 称。
Version=4.0 ;;指 定 该 浏 览 器 的 版 本 号。
majorver=4 ;;指 定 主 版 本 号
minorver=0 ;;指 定 副 版 本 号
frames=TRUE ;;指 定 该 浏 览 器 是 否 支 持 框 架。
tables=TRUE ;;指 定 该 浏 览 器 是 否 支 持 表 格。
cookies=TRUE ;;指 定 该 浏 览 器 是 否 支 持cookies。
backgroundsounds=TRUE ;;指 定 该 浏 览 器 是 否 支 持 背 景 音 乐。
vbscript=TRUE ;;指 定 该 浏 览 器 是 否 支 持VBScript。
javascript=TRUE ;;指 定 该 浏 览 器 是 否 支 持JScript。
javaapplets=TRUE ;;指 定 该 浏 览 器 是 否 支 持 Java程 序。
ActiveXControls=TRUE ;;指 定 该 浏 览 器 是 否 支 持 ActiveX 控 件。
Win16=False ;; 指 定 该 浏 览 器 是 否 支 持Win16
beta=False ;;指 定 该 浏 览 器 是 否 测 试 版。
cdf=True ;;指 定 该 浏 览 器 是 否 支 持 用 于 Web 预 测 的 Channel Definition Format。

;;ie 4.01
[Mozilla/4.0 (compatible; MSIE 4.01*; Windows 95)]
parent=IE 4.0 ;;父 标 签 允 许 第 二 个 浏 览 器 继 承 第 一 个 浏 览 器 的 定 义
version=4.01
minorver=01
platform=Win98

;;Default Browser ;;指 定 默 认 的 浏 览 器 的 设 置
[Default Browser Capability Settings]
browser=Default
frames=FALSE
tables=TRUE
cookies=FALSE
backgroundsounds=FALSE
vbscript=FALSE
javascript=FALSE

    在 上 面 的 例 子 中, 父 标 签 允 许 第 二 个 浏 览 器 继 承 第 一 个 浏 览 器 的 定 义, 以 便 Microsoft Internet Explorer4.01 定 义 得 以 继 承 Microsoft Internet Explorer4.0 定 义 全 部 的 属 性 ( 例 如, frames=TRUE 、 tables=TRUE 以 及 cookies=TRUE) 。 并 通 过 添 加 platform=Win98 行 来 指 定 平 台, 用 version=4.01 重 写 版 本 信 息。

    在 先 前 的 browser.asp 中 我 们 仅 仅 是 将 客 户 浏 览 器 的 属 性 一 一 罗 列 了 出 来, 下 面 让 我 们 添 加 一 些 动 态 的 效 果。 将 以 下 代 码 剪 贴 到 文 件 browser.asp 中( 编 辑 注 : 为 显 示 方 便 , 所 有 “ < ”符 号 后 都 多 加 了 个 空 格 , 实 际 使 用 时 请 注 意 去 掉 。 ) :
< % if (bc.frames = TRUE) then %>
你 的 浏 览 器 支 持 框 架!< br>
< % else %>
难 道 现 在 你 还 在 使 用 不 支 持 框 架 的 浏 览 器???< br>
< % end if %>
< % if (bc.tables = TRUE) then %>
你 的 浏 览 器 支 持 表 格。< br>
< % else %>
难 道 现 在 你 还 在 使 用 不 支 持 表 格 的 浏 览 器 ???< br>
< % end if %>
< % if (bc.BackgroundSounds = TRUE) then %>
有 没 有 听 到 美 妙 的 音 乐???< br>
< % else %>
可 惜 , 您 的 浏 览 器 不 支 持 背 景 音 乐。< br>
< % end if %>
< % if (bc.vbscript = TRUE) then %>
您 的 浏 览 器 支 持Vbscript。< br>
< % else %>
您 的 浏 览 器 不 支 持Vbscript。< br>
< % end if %>
< % if (bc.javascript = TRUE) then %>
您 的 浏 览 器 支 持 Javascript。< br>
< % else %>
您 的 浏 览 器 不 支 持 Javascript。< br>
< % end if %>

    在 你 的 浏 览 器 中 刷 新 browser.asp , 程 序 将 自 动 辨 别 浏 览 器 的 属 性 并 动 态 显 示 不 同 的 信 息。 不 难 发 现 在 整 个 browser.asp 文 件 中 几 乎 没 有 用 到 任 何 复 杂 的 编 程, 就 轻 而 易 举 的 达 到 了 动 态 鉴 别 客 户 浏 览 器 并 动 态 产 生 响 应 事 件 的 效 果。 事 实 上, 这 个 程 序 的 关 键 就 在 于 前 文 提 到 的 ActiveX 组 件 --"Browser Capabilities" , 它 的 作 用 类 似 于 一 个 Function , 只 需 简 单 地 在 程 序 中 调 用 该 组 件 即 能 达 到 你 所 希 望 的 效 果。

    通 过 这 两 篇 对 ASP 的 介 绍, 大 家 已 经 看 到 编 写 ASP 程 序 是 相 当 轻 松 的, 要 掌 握 ASP , 无 非 就 是 掌 握 ASP 内 置 的 五 个 对 象, 以 及 ASP 提 供 的 ActiveX 组 件 的 对 象、 方 法 和 属 性, 当 然 扎 实 的 脚 本 语 言 编 写 能 力 也 是 必 须 的。 在 今 后 的 课 程 中 作 者 将 用 五 到 六 篇 的 篇 幅 着 重 介 绍 这 些 内 置 对 象 和 组 件 的 作 用 及 使 用 方 法, 敬 请 关 注。