用VisualAge
for Java开发Servlets
杨 旭 青
** Servlets 是Java 编 程 环 境 中
一 个 非 常 有 生 命 力 的 新 鲜事 物, 本 文 描 述 了Servlets,
并 介 绍 如 何 用VisualAge for Java迅 速 开 发Servlets。Servlets
开 发 中 应 用 到 的VisualAge for Java的 关 键 技 术 是VisualAge
for Java 的 模 拟 多 种 虚 拟 机 环 境 的能 力, 以 及 代
码 增 加 编 辑 并 连 接 到 运 行 中 的 程 序 中 的 能
力。
背 景
在WWW 的 初 期, 程 序 员
们 很 快 就 意 识 到, 通 过 使 用 公 共 网关 界 面(CGI),WWW
可 以 成 为 一 个 引 人 注 目 的 应 用 开 发 平 台。 事
实 上, 一 个CGI 程 序 就 是 把 各 种 能 力 扩 展 到Web 服
务器 中 的 一 个 插 入 模 块。 然 而,CGI 的 最 初 设 计
要 求 为 每 一个 请 求 服 务 创 建 一 个 单 独 的 进
程, 从 而 增 加 了 性 能 和 资源 的 消 耗。 为 改 进CGI
的 性 能 和 可 扩 展 性,Web 服 务 器 厂 商 引 进 了 专
有 的APIs, 例 如 网 景 公 司 的NSAPI、 微 软 公 司 的ISAPI
和IBM 的GWAPI, 同 时, 网 景 公 司 还 为Navigator 引 人 了
一 个Web 浏 览 器 插 入API。 这 样 一 来,Web 客 户 机 和
服 务 器 都 可以 通 过 插 入 而 加 以 扩 展。 不 幸 的
是, 这 一 插 入 要 求 使 用专 用 的APIs, 对 于 不 同 的
操 作 系 统 版 本 也 不 同。
---- Sun 公 司 推 出 的Java 和 定
义 的Applet API 带 来 了WWW 的 第 二次 进 步,Applet API 为 开
发 者 提 供 了 一 个 扩 展Web 浏 览 器 的标 准 和 与 平
台 无 关 的 方 式。 现 在,Sun 公 司 使Java 成 为 建立N 层
企 业 级 应 用 软 件 又 推 出 了Servlet API, 为Web 服 务
器带 来 了 同 样 的 优 点。 热 心 者 可 以 通 过 访 问http://java.sun.com
了 解Servlet , 还 可 以 从 这 里 下 载 文 档 和JavaServlet
开 发 工 具 包(JSDK)。 在 下 面 的 讨 论 中, 我 们 将
会 提到JSDK 1.0.1。
运 行Servlet
---- 运 行Servlet 的 最 好 开 端
是 下 载JSDK 和 运 行 范 例, 并 在Web 服 务 器 上 配 置Servlet。
使 用 者 可 以 用ServletRunner(srun)测 试Servlet,ServletRunner
是 一 个 包 含 在JSDK 中 的 小 程 序, 是一 个 简 化 的Web
服 务 器, 与AppletViewer 相 似, 只 要Applet 一 连接 上,
它 就 能 够 成 为 一 个 简 化 的Web 浏 览 器。
---- 假 设 使 用 者 正 在Windows NT
平 台 上 工 作, 并 已 安 装 了JSDK 1.1.x 或 JSDK 1.0.1, 打
开 一 个 命 令 提 示 符, 并 转 到JSDK目 录, 例 如,E:\
JSDK 。 在 这 个 目 录 中,bin 子 目 录 中 包 含了ServletRunner,servlet
子 目 录 中 包 含 了servlet 范 例。 然 后 进入servlet 子 目
录, 键 入 下 面 命 令:
---- E:\ JSDK\ servlet >..\bin\srun-v
---- 现 在, 就 有 了 一 个 监
听8080 端 口 的Web 服 务 器,“-v” 选项 向 命 令 提 示 符
窗 口 产 生 详 细 的 输 出。 下 面, 打 开 任 意一 个Web
浏 览 器, 例 如 网 景 的Navigator, 并 打 开http://127.0.0.1:8080/servlet/HelloWorldServlet。ServletRunner
加 载了HelloWorldServlet 类, 为 它 构 造 一 个 环 境, 调
用 其init() 方法, 然 后 调 用 它 的service() 方 法,service()
方 法 有 一 个 请求 参 数 和 响 应 参 数。HelloWorldServlet
对 象 简 单 地 给 响 应 对象 写 一 个HTML 主 页, 该 响
应 对 象 被 返 回 到Web 浏 览 器 并 显示。 在 第 一 次 服
务 请 求 之 后, 该servlet 保 持 激 活 状 态, 并处 于 待
命 状 态, 可 以 处 理 进 一 步 的 请 求。servlet 的 构 造
必须 能 够 处 理 多 个 并 发 服 务 请 求, 因 为 每 一
请 求 都 是 从 自己 的 线 程 开 始 的。 当ServletRunner 终
止 时, 它 调 用servlet的destroy() 方 法。
---- 在Servlet 生 命 周 期 的 最
后 阶 段, 使 用 者 必 须 停 止 并 重新 启 动ServletRunner(
或Web 服 务 器), 以 得 到 一 个 更 新 的servlet 类 文
件。 在 开 发 过 程 中, 使 用 者 会 经 常 改 变servlet代
码, 所 以 使 用ServletRunner 可 能 会 很 单 调 乏 味, 特
别 是 在servlet 开 始 运 行 了 一 段 时 间 以 后, 不 得
不 调 试 一 个 问 题的 时 候。 幸 运 的 是, 来 自IBM 的VisualAge
for Java 提 供 了 一 个效 率 更 高 的 开 发Servlet 软 件 的
方 式。
---- 要 停 止ServletRunner, 在 命
令 提 示 符 窗 口 中 键 入Ctrl-C 即可。
使 用VisualAge for Java
---- VisualAge for Java 有 两 个 关
键 技 术, 使 开 发servlet 非 常方 便: 一 个 是 多 种 虚
拟 机 环 境 模 拟, 另 一 个 是 代 码 增 加编 辑 并 连
接 到 运 行 中 的 程 序。
---- JSDK 包 含 了ServletRunner 源 代
码(srun.c), 如 果 仔 细 考 察一 下, 就 会 看 到ServletRunner
只 是 简 单 地 运行sun.servlet.http.HttpServer 类。 由 于ServletRunner
是 一 个Java 程序, 可 以 在VisualAge for Java 中 把 它 当 作
一 个 模 拟 虚 拟 机 环境 来 运 行。 启 动VisualAge for Java,
并 创 建 一 个 叫 做JSDK 的 新项 目。 下 面, 解 压 缩E:\JSDK\lib\classes.zip
文 件, 输 出 到 一 个temp 目 录( 或 简 单 地 拷 贝 到classes.jar),
并 把 类 文 件( 或jar 文 件) 输 入 到JSDK 项 目 下。 这
时 会 产 生 几 个 问 题, 因 为classes.zip 文 件 丢 失 了
某 些 用 于Netscape Web 服 务 器 支 持 的类。 删 除sun.servlet.netscape
软 件 包 来 清 除 这 些 问 题, 选 择sun.servlet.http.HttpServer
类 并 运 行 它( 提 供-v 参 数 来 把 详 细结 果 输 出 到
控 制 台 窗 口)。 现 在, 开 发 环 境 就 是 一 个Web服
务 器 ! 下 一 步, 对 于 范 例sevlets, 把 这 些 源 代 码
从E:\JSDK\servlrts 目 录 输 入 到JSDK 项 目, 在Workbench 窗 口
中 的 项目 制 表 符 中 扩 展HelloWorldServlets 类, 并 选 择doGetO
方 法。 在源 窗 格 中, 在 该 行 的 起 始 处 放 入 一 个
插 入 点, 内 容 如 下:out.printin(Hello World); 插 入 一 个
断 点, 在Web 浏 览 器 中 重新 载 入HelloWorldServlets URL。
将 命 令 改 成:out.print(“Hello VisualAge”); 然 后, 存
储 这 一 变 更。VisualAge for Java 仅 仅 编辑 这 个 修 改 的
类 方 法, 并 将 其 连 接 到 运 行 程 序 中。 其 重要 之
处 在 于: 认 识 到 增 加 编 辑 只 是 事 情 的 一 半,
真 正 的效 率 在 于 不 必 重 新 启 动 正 在 调 试 的 程
序, 也 不 必 重 新 创建 引 起 问 题 的 程 序 执 行 状
态, 正 是 这 种 程 序 执 行 状 态 产生 了 这 些 问 题,
而 使 用 者 正 在 设 法 处 理。
---- 通 过 几 行 程 序 代 码,
检 测 任 何 感 兴 趣 的 变 量, 单 击Resume 按 钮 来 完 成
服 务 请 求, 修 改 后 的HTML 页 将 在Web 浏 览器 中 出
现。
---- 使 用VisualAge for Java, 可 以
修 改 运 行 中 的servlet, 因 此没 有 必 要 重 复 性 地 停
止 和 启 动Web 服 务 器。 此 外, 当 服 务器 运 行 时,
使 用 者 仍 会 拥 有 所 有 希 望 的 开 发 环 境。
结 论
---- Servlet 是Web 应 用 开 发 中
的 一 个 重 要 进 步。VisualAge forJava 通 过ServletRunner 对 开
发Servlet、 增 加 编 辑 和 连 接 到 运行 中 的 程 序 有 很
好 的 支 持。 将 来,IBM 还 会 通 过 将Web 连 接技 术 扩
展 到Smalltalk 和C++ 对Java 的 连 接, 进 一 步 来 加 强 对Servlet
的 支 持。 在IBM 软 件 技 术 的 帮 助 下, 使 用 者 将 能
够从HTML JavaBean 中 使 用VisualAge for Java Composition Editor, 进
而可 视 化 地 创 建Servlets。
|