WWW数据库开发

类别:数据库 点击:0 评论:0 推荐:
首页 编程书籍下载 New Win98帮助格式 本站所有文章都提供打包下载 下载资料 由于碧海银沙有时不支持断线续载,如果您有不能下载的东西,请到网易站
对于Turbo C、Turbo C++、Turbo Pascal这些编译器,请到快意恩仇书社的编程资料相关栏目下载


WWW数据库开发

一 、引 言
    WWW 是 目 前 Internet 上 发 展 最 快 的 领 域 , 也 是 Internet 网 上 最 重 要 的 信 息 检 索 手 段 。 早 期 的 Web 页 面 (Home Page) 主 要 用 来 传 递 静 态 HTML 文 档 , 后 来 由 于 CGI 接 口 , 特 别 是 Java 和 JavaScript 语 言 的 引 入 , 使 得 Web 页 面 可 以 方 便 地 传 播 动 态 信 息 。 借 助 Java 和 JavaScript 语 言 , 可 以 设 计 出 具 有 动 画 、 声 音 、 图 形 / 图 像 和 各 种 特 殊 效 果 的 Web 页 面 。

    WWW 的 主 要 内 容 包 括 超 文 本 传 输 协 议 (HTTP) 、 超 文 本 标 记 语 言 (HTML) 、 通 用 网 关 接 口 (CGI) 、 Java 和 JavaScript 语 言 等 。

     HTTP(Hyper Text Transfer Protocol) , 是 一 个 专 门 为 Web 服 务 器 和 Web 浏 览 器 之 间 交 换 数 据 而 设 计 的 网 络 协 议 。 它 通 过 规 定 通 用 资 源 定 位 符 (URLs) 使 客 户 端 的 浏 览 器 与 服 务 器 的 Web 资 源 建 立 链 接 关 系 , 从 而 奠 定 了 用 户 对 Internet 透 明 访 问 的 基 础 。

     HTML 是 WWW 的 通 用 标 记 语 言 , 它 用 来 创 建 Web 页 面 和 控 制 Web 信 息 显 示 格 式 。 HTML 不 是 编 程 语 言 , 而 是 一 种 描 述 语 言 。 HTML 2.0 得 到 了 IETF(Internet Engineering Task Force) 的 支 持 而 成 为 Internet 国 际 标 准 。 目 前 , HTML 已 经 发 展 到 3.0 和 3.2 版 , 只 是 新 版 本 的 标 准 尚 未 完 全 统 一 , 不 同 的 商 家 对 HTML 2.0 进 行 了 一 定 的 扩 充 , 引 入 了 更 多 新 的 功 能 。 例 如 , Netscape 公 司 在 HTML 3.0 中 增 加 了 页 面 底 图 (Background Images) 和 表 (Table) 定 义 等 标 记 , 使 得 Web 页 面 更 加 引 人 入 胜 。

     CGI 是 通 用 网 关 接 口 (Common Gateway Interface) 的 简 称 , 它 是 Web 服 务 器 与 外 部 程 序 之 间 的 通 信 接 口 , 服 务 器 并 不 关 心 外 部 应 用 程 序 是 用 什 么 语 言 ( 如 C 、 C + + 、 Pascal 、 Delphi 或 Perl) 编 写 的 , 它 只 是 负 责 接 收 用 户 输 入 的 信 息 , 并 把 CGI 程 序 所 产 生 的 结 果 ??HTML 文 档 或 其 他 符 合 HTTP 规 定 的 文 件 回 传 给 用 户 。 事 实 上 , CGI 是 动 态 Web 页 面 制 作 的 第 一 步 , 但 由 于 CGI 程 序 实 现 比 较 困 难 , 而 且 效 率 不 高 , 它 已 经 逐 渐 被 新 的 技 术 所 取 代 。

     Java 是 由 Sun 公 司 开 发 的 面 向 对 象 (Object - oriented) 程 序 设 计 语 言 , 它 支 持 Client/Server 计 算 。 Java 最 初 的 目 标 是 建 立 一 个 适 合 于 家 用 电 器 产 品 使 用 的 系 统 环 境 , 但 并 没 有 获 得 成 功 , 所 幸 的 是 它 以 其 固 有 的 优 点 被 用 来 弥 补 和 扩 充 HTML 语 言 的 不 足 , 成 为 Internet 领 域 后 来 居 上 的 重 要 工 具 。 Java 很 有 可 能 成 为 今 后 十 年 互 联 网 上 的 主 流 语 言 。

     JavaScript 是 由 Sun 公 司 和 Netscape 公 司 共 同 研 制 的 基 于 对 象 (Object - based) 的 语 言 , 它 舍 弃 了 Java 中 最 复 杂 的 类 (Class) 定 义 和 继 承 等 成 分 , 而 只 保 留 了 它 的 表 达 式 和 控 制 语 句 。 这 种 简 化 并 不 影 响 它 在 WWW 中 发 挥 重 要 作 用 , 相 反 , 因 为 有 了 JavaScript , 一 般 的 Web 页 面 设 计 者 都 可 以 十 分 容 易 地 实 现 过 去 只 有 靠 专 业 程 序 员 编 制 复 杂 的 CGI 程 序 才 能 完 成 的 功 能 , 从 而 使 Web 技 术 得 到 进 一 步 普 及 。

    交 互 式 动 态 HTML 页 面 的 实 现 需 要 以 大 量 数 据 资 源 为 基 础 , 为 了 对 数 据 资 源 进 行 高 效 的 存 取 , 自 然 会 引 入 数 据 库 系 统 , 于 是 , Web 数 据 库 便 应 运 而 生 了 。

    许 多 数 据 库 和 WWW 商 家 都 把 数 据 库 与 Web 的 连 接 性 作 为 发 展 战 略 的 一 个 重 要 组 成 部 分 。

     Oracle 公 司 通 过 Oracle 7 数 据 库 和 Web 技 术 的 全 面 集 成 , 提 供 了 一 个 Intranet 开 发 平 台 , Oracle Web Server 允 许 Web 客 户 直 接 通 过 Web 浏 览 器 来 访 问 Oracle 7 数 据 库 中 存 储 的 数 据 。 Oracle Web Server(2.0 版 以 上 ) 用 户 能 够 调 用 存 储 过 程 生 成 动 态 Web 页 面 , 而 无 需 依 赖 CGI 。

     Sybase 公 司 的 战 略 计 划 中 也 处 处 体 现 出 Internet 的 连 接 性 , 特 别 是 通 过 加 强 Internet 数 据 仓 库 技 术 来 突 出 其 产 品 的 稳 健 性 和 易 扩 展 性 ; Sybase 的 交 互 式 数 据 仓 库 允 许 用 户 通 过 其 IQ(Information Query) 产 品 进 行 快 速 交 互 式 查 询 , 在 Sybase System 11 中 , Internet 连 接 性 也 是 最 主 要 的 特 色 。

     作 为 世 界 上 最 大 的 Web 产 品 供 应 商 , Netscape 公 司 也 在 其 LiveWire 开 发 工 具 中 提 供 了 一 个 内 部 数 据 库 对 象 database , 通 过 database 对 象 的 各 种 方 法 , 可 完 成 对 数 据 库 服 务 器 的 连 接 、 检 索 、 更 新 、 提 交 、 回 退 等 操 作 。

     Microsoft 公 司 的 Web 服 务 器 IIS(Internet Information Server) 中 也 有 一 个 数 据 库 连 接 器 IDC(Internet Database Connector) , 可 以 动 态 地 查 询 和 更 新 数 据 库 。

     需 要 指 出 的 是 , 目 前 尚 未 形 成 Web 数 据 库 工 业 标 准 , 不 同 商 家 的 产 品 各 有 长 短 。

