您的位置:寻梦网首页编程乐园Java天地小龙亭之JSP实践之旅
灏忛緳浜箣JSP瀹炶返涔嬫梾
涓婚〉锛�鍏ラ棬锛�EJB锛�J2EE锛�骞冲彴锛�JSP缂栫▼锛�璇戞枃锛�宸ュ叿锛�Java锛�AppServer锛�Web锛�鏁版嵁搴�锛�XML锛�鎵嬭锛�灏忎涵

Java2瀹炵幇Applet鏁板瓧绛惧悕
浼佷笟绾ava浠嬬粛
Java涔嬫暀鎺堢瘒
Java鐧界毊涔�
JNDI鎶€鏈櫧鐨功
Servlet浠嬬粛
Servlet2.1瑙勮寖
Java鍦–/S缁撴瀯涓殑搴旂敤
Java涓眽瀛楅棶棰樺垎鏋愪笌瀵圭瓥
鍒╃敤Java瀹炵幇瑙嗛鐐规挱鏈嶅姟鍣�
Java澶氱嚎绋嬭璁�
Java鍙嶇紪璇�
java IDL鎶€鏈�
鏁版嵁搴撶紦鍐叉睜
ASP璋冪敤Servlet
Applet浠嬬粛
Applet鍜孲ervlet 4绉嶉€氳鏂规硶
Applet璋冪敤jdbc
XML+Servlet寤哄湪绾跨郴缁�
java鏁版嵁搴撴煡璇㈢殑琛ㄦ牸鏄剧ず
寮€鍙戝伐鍏风瘒
Forte for Java浠嬬粛
Jbuilder4鏂板姛鑳�
Jbuilder浠嬬粛
Jbuilder3娴嬭瘯鎶ュ憡
VAJ寮€鍙憇ervlets

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。