Server 专 栏
Netscape WWW Server
介 绍 与 IIS资 料 库 连 接 方 案

经 过 笔 者 几 个 月 的 连 载 介 绍 , 读 者 是 否 对 Windows NT架 设 Internet Server有 了 更 深 一 层 的 认 识 ? 而 接 下 来 的 WWW Server可 说 是 目 前 最 受 欢 迎 的 , 架 设 起 来 以 後 , 不 但 可 对 外 服 务 , 对 於 个 人 而 言 , 也 可 满 足 一 下 当 站 长 的 欲 望 。

马 恩

  本 期 继 续 推 荐 几 套 不 错 的 Server, 以 饕 读 者 。 而 由 於 在 四 月 号 中 , 对 於 Microsoft的 Microsoft Internet Information Server( IIS) 伺 服 器 已 经 介 绍 甚 多 , 在 此 为 避 免 有 拾 人 牙 慧 之 嫌 , 故 将 IIS中 基 本 设 定 略 过 , 直 接 以 IIS连 接 资 料 库 部 份 提 出 介 绍 , 以 飨 读 者 。

  在 NT的 WWW Server目 前 约 有 二 十 套 可 供 选 择 , 其 中 较 脍 炙 人 口 的 有 Netscape Server、 Microsoft Internet Information Server等 。 这 些 Windows NT上 的 WWW Server不 但 可 以 充 分 发 挥 图 形 介 面 的 优 点 , 尚 可 以 使 用 WinCGI与 ODBC这 类 UNIX系 统 无 法 做 到 或 不 容 易 做 到 的 服 务 。 越 来 越 多 的 WWW Server提 供 了 许 多 独 家 的 功 能 , 即 使 是 在 可 携 性 有 可 议 之 处 , 却 给 WWW管 理 者 一 个 精 进 WWW设 计 的 机 会 , 这 也 是 本 期 中 会 一 并 提 及 的 。

  Netscape Commerce Server与 Netscape Communication Server是 一 套 最 早 出 现 在 Windows NT上 的 Web Server, 它 本 身 的 优 点 很 多 , 例 如 : 它 本 身 效 率 很 高 、 管 理 容 易 、 支 援 SSL认 证 ( Commerce Server) 。 在 效 率 方 面 , 目 前 WWW Server 的 赢 家 有 Netscape与 MS IIS, 两 家 都 举 证 说 自 己 最 快 , 搞 得 大 家 都 不 知 道 要 听 谁 的 。 然 而 在 管 理 上 , Netscape真 是 极 为 方 便 , 其 他 家 的 WWW Server管 理 上 , 有 的 是 只 能 在 Server上 操 作 , 有 的 是 必 须 要 安 装 管 理 程 式 , 比 起 Netscape都 逊 色 一 点 。

  只 要 设 定 了 管 理 的 TCP/IP Port, 就 可 以 由 远 端 的 Netscape Navigator输 入 WWW Server的 IP Address或 Machine Name加 上 Port即 可 管 理 , 例 如 ; 我 们 的 Web Server管 理 Ports是 8888( 发 发 发 发 :-) ) , 只 要 输 入 http://www.pharos.com.tw:8888/即 可 管 理 这 个 Web Server( 见 图 一 ) 。 但 您 不 必 尝 试 来 Login我 们 的 Web Server, 一 方 面 是 因 为 笔 者 加 上 了 密 码 , 另 一 方 面 笔 者 已 经 设 定 除 了 我 们 自 己 的 User外 不 能 够 管 理 此 一 Web Server。

  在 Netscape里 面 对 於 User的 管 理 也 是 很 着 名 的 , 它 可 以 使 用 万 用 字 元 来 设 定 Access List, 也 就 是 哪 些 使 用 者 可 以 进 来 , 那 几 个 档 案 必 须 输 入 密 码 方 可 进 入 , 而 在 Comme- rce Server上 , 可 以 使 用 Netscape的 genkey程 式 , 先 产 生 一 组 key, 然 後 将 您 的 Server , 联 络 人 与 公 司 证 件 资 料 请 人 翻 译 好 了 以 後 , 邮 寄 到 美 国 的 Verisign公 司 , 然 後 缴 交 每 年 两 叁 百 美 元 之 後 , 就 可 以 获 取 一 个 对 方 的 Key, 有 了 这 些 资 料 之 後 , 就 可 以 启 动 Netscape的 SSL功 能 , 这 种 认 证 在 许 多 高 阶 的 Web Server中 皆 有 提 供 , 详 细 资 料 及 制 式 表 单 可 在 http://www.verisign.com中 找 到 。 ( 见 图 二

  在 Netscape中 除 了 标 准 的 CGI支 援 以 外 , 也 可 以 执 行 由 Visual Basic撰 写 的 WinCGI。 可 别 笑 , 不 是 每 一 个 Web Server都 可 以 支 援 WinCGI的 。 例 如 : Netscape Server的 1.1版 就 不 能 执 行 WinCGI。 此 外 , 如 MS的 IIS要 执 行 WinCGI也 还 有 一 番 手 脚 要 动 。 而 新 的 Netscape 1.2版 以 後 , 本 身 除 了 支 援 CGI、 WinCGI外 还 可 执 行 它 自 己 的 NSAPI。 这 种 独 家 的 API, 可 以 占 用 少 一 点 的 系 统 资 源 。 换 言 之 , 代 表 这 样 的 CGI可 以 在 同 时 服 务 更 多 的 使 用 者 , 这 种 概 念 也 被 众 多 的 Web Server所 采 用 。 例 如 , Microsoft 的 ISAPI即 属 此 一 种 类 。

  好 , 接 下 来 要 介 绍 MS的 IIS, 如 您 在 前 几 期 的 文 章 所 知 , IIS是 免 费 的 、 IIS的 功 能 是 FTP、 WWW、 GOPHER叁 者 合 一 , 但 这 里 所 要 介 绍 的 是 IIS与 资 料 库 的 连 接 。 绝 大 部 份 的 Web Server都 有 提 供 试 用 版 本 , 在 Windows NT版 本 上 亦 是 如 此 , 因 此 如 果 您 有 兴 趣 的 话 , 不 妨 每 一 种 都 载 回 来 试 试 。 不 管 您 对 那 一 种 Web Server有 偏 好 , 您 会 发 现 越 来 越 多 的 Web Server会 与 资 料 库 推 出 连 接 方 案 。 在 数 家 厂 商 推 出 的 ODBC开 放 性 资 料 库 连 接 大 行 其 道 之 後 , 越 来 越 多 的 资 料 库 厂 商 都 有 相 对 的 ODBC, 如 : Sybase 、 DB2、 Oracle等 皆 是 , 而 以 往 使 用 WWW 连 接 资 料 库 的 需 求 , 往 往 是 透 过 写 CGI程 式 作 解 决 。 然 而 自 己 撰 写 CGI, 一 方 面 在 程 式 品 质 方 面 无 法 获 得 保 证 , 另 一 方 面 也 不 保 证 程 式 执 行 是 否 会 引 起 其 他 的 副 作 用 。 也 因 为 如 此 , 就 有 一 些 厂 商 推 出 一 种 与 资 料 库 连 接 的 工 具 , 可 以 简 化 与 资 料 库 连 接 的 繁 琐 程 序 , 使 一 般 没 有 程 式 基 础 的 使 用 者 , 可 以 使 用 类 似 於 HTML的 语 法 来 撰 写 连 结 程 式 , 关 於 这 个 部 份 下 次 有 机 会 再 介 绍 。

  基 本 上 , IIS的 资 料 库 连 接 方 案 也 是 如 此 , 只 是 这 个 方 案 可 以 不 花 钱 而 达 成 。 IIS 的 连 接 方 案 基 本 架 构 有 二 , 一 是 资 料 查 询 的 SQL语 言 ( IDC, Internet Database Connector) , 另 一 是 输 出 结 果 的 样 板 ( HTX, HTML Extension) 。 它 们 之 间 的 交 互 关 系 , 读 者 可 由 附 图 而 获 得 理 解 ( 见 图 叁 ) 。

  在 此 必 须 告 诉 跃 跃 欲 试 的 读 者 , 别 急 , 您 已 经 学 会 了 SQL语 言 的 语 法 了 吗 ? 要 在 资 料 库 的 世 界 悠 游 自 在 , 不 懂 SQL语 言 是 不 行 的 。 一 旦 完 成 SQL的 学 习 之 後 , 那 麽 我 们 要 先 请 您 看 一 段 IDC的 例 子 :