二 、从 Client/Server 应 用 到 Intranet/Web 应 用
     在 过 去 的 十 几 年 里 , Client/Server 结 构 为 实 现 企 业 级 的 信 息 共 享 起 到 了 举 足 轻 重 的 作 用 , 但 随 着 企 业 规 模 的 日 益 扩 大 , 应 用 程 序 复 杂 程 度 的 不 断 提 高 , 传 统 的 Client/Server 结 构 也 暴 露 出 许 多 问 题 , 尤 其 是 系 统 软 件 和 应 用 软 件 变 得 越 来 越 复 杂 。 这 不 仅 给 应 用 软 件 实 现 带 来 困 难 , 还 给 软 件 维 护 造 成 不 便 ; 随 着 用 户 需 求 的 改 变 , Client 端 应 用 软 件 可 能 需 要 增 加 新 的 功 能 或 修 改 用 户 界 面 , 那 么 该 软 件 的 应 用 范 围 越 广 , 软 件 维 护 的 开 销 也 就 越 大 。 另 外 , Client/Server 结 构 所 采 用 的 软 件 产 品 大 都 缺 乏 开 放 的 标 准 , 一 般 不 能 跨 平 台 运 行 。 当 把 Client/Server 结 构 的 软 件 应 用 于 广 域 网 时 就 暴 露 出 更 大 的 不 足 。

     Intranet/Web 技 术 可 以 比 较 圆 满 地 解 决 上 述 问 题 。Intranet 是 采 用 Internet 技 术 的 企 业 内 联 网 络 , 它 既 可 与 Internet 互 联 , 也 可 以 独 立 使 用 , 具 有 很 大 的 灵 活 性 。 用 户 只 要 在 内 部 Intranet 上 建 立 自 己 的 Web 服 务 器 , 并 通 过 Web 服 务 器 与 数 据 库 服 务 器 连 接 , 就 能 够 大 大 降 低 软 件 维 护 开 销 , 因 为 采 用 Intranet/Web 技 术 , 我 们 只 需 开 发 和 维 护 服 务 器 端 应 用 程 序 ( 无 需 开 发 客 户 端 程 序 ) , 而 服 务 器 上 所 有 的 应 用 程 序 都 可 通 过 Web 浏 览 器 在 客 户 机 上 执 行 , 从 而 统 一 了 用 户 界 面 。 由 于 几 乎 各 种 操 作 系 统 上 都 有 Web 浏 览 器 , 所 以 Intranet/Web 应 用 可 以 方 便 地 实 现 跨 平 台 操 作 。

三 、 Web 服 务 器 与 数 据 库 服 务 器 的 连 接 技 术

1  CGI 技 术

     CGI 是 最 早 的 Web 数 据 库 连 接 技 术 , 几 乎 所 有 的 Web 服 务 器 都 支 持 CGI 。 程 序 员 可 以 选 择 任 何 一 种 语 言 , 如 C 、 C + + 、 Delphi 、 Visual Basic 或 Perl 来 编 写 CGI 程 序 。

     CGI 是 一 个 位 于 服 务 器 和 外 部 应 用 程 序 之 间 的 通 信 协 议 , CGI 程 序 可 以 与 Web 浏 览 器 进 行 交 互 , 并 可 以 通 过 数 据 库 的 调 用 接 口 与 数 据 库 服 务 器 进 行 通 信 。 例 如 , CGI 程 序 可 以 从 数 据 库 服 务 器 中 获 取 数 据 , 并 转 化 为 HTML 页 面 , 然 后 由 Web 服 务 器 发 送 给 浏 览 器 ; 也 可 以 从 浏 览 器 获 得 数 据 , 并 存 入 指 定 的 数 据 库 中 。

    按 照 应 用 环 境 的 不 同 , CGI 可 以 分 为 标 准 CGI 和 Win CGI 两 种 。

