ASP 篇 (七)

在 上 一 篇 中 作 者 给 大 家 详 细 介 绍 了 ASP 内 建 对 象 之 一 Request 的 使 用 方 法,相 信 各 位 通 过 一 系 列 的 实 践 已 经 能 够 熟 练 掌 握,本 篇 将 继 续 给 大 家 介 绍 ASP 的 另 一 个 内 建 对 象 Response。

最 近,有 很 多 朋 友 来“妹 儿”催 我 加 快 ASP 篇 一 文 的 写 作 速 度,并 急 切 地 询 问 哪 里 有 关 于 ASP 的 教 材。我 深 深 地 被 大 家 的 学 习 热 情 所 打 动,因 此 决 定 将 自 己 平 时 所 搜 集 的 一 些 ASP 信 息 资 料 拿 出 来 和 大 家 共 享,也 希 望 所 有 的 朋 友 能 慷 慨 地 将 自 己 搜 集 的 有 关 ASP 的 资 料 告 诉 作 者,谢 谢。由 于 目 前 国 内 有 关 ASP 的 中 文 教 材 凤 毛 麟 角,而 专 门 针 对 ASP 网 站 开 发 的 中 文 教 材 作 者 更 是 闻 所 未 闻(可 能 是 作 者 孤 陋 寡 闻),只 是 最 近 听 说 出 了 一 本 清 华 大 学 出 版 社 出 版 的 关 于 MS InterDev 的 傻 瓜 书,其 中 有 ASP 的 教 学,和 一 本 Active Server Page 2.0 的 中 文 手 册,因 此 目 前 作 者 还 是 主 要 通 过 国 外 网 站 来 获 取 ASP 的 有 关 信 息 和 资 料,这 也 是 作 者 写 本 文 的 一 个 主 要 原 因。下 面 我 就 将 bookmark 中 的 一 些 较 经 典 的 ASP 站 点 罗 列 出 来:

   1、http://www.activeserverpage.com/

   这 是 作 者 访 问 最 频 繁 的 ASP 网 站,也 是 世 界 上 最 大 最 全 的 关 于 ASP 的 网 站 之 一,它 里 面 不 但 有 最 新 的 ASP 文 献 资 料,免 费 组 件,还 有 一 本 完 整 的 ASP 入 门 教 材,它 更 是 ASP 网 站 的 中 枢 站 点,通 过 它 你 可 以 到 达 无 数 的 ASP 相 关 站 点。

   2、http://www.asphole.com/

   这 本 是 一 个 针 对 ASP 漏 洞 而 建 立 的 站 点,但 是 它 却 无 疑 是 一 个 完 备 的 ASP 信 息 站 点,它 非 但 提 供 了 ASP 的 文 章,及 组 件 还 提 供 详 尽 透 彻 的 联 接 地 址。

   3、http://www.15seconds.com/faqhttp://www.15seconds.com/search

   这 是 一 个 作 者 所 看 到 的 最 大 的 网 上 ASP 交 流 站 点,它 拥 有 ASP 解 疑 的 答 案,ASP 邮 件 清 单 信 息,ASP 技 巧,你 可 能 需 要 需 要 几 个 月 的 时 间 才 能 读 完 这 些 信 息。而 在 http://www.15seconds.com/AllComponents.asp 你 可 以 读 到 最 新 的 ActiveX 组 件 和 大 量 免 费 组 件 的 详 细 介 绍,并 附 有 非 常 实 用 的 文 档 与 例 子。

   4、http://www.microsoft.com/workshop/server/asp/aspfeat.asp

   大 家 都 知 道 Active Server Page 是 微 软 提 出 的 一 套 基 于 NT IIS 的 WEB 服 务 器 端 环 境,那 么 这 个 由 微 软 自 己 建 立 的 ASP 技 术 说 明 站 点,大 家 当 然 是 不 可 不 看 的。

   5、http://www.serverobjects.com/

   在 这 里 你 可 以 获 得 无 数 实 用 的 ActiveX 组 件 , 并 下 载 它 们 的 试 用 版,只 可 惜 其 中 的 大 部 分 极 好 的 组 件 都 是 要 Money 的。

   6、http://www.cyscape.com/asp/browscap/

   大 家 还 记 得 作 者 在 ASP2 一 文 中 介 绍 的 那 个 用 来 辨 别 客 户 端 浏 览 器 版 本 的 Browser Capabilitie 组 件 吗?在 这 个 站 点 你 可 以 获 得 最 新 的 BROWSCAP.INI 文 件,它 拥 有 每 一 个 ASP 安 装 时 微 软 没 有 提 供 的 浏 览 器 的 信 息,这 样 你 在 ASP 中 判 断 客 户 浏 览 器 是 就 能 够 万 无 一 失 了。

   7、http://www.microsoft.com/data/ado/

   ASP 最 强 大 且 便 捷 的 功 能 莫 过 于 同 数 据 库 的 连 接,通 过 ASP 内 建 的 ActiveX 组 件,我 们 可 以 轻 而 易 举 的 将 WEB 与 所 有 和 ODBC 兼 容 的 数 据 库 连 接 起 来,在 这 个 微 软 的 站 点 上 你 可 以 获 取 很 多 实 用 的 ADO 资 料。

   8、http://www.cobb.com/m_sbn4/

   一 个 不 错 的 ASP 论 坛,你 可 以 在 那 里 贴 你 的 问 题,读 取 别 人 的 问 题 和 解 答。

   下 面,我 们 开 始 学 习 ASP 的 另 一 个 内 建 对 象 Response。

   与 Request 是 获 取 客 户 端 HTTP 信 息 相 反 ,Response 对 象 是 用 来 控 制 发 送 给 用 户 的 信 息,包 括 直 接 发 送 信 息 给 浏 览 器、重 定 向 浏 览 器 到 另 一 个 URL 或 设 置 cookie 的 值。

   语 法

   Response.collection|property|method

   一、属 性

   1、Buffer

   Buffer 属 性 指 示 是 否 缓 冲 页 输 出。当 缓 冲 页 输 出 时,只 有 当 前 页 的 所 有 服 务 器 脚 本 处 理 完 毕 或 者 调 用 了 Flush 或 End 方 法 后,服 务 器 才 将 响 应 发 送 给 客 户 端 浏 览 器,服 务 器 将 输 出 发 送 给 客 户 端 浏 览 器 后 就 不 能 再 设 置 Buffer 属 性。因 此 应 该 在 .asp 文 件 的 第 一 行 调 用 Response.Buffer。

   2、Charset

   Charset 属 性 将 字 符 集 名 称 附 加 到 Response 对 象 中 content-type 标 题 的 后 面。对 于 不 包 含 Response.Charset 属 性 的 ASP 页,content-type 标 题 将 为 :content-type:text/html。

   我 们 可 以 在 .asp 文 件 中 指 定 content-type 标 题,如 :

   < % Response.Charset="gb2312") %>

   将 产 生 以 下 结 果 :

   content-type:text/html; charset=gb2312

   注 意,无 论 字 符 串 表 示 的 字 符 集 是 否 有 效,该 功 能 都 会 将 其 插 入 content-type 标 题 中。且 如 果 某 个 页 包 含 多 个 含 有 Response.Charset 的 标 记,则 每 个 Response.Charset 都 将 替 代 前 一 个 CharsetName。这 样,字 符 集 将 被 设 置 为 该 页 中 Response.Charset 的 最 后 一 个 实 例 所 指 定 值。

   3、ContentType

   ContentType 属 性 指 定 服 务 器 响 应 的 HTTP 内 容 类 型。如 果 未 指 定 ContentType,默 认 为 text/HTML。

   4、Expires

   Expires 属 性 指 定 了 在 浏 览 器 上 缓 冲 存 储 的 页 距 过 期 还 有 多 少 时 间。如 果 用 户 在 某 个 页 过 期 之 前 又 回 到 此 页,就 会 显 示 缓 冲 区 中 的 页 面。如 果 设 置 response.expires=0,则 可 使 缓 存 的 页 面 立 即 过 期。这 是 一 个 较 实 用 的 属 性,当 客 户 通 过 ASP 的 登 陆 页 面 进 入 WEB 站 点 后,应 该 利 用 该 属 性 使 登 陆 页 面 立 即 过 期,以 确 保 安 全。

   5、ExpiresAbsolute

   与 Expires 属 性 不 同 ExpiresAbsolute 属 性 指 定 缓 存 于 浏 览 器 中 的 页 面 的 确 切 到 期 日 期 和 时 间。在 未 到 期 之 前,若 用 户 返 回 到 该 页,该 缓 存 中 的 页 面 就 显 示。如 果 未 指 定 时 间,该 主 页 在 当 天 午 夜 到 期。如 果 未 指 定 日 期,则 该 主 页 在 脚 本 运 行 当 天 的 指 定 时 间 到 期。如 下 示 例 指 定 页 面 在 1998 年 12 月 10 日 上 午 9:00 分 30 秒 到 期。

   < % Response.ExpiresAbsolute=#Dec 12,1998 9:00:30# %>

   二、方 法

   1、Clear

   可 以 用 Clear 方 法 清 除 缓 冲 区 中 的 所 有 HTML 输 出。但 Clear 方 法 只 清 除 响 应 正 文 而 不 清 除 响 应 标 题。可 以 用 该 方 法 处 理 错 误 情 况。但 是 如 果 没 有 将 Response.Buffer 设 置 为 TRUE,则 该 方 法 将 导 致 运 行 时 错 误。

   2、End

   End 方 法 使 Web 服 务 器 停 止 处 理 脚 本 并 返 回 当 前 结 果。文 件 中 剩 余 的 内 容 将 不 被 处 理。如 果 Response.Buffer 已 设 置 为 TRUE,则 调 用 Response.End 将 缓 冲 输 出。

   3、Flush

   Flush 方 法 立 即 发 送 缓 冲 区 中 的 输 出。如 果 没 有 将 Response.Buffer 设 置 为 TRUE,则 该 方 法 将 导 致 运 行 时 错 误。

   4、Redirect

   Redirect 方 法 使 浏 览 器 立 即 重 定 向 到 程 序 指 定 的 URL。这 也 是 一 个 我 们 经 常 用 到 方 法,这 样 程 序 员 就 可 以 根 据 客 户 的 不 同 响 应,为 不 同 的 客 户 指 定 不 同 的 页 面 或 根 据 不 同 的 情 况 指 定 不 同 的 页 面。一 旦 使 用 了 Redirect 方 法 任 何 在 页 中 显 式 设 置 的 响 应 正 文 内 容 都 将 被 忽 略。然 而,此 方 法 不 向 客 户 端 发 送 该 页 设 置 的 其 他 HTTP 标 题,将 产 生 一 个 将 重 定 向 URL 作 为 链 接 包 含 的 自 动 响 应 正 文。Redirect 方 法 发 送 下 列 显 式 标 题,其 中 URL 是 传 递 给 该 方 法 的 值。如:

   < % Response.redirect("www.chinabyte.com") %>

   5、Write

   Write 方 法 是 我 们 平 时 最 常 用 的 方 法 之 一,它 是 将 指 定 的 字 符 串 写 到 当 前 的 HTTP 输 出。

   三、集 合

   Response 对 象 只 有 一 个 集 合 --Cookie

   Cookies 集 合 设 置 cookie 的 值。若 指 定 的 cookie 不 存 在,则 创 建 它。若 存 在,则 设 置 新 的 值 并 且 将 旧 值 删 去。

   语 法

   Response.Cookies(cookie)[(key)|.attribute]=value

   这 里 的 cookie 是 指 定 cookie 的 名 称。而 如 果 指 定 了 key,则 该 cookie 就 是 一 个 字 典。attribute 指 定 cookie 自 身 的 有 关 信 息。attribute 参 数 可 以 是 下 列 之 一 :

   Domain 若 被 指 定,则 cookie 将 被 发 送 到 对 该 域 的 请 求 中 去。

   Expires 指 定 cookie 的 过 期 日 期。为 了 在 会 话 结 束 后 将 cookie 存 储 在 客 户 端 磁 盘 上,必 须 设 置 该 日 期。若 此 项 属 性 的 设 置 未 超 过 当 前 日 期,则 在 任 务 结 束 后 cookie 将 到 期。

   HasKeys 指 定 cookie 是 否 包 含 关 键 字。

   Path 若 被 指 定,则 cookie 将 只 发 送 到 对 该 路 径 的 请 求 中。如 果 未 设 置 该 属 性,则 使 用 应 用 程 序 的 路 径。

   至 此,我 们 已 经 学 习 的 Response 对 象 的 所 有 属 性、方 法 和 集 合 的 理 论 知 识,下 面 作 者 将 给 大 家 演 示 一 段 简 单 的 程 序,通 过 实 践 让 大 家 加 深 理 解。先 将 以 下 程 序 剪 贴 到 记 事 簿 中,并 保 存 为 asp7.asp。( 注 意 将 < 和 % 之 间 的 空 格 去 掉 !!!)
  < %
  Dim user