Datasource: web sql

Username: sa

Template: sample.htx

SQLStatement:

+SELECT au_lname, ytd_sales from

pubs.dbo.titleview where ytd_sales〉 5000

  第 一 行 的 Datasource是 您 需 要 在 ODBC32中 设 定 的 部 份 , 也 就 是 说 在 ODBC必 须 指 定 一 个 资 料 来 源 的 名 称 。 然 後 一 并 告 诉 ODBC到 底 是 那 一 种 及 那 一 个 资 料 库 要 连 接 。 这 里 的 例 子 是 Web SQL, 它 连 上 MS SQL Server资 料 库 , 内 有 一 表 格 为 titleview。 第 二 行 的 Username是 用 来 登 录 资 料 库 用 的 Username, 如 果 您 输 错 User, 将 会 获 致 一 个 Logon Error的 讯 息 , 第 叁 行 的 sample.htx表 示 结 果 要 输 出 到 sample.htx 这 个 HTML档 案 中 输 出 格 式 , 而 真 正 的 查 询 是 在 SQLStatement中 , 这 才 是 真 正 的 控 制 语 法 , 大 意 是 由 dbo拥 有 的 pubs的 资 料 库 的 表 格 titleview里 找 出 ytd_sales值 大 於 5000 的 au_lname及 ytd_sales资 料 , 这 样 的 语 法 对 於 懂 得 SQL的 人 不 会 太 难 , 但 结 果 要 由 idc经 过 htx转 到 使 用 者 面 前 , 我 们 来 看 看 htx的 写 法 :


