摘 要: 若 想 实 现Web 上 分 布 式 客 户 机/ 服 务 器 模 式 的 应 用 程 序,可 以 选 择 多 种 不 同 的 技 术。 但 是, 对 于 必 须 服 务 于 大 量 用 户 的应 用, 我 们 认 为 应 该 首 选CORBA, 因 为 它 具 有 可 扩 展 性 和 业 界 广泛 的 支 持。 由于CORBA 的 强 健 性 可 以 提 高Java 编 程 语 言 的 性 能, 利 用 已 有 的 基于 标 准 的 技 术,Java 开 发 者 可 以 编 写 出 功 能 强 大 的Web 应 用 程 序。 在 这 篇 文 章 里, 我 们 首 先 简 单 介 绍 一 下CORBA, 然 后 作 为 该 技术 的 实 例, 我 们将 着 手 编 写 一 个N 层 客 户 机/ 服 务 器 应 用 程 序。 另 外, 在 附 文 中, 我 们 对 几 种 分 布 式 对 象 技 术 作 了 一 个 比 较, 它 们 分 别 是CORBA、RMI 和DCOM。
利 用Html 表 和 通 用 网 关 接 口(Common Gateway Interface), 用 户 可 以 对Web 网 点 上 的 服 务 器 脚 本 进 行 交 互 式 的 访 问。 许 多 网 点 上 使 用这 种 技 术 提 示 用 户 输 入 用 户 名 和 密 码。 这 些 东 西 传 入 服 务 器脚 本 之 后, 用 于验 证 该 用 户 是 否 可 以 访 问 网 点 中 的 某 一 部 分 内 容。 这 一 过 程用 到 了HTTP, 而 它 是 一 种 无 状 态(stateless) 的 协 议。 每 次 下 载 一个 页 面, 客 户 机 就 与 服 务 器 完 全 脱 离, 服 务 器 方 无 从 得 知 客 户机 的 信 息, 更无 法 知 道 脱 离 后 的 客 户 机 正 在 进 行 的 动 作。 这 样, 哪 怕 是 在 成功 的 登 录 到 某 一 网 点 之 后, 客 户 程 序 每 查 询 一 个 页 面, 仍 需将 用 户 名 和 密 码 传 向 服 务 器 方 进 行 重 复 的 认 证。 换 句 话 说, 在你 的 客 户 应 用程 序(Web 浏 览 器) 和 服 务 器 应 用 程 序 之 间, 不 存 在 局 部 变 量、方 法 调 用 或 是 对 象。
经 过 数 十 年 的 努 力, 软 件 开 发 者 们 几 乎 可 以 成 功 地 将 代 码 以对 象 的 形 式 加 以 封 装。 但 是, 上 面 提 到 的 现 象, 无 疑 表 明 了 我们 正 在 倒 退, 因 为 那 是 无 状 态 的、 批 处 理 的 计 算 模 式。
当 然,CGI 技 术 并 非 一 无 是 处。Web 给 我 们 带 来 了 革 命 性 的 优 势,那 就 是 基 于 标 准 的 开 放 协 议 和 与 平 台 无 关 的 独 立 性。 尽 管 成千 上 万 的Web 网 点 使 用HTTP 和CGI 来 获 得 用 户 信 息、 在 服 务 器 上 运行 一 段 脚 本、 甚至 还 可 能 向 用 户 返 回 信 息, 但 是 从 传 统 的 的 观 点 看 来, 这 些 网点 并 不 能 算 是 真 正 的“ 应 用 程 序”。 除 此 之 外, 由 于 新 技 术 的应 用(HTTP 和CGI), 所 有 这 些 网 点 的 代 码 必 须 要 全 部 重 写。 想 要对 已 有 的Web 软件 资 源 加 以 利 用, 或 是 编 写 真 正 功 能 强 大 的 应 用 程 序, 使Internet/Intranet 成 为 通 信 主 干, 所 使 用 的 技 术 必 须 具 有 以 下 特性:
??持 现 有 的C、C + + 和COBOL 代 码
??持Java, 以 建 立 具 有 可 移 值 性、 平 台 独 立 性 的 面 向 对 象 的 应用 程 序??业 中 立 性, 只 有 这 样, 应 用 程 序 才 易 于 维 护,且 不 会 被时 间
淘 汰。
??扩 充 性, 能 够 支 持 大 {"C++, Java", "Java, Smalltalk, Ada95,
C++", "Java, C++",
"Java, C++", "Java, C++"},
{"http://www.eXPersoft.com", "http://www.iona.com",
"http://www.visigenic.com",
"http://www.software.ibm.com/ad/cb",
"http://www.sun.com/solaris/neo/solaris_neo/index.html"}};
ORBQuery(String name) {
super(name);
}
public java.lang.String GetName(int index)
{
String Name;
Name = ORBVendors[index][0];
return Name;
}
public java.lang.String GetVendor(int index)
{
String Vendor;
Vendor = ORBVendors[index][1];
return Vendor;
}
public java.lang.String GetOS(int index)
{
String OS;
OS = ORBVendors[index][2];
return OS;
}
public java.lang.String GetLanguages(int index)
{
String Languages;
Languages = ORBVendors[index][3];
return Languages;
}
public java.lang.String GetURL(int index)
{
String URL;
URL = ORBVendors[index][4];
return URL;
}
}
至 此, 我 们 已 经 写 好 了 所 有 服 务 器 方 必 需 的 代 码, 下 一 步 的 工作 是 创 建 客 户 小 应 用, 初 始 化 客 户ORB, 进 而 击 活 并 调 用 刚 刚生 成 的 服 务 器 对 象。