Dim flag
Dim pwd
  Dim say
Response.buffer=true ' 开 启 缓 冲 页 面 功 能
Response.ContentType="text/HTML"
  Response.Charset="gb2312"
  user=Request.Form("username")
pwd=Request.Form("password")
say=Request.QueryString("say")
%>
  < form method="POST" action="asp7.asp">
  < p> 用 户 名 :< input type="text" name="username" size="12">< br>
  口   令 :< input type="password" name="password" size="12">< br>
  < input type="submit" value=" 提 交 " name="B1">< input type="reset" value=" 取 消 " name="B2">< /p>< /form>
  < %
  If say=1 then
  Response.Write " 欢 迎 书 生 大 驾 光 临 !"
End If
  If say > 1 then
  Response.Write " 欢 迎 再 次 光 临 书 生 的 ASP 网 站 !"
End If
  If user="Adm" and pwd="shusheng" Then
  Response.Expires=1 ' 设 置 该 页 面 在 浏 览 器 的 缓 冲 中 存 储 1 分 钟 后 过 期。
  flag=1
  ElseIf user="guest" and pwd="guest" Then
  Response.Expires=0 ' 使 缓 存 的 页 面 立 即 过 期。
  Response.Clear ' 清 空 存 储 在 缓 存 中 的 页 面
  flag=2
  ElseIf user="vip" and pwd="vip" Then
  Response.Write " 欢 迎 VIP 光 临 书 生 的 ASP 网 站 "
  flag=3
  Else
  flag=0
  Response.End ' 立 即 停 止 脚 本 处 理,并 将 缓 存 中 的 页 面 输 出