(1) 标 准 CGI

     标 准 CGI 通 过 环 境 变 量 或 者 命 令 行 参 数 来 传 递 Web 服 务 器 获 得 的 用 户 请 求 信 息 , Web 服 务 器 与 浏 览 器 之 间 的 通 信 采 用 标 准 输 入 / 输 出 方 式 。 当 Web 服 务 器 接 收 到 浏 览 器 发 来 的 CGI 请 求 时 , 首 先 对 该 请 求 进 行 分 析 , 并 设 置 所 需 的 环 境 变 量 或 命 令 行 参 数 , 然 后 创 建 一 个 子 进 程 启 动 CGI 程 序 。 CGI 程 序 执 行 完 毕 后 , 利 用 标 准 输 出 将 执 行 结 果 返 回 Web 服 务 器 。 CGI 的 输 出 类 型 可 以 是 HTML 文 档 、 图 形 / 图 像 、 纯 文 本 或 声 音 等 。

(2)Win CGI

     标 准 CGI 采 用 标 准 输 入 / 输 出 进 行 数 据 通 信 , 但 许 多 Windows 环 境 的 编 程 工 具 ( 如 Visual Basic 和 Borland Delphi 等 ) 不 支 持 标 准 输 入 / 输 出 方 式 , 因 此 就 无 法 用 这 些 工 具 来 开 发 基 于 标 准 CGI 的 应 用 程 序 。

     Win CGI 也 称 为 间 接 CGI 或 缓 冲 CGI 。 这 种 方 法 在 ( 不 支 持 标 准 输 入 / 输 出 的 )CGI 程 序 和 CGI 接 口 之 间 插 入 一 个 缓 冲 程 序 , 该 缓 冲 程 序 与 CGI 接 口 之 间 用 标 准 输 入 / 输 出 进 行 通 信 ; CGI 程 序 则 采 用 临 时 文 件 ( 缓 冲 区 ) , 而 不 是 标 准 输 入 / 输 出 进 行 数 据 通 信 。

     当 Web 服 务 器 接 收 到 浏 览 器 的 请 求 时 , 先 创 建 一 个 子 进 程 启 动 缓 冲 程 序 , 该 缓 冲 子 进 程 与 Web 服 务 器 进 行 通 信 , 它 通 过 标 准 输 入 / 输 出 、 环 境 变 量 和 命 令 行 参 数 获 得 有 关 数 据 , 并 将 这 些 数 据 保 存 在 一 个 输 入 缓 冲 区 中 ; 然 后 , 缓 冲 子 进 程 再 创 建 一 个 子 进 程 启 动 CGI 程 序 , CGI 程 序 读 取 输 入 缓 冲 区 中 的 内 容 , 处 理 浏 览 器 的 请 求 , 并 将 要 输 出 的 内 容 存 入 输 出 缓 冲 区 ; 缓 冲 程 序 通 过 环 境 变 量 或 命 令 行 参 数 等 方 式 传 递 输 入 缓 冲 区 和 输 出 缓 冲 区 的 地 址 ( 或 临 时 文 件 名 ) 到 CGI 子 进 程 。

     在 整 个 处 理 过 程 中 , 缓 冲 子 进 程 与 CGI 子 进 程 之 间 应 保 持 同 步 , 以 监 测 CGI 程 序 执 行 的 状 态 。 当 缓 冲 子 进 程 得 到 CGI 子 进 程 的 输 出 时 , 设 置 有 关 环 境 变 量 并 终 止 该 CGI 子 进 程 , 然 后 采 用 标 准 输 出 与 Web 服 务 器 通 信 , 并 通 过 Web 服 务 器 将 CGI 程 序 的 输 出 结 果 返 回 给 浏 览 器 。 Web 服 务 器 进 程 与 缓 冲 进 程 也 应 保 持 同 步 , 以 监 测 缓 冲 程 序 执 行 的 状 态 。

     Win CGI 最 主 要 的 特 点 是 : Web 服 务 器 与 CGI 程 序 之 间 的 数 据 交 换 是 通 过 缓 冲 区 , 而 不 是 通 过 标 准 输 入 / 输 出 进 行 的 。

     显 而 易 见 , CGI 程 序 是 作 为 独 立 的 外 部 应 用 程 序 来 执 行 的 , 它 与 Web 服 务 器 上 的 其 他 进 程 竞 争 处 理 器 资 源 , 因 此 导 致 运 行 速 度 缓 慢 。 此 外 , 用 CGI 开 发 Web 应 用 是 相 当 困 难 的 , 程 序 员 不 仅 要 掌 握 HTML 语 言 , 还 要 精 通 低 级 编 程 语 言 。 在 数 据 库 访 问 过 程 中 , 连 接 状 态 的 管 理 是 很 重 要 的 , 假 如 没 有 状 态 管 理 , 则 来 自 浏 览 器 的 每 一 次 请 求 都 需 要 一 个 对 连 接 的 建 立 和 释 放 过 程 , 这 样 效 率 肯 定 很 低 。 遗 憾 的 是 CGI 不 提 供 状 态 管 理 功 能 。 再 者 , 每 个 CGI 程 序 必 须 用 某 个 特 定 数 据 库 服 务 器 专 用 的 SQL 语 言 来 手 工 编 写 数 据 库 接 口 程 序 , 故 可 移 植 性 较 差 。