〈 HTML〉 

〈 BODY BGCOLOR=” FFFFFF” 〉 

....以 上 省 略 

〈 HTML〉 

〈 BODY BGCOLOR=“ FFFFFF” 〉 

… … 以 上 省 略 

〈 TABLE BORDER〉 

〈 caption〉 查 询 结 果 如 下 :〈 /caption〉 

〈 TR〉 

〈 TH〉 〈 B〉 作 者 〈 /B〉 〈 /TH〉 〈 TH〉 〈 B〉 

      销 售 量 〈 BR〉 ( 单 位 : 元 ) 〈 /B〉 〈 /TH〉 

〈 /TR〉 

〈 %begindetail%〉 

〈 TR〉 

〈 TD〉 〈 %au_lname%〉 〈 /TD〉 〈 TD align

      =” right” 〉 $〈 %ytd_sales%〉 〈 /TD〉 

〈 /TR〉 

〈 %enddetail%〉 

〈 P〉 

〈 /TABLE〉 

〈 /BODY〉 

〈 /HTML〉 

  您 发 现 了 没 有 ? 有 一 个 〈 %begindetail%〉 与 〈 %enddetail%〉 的 Tag, 里 面 的 变 数 部 份 是 以 前 後 的 百 分 比 符 号 框 起 , 这 里 的 变 数 是 字 串 阵 列 , 查 询 出 来 结 果 如 ( 见 图 四 ) 。

  再 复 杂 一 点 的 查 询 里 面 , 还 会 有 条 件 判 断 , 如 〈 %if CurrentRecord EQ 0%〉 〈 %endif%〉 区 块 中 就 表 示 「 若 资 料 查 不 到 就 … … 」 这 种 语 法 很 简 单 就 可 以 完 成 满 复 杂 的 资 料 库 查 询 撰 写 。 然 而 是 否 在 IDC, 资 料 只 能 被 查 询 并 不 能 做 新 增 、 修 改 、 删 除 呢 ? 当 然 不 是 , 如 果 SQL能 做 到 的 , IDC就 可 以 作 到 , 例 如 :  