End If
  Response.write "< p>< a href='asp7b.asp?flag="&flag&"'> 动 态 网 站 设 计 十 八 般 武 艺 --ASP 篇 (7) 实 践 练 习 < /a>< /p>"
' 将 变 量 flag 的 值 传 送 给 asp7b.asp
  %>
  < p> 动 态 网 站 设 计 十 八 般 武 艺 --ASP 篇 (7) 实 践 练 习 < /p>

   再 将 以 下 程 序 保 存 为 asp7b.asp。
  < %
  Dim saysay=Request.QueryString("flag")
Select case say
  case "1"
  Response.Redirect "asp7.asp?say=1"
case "2"
  Response.Redirect "asp7.asp?say=2"
case "3"
  Response.Redirect "asp7.asp?say=3"
case "0"
  Response.Redirect "asp7.asp?say=0"
End Select
  %>

   将 这 两 个 程 序 放 在 有 执 行 权 限 的 WEB 虚 拟 目 录 下,并 以 http 方 式 访 问 asp7.asp。在 这 两 个 程 序 中 我 们 充 分 运 用 了 至 今 为 止 所 学 过 的 两 个 ASP 内 建 对 象 :Request 和 Response。当 你 第 一 次 访 问 asp7.asp 文 件 时,页 面 上 出 现 一 个 Form 并 提 示 输 入 用 户 名 和 口 令,如 果 你 输 入 用 户 名 :Adm、口 令 :shusheng, 则 会 出 现 如 下 页 面 :

 

   如 果 你 输 入 用 户 名 :guest、口 令 :guest, 则 仅 出 现 如 下 页 面 :

 

   这 是 为 什 么 呢?因 为 我 们 设 置 了 页 面 缓 存,当 使 用 guest 登 陆 时,判 断 程 序 自 动 清 空 其 之 前 所 有 存 储 在 缓 存 中 的 页 面,而 仅 将 其 后 脚 本 程 序 执 行 的 结 果 显 示 出 来。

   那 为 什 么 第 一 次 登 陆 asp7.asp 页 面 时 仅 仅 只 显 示 一 个 Form 对 话 框 呢?因 为 此 时 程 序 判 断 到 用 户 既 非 Adm, 也 不 是 guest 和 vip,所 以 执 行 Response.End, 立 即 将 存 储 在 缓 存 中 的 Form 显 示 出 来,并 停 止 其 后 的 一 切 脚 本 处 理,包 括 纯 HTML 代 码 的 显 示。

   无 论 你 是 用 Adm 还 是 guest 或 vip 登 陆 该 页 面 你 都 可 以 看 到 一 个 超 链,该 超 链 指 向 文 件 asp7b.asp,当 我 们 点 击 该 超 链 时,asp7.asp 将 变 量 flag 的 值 作 为 参 数 发 送 给 asp7b.asp, 而 后 者 则 根 据 该 参 数 的 值 来 做 出 判 断,并 依 据 不 同 情 况 使 用 Response.Redirect 再 强 行 返 回 asp7.asp, 并 也 将 一 个 变 量 say 的 值 作 为 参 数 发 送 给 asp7.asp。如 此 一 来,asp7.asp 又 会 根 据 此 参 数 来 做 出 不 同 的 反 应。

   大 家 现 在 都 看 到 了 我 们 仅 仅 用 了 两 个 很 简 单 的 程 序,就 可 以 做 到 对 同 一 个 页 面 的 多 种 不 同 显 示 结 果,这 正 是 ASP 的 魅 力 所 在,各 位 可 以 以 此 示 范 程 序 为 基 础,来 进 行 一 些 改 动,以 熟 练 掌 握 我 们 所 学 的 这 两 个 内 建 对 象。今 天 的 课 程 就 到 此 为 止 了,在 结 尾 我 还 要 说 明 两 件 事。第 一,很 多 朋 友 来 信 询 问 哪 里 可 以 看 到 ASP 篇 的 前 几 篇 文 章,请 大 家 点 击 此 处 便 可 以 找 到。第 二,一 些 朋 友 反 映 文 中 的 ASP 程 序 不 能 运 行,这 主 要 是 因 为 Chinabyte 的 页 面 都 是 用 数 据 库 生 成 的,它 限 定 在 文 章 中 不 能 使 用 带 HTML 或 ASP 格 式 的 代 码,所 以 在 所 有 < 符 号 后 都 加 了 空 格,各 位 只 要 将 < 后 的 空 格 去 掉 就 可 以 运 行 程 序 了,切 记。下 一 篇 我 们 将 继 续 学 习 另 一 个 ASP 内 建 对 象,敬 请 关 注。