ASP 篇 (六)

相 信 很 多 急 性 子 的 朋 友 都 已 经 等 不 急 了,已 经 有 一 些 朋 友 写 信 给 我,强 烈 要 求 开 始 对 ASP 对 象 和 组 件 的 介 绍。从 本 篇 开 始 作 者 就 满 足 各 位 的 要 求,作 者 将 从 ASP 内 建 对 象 着 手,为 大 家 详 细 剖 析 ASP 的 六 个 内 建 对 象 和 各 种 组 件 的 特 性 和 方 法。

在 正 式 开 始 学 习 ASP 的 内 建 对 象 和 组 件 之 前,先 让 我 们 来 认 识 一 些 基 本 概 念,这 将 对 各 位 今 后 的 学 习 大 有 帮 助。请 看 下 表 :

Active Server 随 Windows NT 交 付 的 服 务 器 方 技 术 的 集 合。这 些 技 术 为 组 件 应 用 程 序 管 理、数 据 库 访 问、事 务 和 消 息 提 供 一 致 的 服 务 器 方 组 件、脚 本 模 型 和 一 套 集 成 的 系 统 服 务。   
Active Server Pages (ASP) 在 服 务 器 上 运 行 ActiveX 脚 本 和 ActiveX 组 件 的 服 务 器 方 脚 本 环 境。开 发 人 员 可 以 将 脚 本 和 组 件 结 合 在 一 起 创 建 基 于 Web 的 应 用 程 序。
ActiveX 允 许 开 发 人 员 为 World Wide Web 创 建 交 互 式 组 件 的 内 涵 丰 富 的Microsoft 技 术 术 语。允 许 用 不 同 语 言 编 写 的 软 件 组 件 在 网 络 环 境 中 一 起 工 作 的 一 组 不 依 赖 语 言 的 互 操 作 技 术。ActiveX 的 关 键 元 素 是 组 件 对 象 模 型 (COM) 和 分 布 组 件 对 象 模 型 (DCOM)。这 些 技 术 已 得 到 开 放 组 织 的 许 可,已 移 植 到 许 多 平 台 上。
ADO Active 数 据 对 象。为 基 于 Internet 以 数 据 为 中 心 的 应 用 程 序 而 优 化 的 一 组 基 于 对 象 的 数 据 访 问 接 口。ADO 基 于 已 发 布 的 规 范 并 且 随 带 在Microsoft Internet Information Server 和 Microsoft Visual InterDev 中。
DSN 数 据 源 名 称。开 放 式 数 据 库 接 口 (ODBC)用 于 引 用 访 问 数 据 所 需 的 驱 动 程 序 或 其 他 信 息 的 逻 辑 名 称。Internet信 息 服 务 器 用 于 连 接 到 ODBC 数 据 源(如 SQL Server 数 据 库)的 名 称。
event: 事 件 由 用 户 或 ActiveX 控 件 产 生 的 程 序 响 应 的 任 何 操 作。一 般 事 件 包 括 按 键 盘 键、通 过 使 用 鼠 标 单 击 选 择 按 钮 和 其 他 鼠 标 操 作。编 程 人 员 编 写 响 应 这 些 操 作 的 代 码。   
object: 对 象 在 面 向 对 象 编 程 中,由 当 作 完 整 实 体 的 操 作 和 数 据 组 成 的 变 量。对 象 是 基 于 特 定 模 型 的,在 对 象 中 客 户 使 用 对 象 的 服 务 通 过 由 一 组 方 法 或 相 关 函 数 的 接 口 访 问 对 象 的 数 据。然 后 客 户 端 可 以 调 用 这 些 方 法 执 行 某 中 操 作。
ODBC 开 放 式 数 据 库 接 口。允 许 应 用 程 序 从 各 种 跨 平 台 数 据 访 问 的 已 有 数 据 源 标 准 规 格 中 访 问 数 据 的 应 用 程 序 编 程 接 口。   
SQL 结 构 化 查 询 语 言 Structured Query Language。定 义 和 访 问 关 系 型 数 据 库 的 国 际 标 准。   
  

   什 么 是 对 象?它 可 不 是 指 你 恋 爱 的 男 伴 或 女 伴。在 面 向 对 象 编 程 中,对 象 就 是 指 由 当 作 完 整 实 体 的 操 作 和 数 据 组 成 的 变 量。对 象 是 基 于 特 定 模 型 的,在 对 象 中 客 户 使 用 对 象 的 服 务 通 过 由 一 组 方 法 或 相 关 函 数 的 接 口 访 问 对 象 的 数 据,然 后 客 户 端 可 以 调 用 这 些 方 法 执 行 某 中 操 作。ActiveX 组 件 是 建 立 Web 应 用 程 序 的 关 键,组 件 提 供 了 在 脚 本 中 执 行 任 务 的 对 象。ActiveX 组 件 是 一 个 文 件,该 文 件 包 含 执 行 某 项 或 一 组 任 务 的 代 码,由 于 组 件 可 以 执 行 公 用 任 务,这 样 程 序 员 们 就 不 必 自 己 去 创 建 执 行 这 些 任 务 的 代 码。可 以 利 用 组 件 作 为 脚 本 和 基 于 Web 应 用 程 序 的 基 本 构 造 块。只 要 知 道 如 何 访 问 组 件 提 供 的 对 象,即 使 是 位 编 写 脚 本 的 新 手,也 可 以 在 不 了 解 组 件 运 作 方 式 的 情 况 下 编 写 脚 本。总 之,组 件 使 您 不 用 学 习 编 程 就 能 够 编 写 强 大 的 脚 本。组 件 是 包 含 在 动 态 链 接 库 .dll 或 可 执 行 文 件 .exe 中 的 可 执 行 代 码。组 件 可 以 提 供 一 个 或 多 个 对 象 以 及 对 象 的 方 法 和 属 性。要 使 用 组 件 提 供 的 对 象,请 创 建 对 象 的 实 例 并 将 这 个 新 的 实 例 分 配 变 量 名。使 用 ASP 的 Server.CreateObject 方 法 可 以 创 建 对 象 的 实 例,使 用 脚 本 语 言 的 变 量 分 配 指 令 可 以 为 对 象 实 例 命 名。如 下 例:

   Set db=Server.CreateObject("ADODB.Connection")

   这 里 的 变 量 db 就 是 ASP 程 序 创 建 的 访 问 数 据 库 的 对 象 实 例 。

   Active Server Pages 提 供 了 可 在 脚 本 中 使 用 的 内 建 对 象。这 些 对 象 使 用 户 更 容 易 收 集 通 过 浏 览 器 请 求 发 送 的 信 息、响 应 浏 览 器 以 及 存 储 用 户 信 息 , 从 而 使 对 象 开 发 者 摆 脱 了 很 多 烦 琐 的 工 作。目 前 的 ASP 版 本 总 共 提 供 了 六 个 内 建 对 象,下 面 让 我 们 将 通 过 实 例 分 别 来 进 行 学 习。

   一、Request 对 象

   可 以 使 用 Request 对 象 访 问 任 何 基 于 HTTP 请 求 传 递 的 所 有 信 息,包 括 从 HTML 表 格 用 POST 方 法 或 GET 方 法 传 递 的 参 数、cookie 和 用 户 认 证。Request 对 象 使 您 能 够 访 问 客 户 端 发 送 给 服 务 器 的 二 进 制 数 据。

   Request 的 语 法 :

   Request[. 集 合 | 属 性 | 方 法 ]( 变 量 )

   在 这 里 作 者 将 挑 选 一 些 常 用 的 对 象 语 法 进 行 分 析

   1、Form

   Form 集 合 通 过 使 用 POST 方 法 的 表 格 检 索 邮 送 到 HTTP 请 求 正 文 中 的 表 格 元 素 的 值。

   语 法

   Request.Form(element)[(index)|.Count]

   参 数

   element 指 定 集 合 要 检 索 的 表 格 元 素 的 名 称。

   index 可 选 参 数,使 用 该 参 数 可 以 访 问 某 参 数 中 多 个 值 中 的 一 个。它 可 以 是 1 到 Request.Form(parameter).Count 之 间 的 任 意 整 数。

   Count 集 合 中 元 素 的 个 数

   Form 集 合 按 请 求 正 文 中 参 数 的 名 称 来 索 引。Request.Form(element) 的 值 是 请 求 正 文 中 所 有 element 值 的 数 组。通 过 调 用 Request.Form(element).Count 来 确 定 参 数 中 值 的 个 数。如 果 参 数 未 关 联 多 个 值,则 计 数 为 1。如 果 找 不 到 参 数,计 数 为 0。要 引 用 有 多 个 值 的 表 格 元 素 中 的 单 个 值,必 须 指 定 index 值。index 参 数 可 以 是 从 1 到 Request.Form(element).Count 中 的 任 意 数 字。如 果 引 用 多 个 表 格 参 数 中 的 一 个,而 未 指 定 index 值,返 回 的 数 据 将 是 以 逗 号 分 隔 的 字 符 串。

   可 以 使 用 重 述 符 来 显 示 表 格 请 求 中 的 所 有 数 据 值。例 如,用 户 通 过 指 定 几 个 值 填 写 表 格,见 下 图。

   对 于 hobby 参 数,您 可 以 使 用 下 面 的 脚 本 检 索 这 些 值。   < html>   < head>< title>< /title>< /head>   < body>   < p> 请 填 写 你 的 爱 好 < /p>   < form method="POST" action="form.asp">   < p>< input type="text" name="hobby" size="20">< br>   < input type="checkbox" name="hobby" value=" 足 球 "> 足 球 < input type="checkbox"   name="hobby" value=" 乒 乓 球 "> 乒 乓 球 < /p>   < p>< input type="submit" value=" 发 送 " name="B1">< input type="reset" value=" 重 填 "   name="B2">< /p>   < /form>   < %   For Each i In Request.Form("hobby")   Response.Write i & "< BR>"   Next   %>   < /body>< /html>

   将 以 上 代 码 剪 贴 到 记 事 簿 中(注 意 将“< ”后 面 的 空 格 去 掉),保 存 为 form.asp 文 件 并 运 行,request 对 象 可 以 根 据 你 在 form 中 填 入 或 选 择 元 素 内 容 的 不 同 将 元 素 逐 个 显 示 出 来。

   当 然 使 用 For...Next 循 环 也 可 以 生 成 同 样 的 输 出,如 下 所 示 :

  < %

  For i = 1 To Request.Form("hobby").Count

  Response.Write Request.Form("hobby")(i) & "< BR>"Next

  %>

   2、QueryString

   QueryString 集 合 检 索 HTTP 查 询 字 符 串 中 变 量 的 值 ,HTTP 查 询 字 符 串 由 问 号 (?) 后 的 值 指 定。如:

   < A HREF= "example.asp?string=this is a sample">string sample< /A>

   生 成 值 为 "this is a sample" 的 变 量 名 字 符 串。通 过 发 送 表 格 或 由 用 户 在 其 浏 览 器 的 地 址 框 中 键 入 查 询 也 可 以 生 成 查 询 字 符 串。

   语 法

   Request.QueryString(variable)[(index)|.Count]

   QueryString 集 合 可 以 让 您 以 名 称 检 索 QUERY_STRING 变 量。Request.QueryString( 参 数 ) 的 值 是 出 现 在 QUERY_STRING 中 所 有 参 数 的 值 的 数 组。通 过 调 用Request.QueryString(parameter).Count 可 以 确 定 参 数 有 多 少 个 值。

   我 们 也 可 以 使 用 QueryString 来 达 到 与 前 一 个 范 例 相 同 的 功 能。只 需 要 将 request.form 部 分 替 换 如 下:

  < %

  For Each i In Request.querystring("hobby")

  Response.Write i & "< BR>"

  Next

  %>

   3、Cookies

   什 么 是 Cookie?Cookie 其 实 是 一 个 标 签,当 你 访 问 一 个 需 要 唯 一 标 识 你 的 站 址 的 WEB 站 点 时,它 会 在 你 的 硬 盘 上 留 下 一 个 标 记,下 一 次 你 访 问 同 一 个 站 点 时,站 点 的 页 面 会 查 找 这 个 标 记。每 个 WEB 站 点 都 有 自 己 的 标 记,标 记 的 内 容 可 以 随 时 读 取,但 只 能 由 该 站 点 的 页 面 完 成。每 个 站 点 的 Cookie 与 其 他 所 有 站 点 的 Cookie 存 在 同 一 文 件 夹 中 的 不 同 文 件 内(你 可 以 在 Windows 的 目 录 下 的 Cookie 文 件 夹 中 找 到 它 们)。一 个 Cookie 就 是 一 个 唯 一 标 识 客 户 的 标 记,Cookie 可 以 包 含 在 一 个 对 话 期 或 几 个 对 话 期 之 间 某 个 WEB 站 点 的 所 有 页 面 共 享 的 信 息,使 用 Cookie 还 可 以 在 页 面 之 间 交 换 信 息。Request 提 供 的 Cookies 集 合 允 许 用 户 检 索 在 HTTP 请 求 中 发 送 的 cookie 的 值。这 项 功 能 经 常 被 使 用 在 要 求 认 证 客 户 密 码 以 及 电 子 公 告 板、WEB 聊 天 室 等 ASP 程 序 中。

   语 法

   Request.Cookies(cookie)[(key)|.attribute]

   参 数

   cookie 指 定 要 检 索 其 值 的 cookie。

   key 可 选 参 数,用 于 从 cookie 字 典 中 检 索 子 关 键 字 的 值。

   attribe 指 定 cookie 自 身 的 有 关 信 息。如:HasKeys 只 读,指 定 cookie 是 否 包 含 关 键 字。

   可 以 通 过 包 含 一 个 key 值 来 访 问 cookie 字 典 的 子 关 键 字。如 果 访 问 cookie 字 典 时 未 指 定 key,则 所 有 关 键 字 都 会 作 为 单 个 查 询 字 符 串 返 回。例 如,如 果 MyCookie 有 两 个 关 键 字 , First 和 Second,而 在 调 用 Request.Cookies 时 并 未 指 定 其 中 任 何 一 个 关 键 字,那 么 将 返 回 下 列 字 符 串。

   First=firstkeyvalue&Second=secondkeyvalue

   如 果 客 户 端 浏 览 器 发 送 了 两 个 同 名 的 cookie,那 么 Request.Cookie 将 返 回 其 中 路 径 结 构 较 深 的 一 个。例 如,如 果 有 两 个 同 名 的 的 cookie,但 其 中 一 个 的 路 径 属 性 为 /www/ 而 另 一 个 为 /www/home/,客 户 端 浏 览 器 同 时 将 两 个 cookie 都 发 送 到 /www/home/ 目 录 中,那 么 Request.Cookie 将 只 返 回 第 二 个 cookie。

   要 确 定 某 个 cookie 是 不 是 cookie 字 典(cookie 有 否 有 关 键 字),可 使 用 下 列 脚 本。

   < %= Request.Cookies("myCookie").HasKeys %>

   如 果 myCookie 是 一 个 cookie 字 典,则 前 面 的 赋 值 为 TRUE。否 则,为 FALSE。下 面 我 们 来 看 看 一 个 cookie 的 应 用 实 例:

  < %

  nickname=request.form("nick")response.cookies("nick")=nickname