2  Web API 技 术

     Web API 通 常 以 动 态 链 接 库 (DLL) 的 形 式 提 供 , 是 驻 留 在 Web 服 务 器 上 的 程 序 , 它 的 作 用 与 CGI 相 似 , 也 是 为 了 扩 展 Web 服 务 器 的 功 能 。

     目 前 最 著 名 的 Web API 有 Netscape 的 NSAPI 、 Microsoft 的 ISAPI 和 O'Reilly 的 WSAPI 。 各 种 API 均 与 其 相 应 的 Web 服 务 器 紧 密 联 系 在 一 起 。

      用 NSAPI 、 ISAPI 或 WSAPI 开 发 的 程 序 , 性 能 大 大 优 于 CGI 程 序 , 这 些 API 应 用 程 序 是 与 Web 服 务 器 软 件 处 于 同 一 地 址 空 间 的 DLL , 因 此 所 有 的 HTTP 服 务 器 进 程 能 够 直 接 利 用 各 种 资 源 , 这 显 然 比 调 用 不 在 同 一 地 址 空 间 的 CGI 程 序 所 占 用 的 系 统 时 间 要 短 。 程 序 员 可 以 利 用 API 分 别 开 发 Web 服 务 器 与 数 据 库 服 务 器 的 接 口 程 序 。

     Web API 的 出 现 解 决 了 CGI 的 低 效 问 题 , 但 用 API 编 程 比 开 发 CGI 程 序 更 加 困 难 。 开 发 API 程 序 需 要 多 线 程 、 进 程 同 步 、 直 接 协 议 编 程 等 知 识 。

     为 了 解 决 复 杂 与 高 效 之 间 的 矛 盾 , Netscape 与 Microsoft 均 为 各 自 的 Web 服 务 器 提 供 了 基 于 API 的 高 级 编 程 接 口 。 Netscape 提 供 的 是 LiveWire,Microsoft 提 供 的 是 IDC(Internet Database Connector) 。

(1)Netscape 的 LiveWire
     LiveWire 是 一 个 通 用 的 Web 开 发 环 境 , 而 不 仅 仅 是 数 据 库 访 问 接 口 。 LiveWire 的 编 程 语 言 是 JavaScript , 它 提 供 了 一 个 database 对 象 , 该 对 象 的 方 法 可 用 来 操 作 关 系 数 据 库 。 当 一 个 应 用 程 序 要 连 接 数 据 库 服 务 器 时 , LiveWire 就 建 立 一 个 database 对 象 。 每 个 应 用 程 序 只 能 有 一 个 数 据 库 对 象 。

     用 database 对 象 的 connect 方 法 可 连 接 数 据 库 服 务 器 , 例 如 :
database.connect( ″ ORACLE ″ , ″ OraSvr ″ , ″ system ″ , ″ manager ″ , ″ MyDB ″ )

    可 连 接 到 ORACLE 数 据 库 服 务 器 OraSvr 上 system/manager 用 户 的 MyDB 数 据 库 实 例 上 。

     LiveWire 提 供 了 几 种 显 示 数 据 库 查 询 结 果 的 方 法 。 其 中 , 最 简 单 而 且 最 快 的 是 用 database 对 象 的 SQL Table 方 法 。 SQL Table 方 法 以 HTML 表 的 形 式 返 回 SQL 语 句 的 查 询 结 果 。

     SQL Table 自 动 控 制 查 询 结 果 的 输 出 格 式 , 这 是 最 简 单 的 方 法 。 如 果 你 希 望 自 己 定 制 输 出 格 式 , 可 用 数 据 库 光 标 建 立 自 己 的 显 示 函 数 。

      每 个 数 据 库 查 询 都 将 返 回 一 个 光 标 , 光 标 可 以 看 成 数 据 库 查 询 结 果 构 成 的 虚 表 或 视 图 , 每 个 光 标 都 支 持 当 前 行 (current row) 的 概 念 , 它 是 指 向 结 果 表 中 记 录 的 指 针 。
     一 旦 应 用 程 序 与 数 据 库 连 接 成 功 , 你 就 可 以 用 database 对 象 的 cursor 方 法 来 为 指 定 的 SQL 查 询 语 句 建 立 光 标 。

cursorName=database.cursor( ″ SELECT 语 句 ″ , updatable)

      其 中 cursorName 是 为 光 标 对 象 所 取 的 名 字 ; ?SELECT 语 句 ?是 数 据 库 服 务 器 支 持 的 SQL 查 询 语 句 ; updatable 是 一 个 布 尔 参 数 , 它 表 示 该 光 标 是 否 允 许 修 改 。

      可 修 改 光 标 (updatable cursor) 允 许 借 助 光 标 的 当 前 行 来 更 新 数 据 库 中 的 表 。 但 这 时 的 光 标 只 能 限 定 为 单 表 的 查 询 结 果 。

应 用 程 序 可 以 用 disconnect 方 法 关 闭 数 据 库 连 接 :
database.disconnect()

     一 旦 关 闭 了 数 据 库 连 接 , 应 用 程 序 便 无 法 建 立 光 标 或 使 用 其 他 database 方 法 。

     事 务 是 一 组 数 据 库 操 作 的 集 合 , 这 些 操 作 要 么 一 起 成 功 , 要 么 一 起 失 败 。 操 作 的 提 交 或 回 退 是 一 同 生 效 的 。 事 务 处 理 的 概 念 对 维 护 数 据 的 完 整 性 和 一 致 性 是 十 分 重 要 的 。 尽 管 各 种 数 据 库 服 务 器 事 务 处 理 的 实 现 方 法 有 所 不 同 , LiveWare 提 供 了 统 一 的 事 务 处 理 接 口 。

     主 要 是 数 据 库 更 新 语 句 (INSERT , UPDATE 和 DELETE) 要 在 事 务 控 制 之 下 完 成 。 database 对 象 的 begin Transaction 、 commitTransaction 和 rollbackTransaction 方 法 分 别 用 来 启 动 、 提 交 和 回 退 事 务 。

     多 媒 体 数 据 ( 图 像 、 声 音 、 文 本 、 动 画 等 ) 可 以 二 进 制 大 对 象 (BLOB) 的 形 式 存 入 数 据 库 。 LiveWire 有 两 种 处 理 二 进 制 数 据 的 方 法 , 第 一 种 是 把 文 件 名 存 入 数 据 库 , 而 文 件 实 体 放 在 数 据 库 外 ; 第 二 种 是 直 接 用 BLOB 类 型 的 字 段 存 储 多 媒 体 数 据 , 再 通 过 LiveWire 提 供 的 BLOB 方 法 来 访 问 这 些 数 据 。

      LiveWire 仅 仅 支 持 Netscape Enterprise/FastTrack Server , 而 不 支 持 其 他 的 Web 服 务 器 。