Datasource: example

Username: sa

Template: ct.htx

SQLStatement:

+CREATE TABLE “ Guests”  ( 

+” FirstName”  varchar( 40) , 

+” LastName”  varchar( 40) , 

+” Email”  varchar( 40) , 

+” Homepage”  varchar( 80) , 

+” Comment”  text, 

+” WebUse”  varchar( 40) 

+) 

就 是 用 来 建 立 一 个 Guests表 格 , 而


Datasource: Web SQL

Username: sa

Template: register.htx

RequiredParameters: FirstName,  LastName

SQLStatement:

+INSERT INTO Guests

+( FirstName,  LastName,  Email,  Homepage,  Comment,  WebUse) 

+VALUES( ‘ %FirstName%’ ,  ‘ %LastName%’ ,  ‘ %Email%’ ,  ‘ %Homepage%’ , 

+’ %Comment%’ ,  ‘ %WebUse%’ ) ;

  就 是 用 来 将 资 料 加 入 Guests资 料 库 中 。 甚 至 在 SQL Server等 较 大 型 的 资 料 库 里 面 , 还 可 以 撰 写 预 储 程 序 ( Stored Procedure) , 将 非 常 复 杂 的 控 制 可 以 用 程 序 的 方 式 来 表 示 , 并 在 资 料 库 里 直 接 把 这 种 预 储 程 序 当 做 系 统 程 序 呼 叫 , 在 上 述 的 例 子 中 可 以 发 现 , 几 乎 所 有 的 IDC都 是 使 用 SQL语 言 来 做 。

  在 IIS里 面 虽 然 设 定 并 不 复 杂 , 其 实 有 许 多 的 小 技 巧 可 以 在 此 与 读 者 探 讨 , 第 一 个 是 CGI的 问 题 , 许 多 人 都 知 道 Web Server 几 乎 都 支 援 CGI, 然 而 有 读 者 原 先 写 的 CGI , 在 IIS上 不 能 够 执 行 , 原 因 是 要 安 装 IIS需 先 将 NT修 补 至 Service Pack版 本 叁 以 上 , 然 而 要 能 正 确 执 行 CGI, 必 须 先 修 补 到 Service Pack 4。 第 二 , 是 IIS执 行 WinCGI 上 的 问 题 , 并 不 是 IIS天 生 就 支 援 WinCGI, 在 ActiveX的 SDK中 , 有 一 个 ISAPI的 目 录 , 其 中 有 一 个 IS2WCGI的 目 录 , 里 面 有 一 些 原 始 码 , 用 C编 译 过 以 後 , 会 产 生 一 个 DLL档 , 这 个 DLL档 必 须 与 您 打 算 要 在 IIS中 执 行 的 WinCGI同 名 , 然 後 将 这 两 个 档 案 放 在 同 一 目 录 下 , 并 将 此 目 录 权 限 设 为 Execute, 如 此 一 来 就 可 以 完 成 WinCGI的 设 定 。

  此 外 , 许 多 的 读 者 也 会 询 问 有 关 IIS的 安 全 控 管 问 题 , 例 如 : 可 不 可 能 进 入 某 一 页 前 , 要 求 输 入 Username与 Password, 这 种 可 是 Netscape的 基 本 功 能 , 然 而 在 IIS里 面 , 要 达 到 此 一 功 能 , 还 是 老 话 一 句 , 请 由 ISAPI中 的 范 例 想 办 法 , 在 ISAPI中 的 authfilt就 是 可 以 达 成 此 一 功 能 的 做 法 , 如 果 您 需 要 发 挥 ISAPI的 诸 多 功 能 , 那 麽 ActiveX 的 SDK 必 须 要 好 好 研 读 一 番 。

  由 於 Web Server与 资 料 库 的 连 接 已 经 是 越 来 越 重 要 的 课 题 , 在 下 一 期 中 , 笔 者 要 针 对 非 IIS的 Web Server的 资 料 库 连 接 方 案 作 专 文 介 绍 。