' 用 response 对 象 将 用 户 名 写 入 Cookie 之 中

response.write " 欢 迎 "&request.cookies("nick")&" 光 临 小 站!"

%>

  < html>< head>< meta http-equiv="Content-Type" content="text/html; charset=gb2312">

< title>cookie< /title>

  < meta name="GENERATOR" content="Microsoft FrontPage 3.0">< /head>

  < body>

  < form method="POST" action="cookie.asp">

  < p>< input type="text" name="nick" size="20">

< input type="submit" value=" 发 送 " name="B1">< input type="reset" value=" 重 填 " name="B2">< /p>< /form>

  < /body>< /html>

   这 其 实 是 一 个 在 基 于 WEB 的 BBS 或 CHAT 的 ASP 程 序 中 常 用 的 手 法,它 将 用 户 在 起 始 页 面 上 填 入 的 姓 名 保 存 在 cookie 中,这 样 后 面 的 程 序 就 可 以 很 容 易 地 调 用 该 用 户 的 nick 了。

   4、ServerVariables

   大 家 都 知 道 在 浏 览 器 中 浏 览 网 页 的 时 候 使 用 的 传 输 协 议 是 HTTP,在 HTTP 的 标 题 文 件 中 会 记 录 一 些 客 户 端 的 信 息,如 : 客 户 的 IP 地 址 等 等,有 时 服 务 器 端 需 要 根 据 不 同 的 客 户 端 信 息 做 出 不 同 的 反 映,这 时 候 就 需 要 用 ServerVariables 集 合 获 取 所 需 信 息。

   语 法

   Request.ServerVariables ( 服 务 器 环 境 变 量 )

   由 于 服 务 器 环 境 变 量 较 多,作 者 仅 将 一 些 常 用 的 变 量 在 下 表 中 列 出 :