(2)Microsoft 的 IDC

      IDC 是 Microsoft Web 服 务 器 IIS(Internet Information Server) 的 一 个 动 态 链 接 库 , 它 通 过 ODBC 接 口 访 问 各 种 数 据 库 。 IDC 包 含 两 种 类 型 的 文 件 : IDC 脚 本 文 件 ( * .IDC) 和 HTML 模 板 文 件 ( * .HTX) 。

      IDC 脚 本 文 件 ( * .IDC) 用 来 控 制 数 据 库 访 问 , 其 中 包 括 数 据 库 名 、 用 户 名 、 口 令 和 SQL 语 句 等 数 据 库 连 接 参 数 , 以 及 与 此 IDC 文 件 对 应 的 HTML 模 板 文 件 ( * .HTX) 的 存 储 路 径 。

     HTML 模 板 文 件 ( * .HTX) 是 实 际 HTML 文 档 的 模 板 , 它 以 直 观 的 方 法 说 明 怎 样 将 查 询 到 的 数 据 插 入 Web 页 面 。 模 板 中 可 以 有 静 态 文 字 、 图 形 / 图 像 或 其 他 HTML 页 面 元 素 。

     对 数 据 库 服 务 器 的 每 一 次 查 询 都 需 要 一 个 IDC 脚 本 文 件 ( * .IDC) 和 一 个 HTML 模 板 文 件 ( * .HTX) 。 脚 本 文 件 必 须 存 储 在 Web 服 务 器 上 , 而 模 板 文 件 则 可 以 存 储 在 Web 服 务 器 能 够 访 问 到 的 任 何 地 方 。

     IDC 的 处 理 流 程 大 致 如 下 : Web 服 务 器 IIS 对 浏 览 器 传 来 的 URL 字 符 串 进 行 分 析 , 如 果 当 前 URL 以 ? IDC ?结 束 , 就 说 明 这 是 一 个 IDC 请 求 , 于 是 将 其 传 给 IDC 接 口 模 块 , IDC 将 依 次 读 取 脚 本 文 件 并 与 数 据 库 服 务 器 进 行 通 信 ; IDC 模 块 从 数 据 库 服 务 器 得 到 查 询 结 果 后 , 通 过 指 定 的 模 板 文 件 而 得 到 一 个 实 际 的 HTML 文 档 ; 然 后 将 该 文 档 交 给 Web 服 务 器 IIS , 由 IIS 将 HTML 文 档 返 回 Web 浏 览 器 。

     IDC 不 仅 可 以 从 数 据 库 中 查 询 数 据 , 也 可 以 向 数 据 库 中 存 储 数 据 。 与 LiveWire 类 似 , IDC 仅 仅 支 持 Microsoft 的 IIS , 而 不 支 持 其 他 的 Web 服 务 器 。

3  RAD 技 术

     RAD 是 快 速 应 用 开 发 (Rapid Application Development) 的 缩 写 。 传 统 的 RAD 工 具 , 如 PowerBuilder 、 Delphi 、 Uniface 、 NewEra 、 Oracle/Developer 2000 等 早 已 为 人 们 熟 知 。 近 两 年 来 , 随 着 Web 数 据 库 应 用 需 求 的 不 断 升 温 , 市 场 上 已 经 出 现 了 一 批 Web 数 据 库 RAD 工 具 , 例 如 , Powersoft 公 司 为 PowerBuilder 增 加 了 一 个 Internet Development Kit,PowerBuilder 6.0 更 加 突 出 了 Intranet/Web 技 术 ; Borland 公 司 在 推 出 IntraBuilder 之 后 , 又 把 Intranet/Web 技 术 真 正 融 入 最 新 的 Delphi 3.0 中 ; Oracle 公 司 的 新 版 Designer 2000 和 Developer 2000 也 能 够 直 接 生 成 Web 数 据 库 应 用 ; Uniface 公 司 通 过 其 Web enabler 产 品 将 代 码 直 接 转 化 为 Web 数 据 库 应 用 。

     RAD 工 具 的 主 要 特 点 是 具 有 图 形 开 发 界 面 和 可 视 计 算 技 术 的 支 持 , 程 序 员 只 需 通 过 简 单 的 鼠 标 点 击 和 键 盘 交 互 操 作 , 即 可 快 速 生 成 应 用 程 序 代 码 。 这 里 , 我 们 简 单 介 绍 几 种 有 代 表 性 的 RAD 工 具 。

(1)IntraBuilder

     在 使 用 Borland IntraBuilder 之 前 , 必 须 首 先 在 Web 服 务 器 上 安 装 IntraBuilder Server, 并 在 开 发 平 台 上 安 装 IntraBuilder Designer 集 成 设 计 工 具 。

      IntraBuilder 是 一 个 基 于 JavaScript 语 言 的 可 视 开 发 工 具 , 它 能 够 快 速 生 成 和 发 布 Intranet/Web 数 据 库 应 用 ; 用 户 通 过 Web 浏 览 器 访 问 IntraBuilder 应 用 程 序 。 IntraBuilder Server 具 有 连 接 数 据 库 与 Web 服 务 器 的 能 力 。