ALL_HTTP 客 户 端 发 送 的 所 有 HTTP 标 题 文 件。
CONTENT_LENGTH 客 户 端 发 出 内 容 的 长 度。
CONTENT_TYPE 内 容 的 数 据 类 型。如:“text/html”。同 附 加 信 息 的 查 询 一 起 使 用,如 HTTP 查 询 GET、POST 和 PUT。
LOCAL_ADDR 返 回 接 受 请 求 的 服 务 器 地 址。如 果 在 绑 定 多 个 IP 地 址 的 多 宿 主 机 器 上 查 找 请 求 所 使 用 的 地 址 时,这 条 变 量 非 常 重 要。
LOGON_USER 用 户 登 录 Windows NT 的 帐 号。
QUERY_STRING 查 询 HTTP 请 求 中 问 号(?)后 的 信 息。
REMOTE_ADDR 发 出 请 求 的 远 程 主 机 (client) 的 IP 地 址。
REMOTE_HOST 发 出 请 求 的 主 机 (client) 名 称。如 果 服 务 器 无 此 信 息,它 将 设 置 为 空 的  MOTE_ADDR 变 量。
REQUEST_METHOD 该 方 法 用 于 提 出 请 求。相 当 于 用 于 HTTP 的 GET、HEAD、POST等 等。
SERVER_NAME 出 现 在 自 引 用 URL 中 的 服 务 器 主 机 名、DNS 化 名 或 IP 地 址。
SERVER_PORT 发 送 请 求 的 端 口 号。

   我 们 可 以 使 用 以 下 脚 本 打 印 出 所 有 的 服 务 器 环 境 变 量。

  < TABLE>

  < TR>< TD>< B>Server Variable< /B>< /TD>< TD>< B>Value< /B>< /TD>< /TR>< % For Each name In Request.ServerVariables %>

  < TR>< TD> < %= name %> < /TD>< TD> < %= Request.ServerVariables(name) %> < /TD>< /TR>< /TABLE>

  < % Next %>

   今 天 我 们 详 细 学 习 了 ASP 内 建 对 象 中 的 request 对 象,这 也 是 ASP 程 序 中 使 用 最 频 繁 的 对 象,希 望 大 家 在 课 后 多 多 实 践。