IntraBuilder 包 括 三 个 主 要 组 成 部 分 :

① IntraBuilder Designer 是 一 个 集 成 开 发 环 境 , 可 以 完 成 所 有 Web 应 用 开 发 工 作 , 它 包 括 图 形 用 户 界 面 、 程 序 自 动 生 成 工 具 Experts 和 可 视 化 RAD 设 计 工 具 。

② IntraBuilder Server 运 行 在 Web 服 务 器 上 , 用 来 处 理 客 户 机 的 请 求 , 目 前 IntraBuilder Server 只 能 安 装 在 Windows NT 或 Windows 95 上 。

③ 内 置 Intranet 应 用 程 序 。 这 些 程 序 的 所 有 模 块 均 可 重 用 (reuse) , 程 序 员 可 以 利 用 现 成 的 格 式 (Form) 、 表 (Table) 、 报 表 (Report) , 以 及 JavaScript 代 码 来 生 成 新 的 应 用 程 序 。

      一 个 IntraBuilder 应 用 程 序 通 常 包 含 表 (Table) 、 格 式 (Form) 、 报 表 (Report) 和 页 面 (Home Page) 等 构 件 。 我 们 可 以 用 两 种 方 法 来 实 现 IntraBuilder 应 用 程 序 。 一 是 在 IntraBuilder Experts 工 具 的 指 导 下 , 通 过 人 - 机 交 互 , 自 动 生 成 表 、 格 式 、 报 表 和 页 面 等 元 素 ; 二 是 利 用 IntraBuilder Designer 可 视 化 设 计 工 具 分 别 建 立 应 用 程 序 的 各 元 素 。

(2)Uniface

       Uniface 是 Compuware 公 司 推 出 的 基 于 组 件 的 可 视 化 开 发 环 境 。 Uniface 组 件 包 括 格 式 (Form) 、 服 务 程 序 (Service) 和 报 表 (Report) 等 。 所 有 程 序 模 块 中 的 定 义 都 是 可 重 用 的 (reusable) , 程 序 员 可 以 利 用 继 承 方 法 重 用 已 经 完 成 的 程 序 模 块 , 从 而 提 高 软 件 生 产 效 率 和 软 件 可 靠 性 。

      Uniface 的 Web enabler 产 品 使 得 程 序 员 能 够 像 开 发 Client/Server 应 用 程 序 那 样 定 义 应 用 模 型 和 用 户 界 面 , 我 们 只 需 选 择 生 成 HTML 的 选 项 , 并 将 应 用 程 序 安 装 在 服 务 器 上 , 就 可 完 成 Web 应 用 开 发 。 此 时 , 用 户 既 可 在 Client/Server 模 式 下 通 过 Uniface 运 行 环 境 执 行 应 用 程 序 , 也 可 在 Web 浏 览 器 上 通 过 可 交 互 的 动 态 HTML 访 问 与 Client/Server 模 式 下 功 能 和 界 面 完 全 一 致 的 应 用 。

     Web enabler 和 Web 服 务 器 必 须 安 装 在 同 一 台 机 器 上 , 这 与 IntraBuilder Server 需 要 与 Web 服 务 器 安 装 在 一 台 机 器 上 的 要 求 十 分 相 似 。 每 当 Web 服 务 器 接 收 到 用 户 请 求 , 便 通 过 Web enabler 启 动 Uniface Web 应 用 。

     Web enabler 产 品 同 时 包 含 了 CGI 、 NSAPI 和 ISAPI 接 口 , 因 此 可 以 对 Microsoft IIS 、 Netscape Enterprise/FastTrack Server 等 不 同 商 家 的 Web 服 务 器 提 供 透 明 的 支 持 。

(3)Oracle/Designer 2000 与 Oracle/Developer 2000

      Oracle 公 司 利 用 具 有 Internet 连 接 能 力 的 中 介 产 品 实 现 Oracle 7 数 据 库 服 务 器 与 Web 服 务 器 的 结 合 ; Oracle Web Server 通 过 Oracle 7 和 Web 技 术 的 全 面 集 成 提 供 了 一 个 Internet/Intranet 开 发 平 台 。 Oracle Web Server 允 许 Web 客 户 直 接 通 过 浏 览 器 访 问 Oracle 7 数 据 库 中 存 储 的 数 据 , 并 能 够 调 用 存 储 过 程 生 成 动 态 Web 页 面 , 而 无 需 依 赖 CGI 。

     Oracle 公 司 提 供 了 两 个 工 具 ?Designer 2000 和 Developer 2000 , 可 用 于 完 成 Web 应 用 程 序 的 开 发 , 它 们 的 编 程 语 言 是 扩 充 的 PL/SQL , 而 程 序 员 无 需 手 工 编 码 即 可 生 成 PL/SQL 程 序 。

     Designer 2000 是 一 个 完 整 的 CASE 工 具 , 它 为 应 用 系 统 分 析 人 员 和 设 计 人 员 提 供 了 图 形 方 式 的 分 析 和 建 模 、 应 用 程 序 结 构 设 计 、 数 据 库 结 构 设 计 和 应 用 程 序 生 成 等 功 能 。 此 外 , 它 还 能 实 现 Client/Server 应 用 向 Intranet/Web 应 用 的 升 级 。

     如 果 在 进 行 Client/Server 应 用 开 发 时 已 经 采 用 Designer 2000 作 为 设 计 开 发 工 具 , 那 么 现 在 只 需 选 用 新 版 Designer 2000 , 进 一 步 操 作 就 可 完 成 转 换 , 即 在 模 块 结 构 层 次 图 中 选 中 某 一 模 块 , 然 后 选 择 Web Server 生 成 工 具 进 行 Web 应 用 生 成 即 可 。 无 需 重 新 设 计 和 编 码 , 无 需 修 改 任 何 内 容 , 最 大 程 度 地 保 护 了 软 件 投 资 。

     如 果 在 进 行 Client/Server 应 用 开 发 时 没 有 采 用 Designer 2000 , 而 是 用 Developer 2000 完 成 的 , 此 时 首 先 要 用 Designer 2000 的 反 向 设 计 功 能 , 对 用 Developer 2000 开 发 的 应 用 程 序 进 行 分 析 , 把 其 中 涉 及 到 的 数 据 库 信 息 和 应 用 程 序 结 构 的 分 析 结 果 形 成 数 据 定 义 信 息 和 模 块 定 义 信 息 , 同 时 把 这 两 类 信 息 记 录 到 共 享 分 析 库 中 。 然 后 , 依 据 模 块 定 义 信 息 , 通 过 使 用 Web Server 生 成 工 具 即 可 生 成 相 应 的 Web 应 用 程 序 。 Web 应 用 可 以 生 成 动 态 的 HTML 页 面 , 通 过 HTML 页 面 , 用 户 能 够 完 成 各 种 数 据 库 访 问 , 包 括 查 询 、 插 入 、 修 改 和 删 除 等 , 只 需 把 这 些 PL/SQL 程 序 包 安 装 到 Web 服 务 器 上 , 就 可 通 过 浏 览 器 使 用 了 。

     Developer 2000 也 能 生 成 Web 应 用 , 在 保 持 原 有 功 能 的 同 时 , Developer 2000 中 的 Report 工 具 可 以 让 用 户 通 过 鼠 标 点 击 方 式 生 成 HTML 格 式 的 报 表 , 构 成 Web 应 用 , 其 操 作 方 式 同 Client/Server 结 构 的 报 表 工 具 一 样 简 单 。

4、 Java/JDBC 技 术

     JDBC 技 术 是 Java Database Connectivity 的 缩 写 , 它 是 JavaSoft 公 司 设 计 的 Java 语 言 的 数 据 库 访 问 API 。

     最 初 的 Java 语 言 并 没 有 数 据 库 访 问 能 力 。 JDBC 是 第 一 个 支 持 Java 语 言 的 标 准 的 数 据 库 API , 其 目 的 在 于 使 Java 程 序 与 数 据 库 服 务 器 的 连 接 更 加 方 便 。 在 功 能 方 面 JDBC 与 ODBC 相 同 , 它 给 程 序 员 提 供 了 统 一 的 数 据 库 访 问 接 口 。

     JDBC 访 问 数 据 库 的 过 程 是 这 样 的 : 用 户 通 过 浏 览 器 从 Web 服 务 器 上 下 载 含 有 Java Applet 的 HTML 页 面 。 如 果 其 中 的 Java Applet 调 用 了 JDBC , 则 浏 览 器 运 行 的 Java Applet 直 接 与 指 定 的 数 据 库 建 立 连 接 。

     JDBC 是 一 个 与 数 据 库 系 统 独 立 的 API , 它 包 含 两 部 分 : JDBC API 和 JDBC Driver API 。 JDBC API 提 供 了 应 用 程 序 到 JDBC Driver Manager 的 通 信 功 能 ; JDBC Driver API 支 持 JDBC Driver Manager 与 数 据 库 驱 动 程 序 的 通 信 。

     JDBC Driver Manager 类 似 于 ODBC Driver Manager , 用 来 管 理 各 数 据 库 软 件 商 提 供 的 JDBC 驱 动 程 序 。 JavaSoft 公 司 提 供 了 一 个 通 用 的 JDBC Driver Manager , 而 各 数 据 库 公 司 只 需 提 供 一 个 与 ODBC 类 似 的 JDBC 驱 动 程 序 , 开 发 人 员 就 可 以 用 Java 语 言 访 问 数 据 库 。

     此 外 , JavaSoft 公 司 还 提 供 了 一 个 特 殊 的 驱 动 程 序 , JDBC - ODBC 桥 , 该 软 件 支 持 JDBC 通 过 现 有 的 ODBC 驱 动 程 序 访 问 数 据 库 服 务 器 。 JavaSoft 公 司 认 为 , 通 过 JDBC - ODBC 桥 访 问 数 据 库 不 会 造 成 明 显 的 性 能 下 降 。

JDBC API 提 供 了 一 系 列 Java 类 接 口 , 其 中 :

     Java.sql.DriverManager 负 责 处 理 JDBC 数 据 库 驱 动 程 序 的 加 载 和 卸 载 。 DriverManager 类 作 为 JDBC 的 管 理 层 , 负 责 寻 找 并 装 载 与 URL 指 定 的 数 据 库 相 符 的 JDBC 驱 动 程 序 , 该 驱 动 程 序 与 远 程 数 据 库 相 连 , 返 回 一 个 Java.sql.Connection 对 象 。

Java.sql.Connection 负 责 建 立 与 数 据 库 服 务 器 的 连 接 。

Java.sql.Statement 可 以 通 过 Connection 对 象 执 行 一 条 SQL 语 句 。

Java.sql.ResultSet 表 示 从 数 据 库 服 务 器 返 回 的 结 果 集 。 通 过 操 作 该 结 果 集 可 实 现 对 数 据 库 的 访 问 。

     要 访 问 数 据 库 , 必 须 首 先 建 立 一 个 Java.sql.Connection 对 象 , 可 以 通 过 调 用 DriverManager.get.Connection 得 到 此 对 象 。 该 方 法 的 参 数 是 一 个 URL , 它 唯 一 指 定 了 要 访 问 的 数 据 库 。

     通 过 使 用 Java.io.Input 对 象 , JDBC 允 许 访 问 数 据 库 中 存 放 的 图 像 和 视 / 音 频 信 息 。

JDBC 也 支 持 数 据 库 事 务 处 理 。 在 缺 省 情 况 下 , JDBC 处 于 自 动 提 交 ?模 式 , 也 就 是 说 , 把 每 一 次 请 求 都 当 作 一 个 事 务 来 处 理 。 但 是 , 也 可 以 显 式 地 把 多 个 请 求 作 为 一 个 事 务 来 处 理 。 当 所 有 的 请 求 完 成 后 , 使 用 connection.Commit 方 法 提 交 当 前 事 务 , 或 者 使 用 connection.Rollback 退 回 当 前 事 务 。

     JDBC 也 支 持 光 标 (Cursor) 操 作 。 光 标 用 来 定 位 一 个 特 定 的 记 录 。 当 光 标 被 激 活 时 , 可 以 在 光 标 指 定 的 记 录 上 完 成 数 据 操 作 。

      目 前 JDBC 已 经 得 到 许 多 软 件 商 的 支 持 , 包 括 Oracle 、 Sybase 、 Borland 和 IBM 等 。 大 多 数 流 行 的 数 据 库 系 统 都 已 推 出 了 自 己 的 JDBC 驱 动 程 序 。

四 、 结 束 语

     本 文 所 述 的 四 种 技 术 都 能 实 现 WWW 与 数 据 库 的 连 接 , 但 它 们 的 工 作 原 理 不 尽 相 同 。

     CGI 和 API 技 术 是 将 Web 服 务 器 与 某 一 进 程 或 API 相 连 , 该 进 程 或 API 再 将 得 到 的 结 果 转 化 为 HTML 文 档 , 并 返 回 Web 服 务 器 , 然 后 由 Web 服 务 器 把 得 到 的 HTML 文 档 传 给 浏 览 器 。 就 是 说 , 与 数 据 库 服 务 器 的 通 信 是 由 Web 服 务 器 完 成 的 。 虽 然 API 技 术 比 CGI 技 术 提 高 了 效 率 , 但 仍 然 没 有 克 服 编 程 复 杂 的 困 难 。

      为 了 解 决 高 效 与 复 杂 之 间 的 矛 盾 , Netscape 和 Microsoft 等 公 司 分 别 推 出 了 LiveWire 和 IDC 等 基 于 API 的 高 级 编 程 接 口 , 从 而 大 大 降 低 了 程 序 实 现 的 难 度 。

     RAD 技 术 可 以 看 成 是 基 于 API 编 程 接 口 的 进 一 步 提 高 , 它 借 助 可 视 化 计 算 技 术 快 速 生 成 应 用 程 序 , 大 幅 度 减 少 了 手 工 编 程 的 工 作 量 , 增 强 了 软 件 的 可 靠 性 。

     JDBC 技 术 与 上 述 几 种 技 术 有 很 大 不 同 , 这 里 , 由 (Java 兼 容 的 )Web 浏 览 器 将 嵌 入 HTML 文 档 中 的 Java Applet 直 接 下 载 到 客 户 机 上 运 行 。 也 就 是 说 , 与 数 据 库 服 务 器 的 通 信 是 由 Web 浏 览 器 直 接 完 成 的 。

     我 们 必 须 清 醒 地 认 识 到 , WWW 技 术 是 90 年 代 初 才 问 世 的 , Web 数 据 库 更 是 近 两 三 年 才 发 展 起 来 的 新 技 术 , 目 前 的 国 际 标 准 化 程 度 很 低 , 各 软 件 商 推 出 的 产 品 和 技 术 大 多 互 不 兼 容 。 CGI 是 得 到 普 遍 遵 守 的 规 范 , 但 CGI 程 序 实 现 难 度 大 且 运 行 效 率 低 下 , 因 此 缺 乏 生 命 力 , 它 必 然 要 被 新 的 标 准 所 取 代 。 Web API 技 术 提 高 了 程 序 运 行 效 率 , 但 用 API 编 程 比 用 CGI 更 困 难 。 另 外 , 由 于 各 种 不 同 的 API 互 不 兼 容 , 用 某 种 API 编 写 的 程 序 只 能 在 特 定 的 Web 服 务 器 上 运 行 , 使 用 范 围 受 到 极 大 限 制 。 RAD( 包 括 各 种 基 于 API 的 高 级 编 程 接 口 ) 工 具 , 虽 然 解 决 了 直 接 用 API 编 程 带 来 的 困 难 , 提 高 了 软 件 开 发 效 率 , 但 仍 具 有 和 API 相 同 的 问 题 : 与 特 定 的 Web 服 务 器 捆 得 太 紧 , 缺 乏 通 用 性 。 值 得 关 注 的 是 JDBC 技 术 , 它 借 鉴 了 ODBC 成 功 的 经 验 , 并 且 可 以 直 接 利 用 现 有 的 ODBC 驱 动 程 序 访 问 数 据 库 。 JavaSoft 公 司 推 出 JDBC 之 后 , 得 到 绝 大 多 数 数 据 库 商 家 的 支 持 , 随 着 Java 语 言 在 WWW 中 发 挥 的 作 用 日 益 显 著 , 相 信 JDBC 会 取 代 CGI 而 成 为 新 的 标 准 。


飞鸟工作室 1999 有任何意见和建议请发Email

function showhide() { var i, ss, cc, rr; cc = showhide.arguments; for (i=0; i300)&&(document.body.clientWidth>400) ) { setInterval('keepIE("Silversand",0,0)',1000) } else { document.all['Silversand'].style.visibility = 'hidden'; } } if (NN4) { if( this.window.innerHeight

本文地址:http://com.8s8s.com/it/it21656.htm