使用 Java Web Start 部署 SWT 应用程序

使用 Java Web Start 部署 SWT 应用程序 <nobr><table cellspacing="0" cellpadding="0"><tbody><tr valign="top"> <td align="right"></td> <td width="46"><form action="https://www-130.ibm.com/developerworks/secure/email-it.jsp"> <input type="hidden" name="body" value="在过去几个月里,标准窗口小部件工具箱(Standard Widget Toolkit,SWT)不断地取得进展,并汲取越来越多Java 开发人员的集体智慧。在 SWT应用程序开发过程中的某一阶段 — 通常是在基本原型运作之后 — 开发人员开始关注部署过程。与传统的 Java应用程序不同,SWT 应用程序需要在应用程序运行之前装入某些特定于操作系统的库。虽然正在进行的这些库的部署和维护似乎是件头痛的事,但是请放心,有一种方案可以解决这种问题,那就是 Sun 的 Java Web Start。SWT 与 Java Web Start 的结合给开发人员提供了功能强大的工具,用它们可以部署非常漂亮的客户机端 Java 应用程序。"><input type="hidden" name="subject" value="使用 Java Web Start 部署 SWT 应用程序"><input type="hidden" name="lang" value="cn"><input type="image" src="http://www-128.ibm.com/developerworks/cn/i/icon-email.gif" border="0" name="email"> </form></td> </tr></tbody></table></nobr>
内容:
<!--Standard links for every dw-article-->
SWT 概述
Java Web Start 概述
文件查看器应用程序
环境需求
安装该文件查看器应用程序
安全性和代码签名
创建自签名的证书
构建文件查看器应用程序
运行文件查看器应用程序
部署和测试文件查看器应用程序
实现 JNLP 文件
结束语
参考资料
关于作者
对本文的评价
相关内容:
Java Web Start
订阅:
developerWorks 时事通讯
开发非常漂亮的客户机端的 Java 应用程序

级别: 初级

<name></name>Jeff Gunther
总经理, Intalgent Technologies
2003 年 9 月 09 日

在过去几个月里,标准窗口小部件工具箱(Standard Widget Toolkit,SWT)不断地取得进展,并汲取越来越多Java 开发人员的集体智慧。在 SWT应用程序开发过程中的某一阶段 — 通常是在基本原型运作之后 — 开发人员开始关注部署过程。与传统的 Java应用程序不同,SWT 应用程序需要在应用程序运行之前装入某些特定于操作系统的库。虽然正在进行的这些库的部署和维护似乎是件头痛的事,但是请放心,有一种方案可以解决这种问题,那就是 Sun 的 Java Web Start。SWT 与 Java Web Start 的结合给开发人员提供了功能强大的工具,用它们可以部署非常漂亮的客户机端 Java 应用程序。

SWT 概述
现在把标准窗口小部件工具箱(SWT)引入开发社区是最恰当不过了。虽然到目前为止,Sun 的 Java 基础类(Java Foundation Classes,JFC)一直能让客户机端应用程序的开发人员感到满意,但仍然有许多开发人员出于各种原因不愿使用 SWT。对于许多开发人员和架构设计师来说,能够开发象传统本机桌面应用程序那样以可视化方式显示、操作和执行的客户机端 Java 应用程序的梦想似乎还很遥远。

然而到了 2001 年年中,Eclipse 项目突然出现在这幅开发“视野”之中。最初,人们认为 Eclipse 项目只是 Java 的开放源码集成开发环境(IDE);但是该项目涉及的范围更广。在开发 Eclipse 期间,SWT 工具箱诞生了。SWT 工具箱类似于 JFC 和其“堂兄弟”抽象窗口工具箱(Abstract Window Toolkit,AWT),它向开发人员提供了一组窗口小部件。然而,SWT 与其它工具箱之间的主要区别在于 SWT 使用操作系统的底层 GUI 窗口小部件。这种方法向 Java 开发人员提供了跨平台的 API 来实现“外观”象本机桌面应用程序的解决方案。

Java Web Start 概述
如果没有这些合适的工具,不论用什么语言,传统桌面应用程序的部署和维护对于开发人员都可能是主要的头疼问题。即使是最有效的支持部门,一想到发布新版本的软件时必须检查更新每台工作站,也不能不让他们感到头痛。为了方便 Java 开发人员的分发和维护需求,Sun Microsystems 几年前引入了 Java Web Start。这一技术很大程度上简化了最终用户工作站上 Java 应用程序的部署、维护和更新。

将 Web 浏览器用作启动应用程序的最初工具,Java Web Start 是一个在本地安装的帮助应用程序,它包含在 Sun 的 Java 运行时环境中。每当用户访问 Java 网络启动协议(Java Network Launching Protocol,JNLP)文件时,都自动将该应用程序下载到用户的工作站,然后该应用程序开始运行。整个过程几乎不需要与最终用户进行交互,这大大简化了分发应用程序的工作。请参考位于本文末尾的 参考资料以获取更多关于 Java Web Start 的信息。

文件查看器应用程序
在我们了解如何用 Java Web Start 部署 SWT 应用程序的实现细节之前,让我们先看一下将要部署的应用程序。本文所包含的这个应用程序是由 Eclipse 项目提供的一个示例应用程序。正如图 1 所示,该应用程序是一个简单的跨平台的文件查看器,它使用户能够浏览自己硬盘上的文件和文件夹。

图 1. 运行在 Windows XP 上的文件查看器

为演示 SWT 和 Java Web Start 的跨平台能力,已经将所包含的这个独立的示例应用程序打包,以便在 Microsoft Windows 和 Red Hat Linux 上运行。

环境需求
在本文末尾可以下载这篇文档中所使用的代码。为了用 Java Web Start 完整地测试这个文件查看器应用程序,您的环境必须符合以下最低要求(请参阅 参考资料中的下载链接):

  • Microsoft Windows XP 或 Red Hat Linux 8 操作系统
  • 安装了 Java 2 SDK 标准版 1.4 或更高版本
  • 安装了 Apache Ant 1.5.3 或更高版本
  • 安装了 Jakarta Tomcat 4.1.24 或更高版本

虽然一直留心使 Ant 构建脚本可以跨平台使用,但是我们只在 Microsoft Windows XP 和 Red Hat Linux 8 操作系统上测试和验证了文件查看器应用程序。此外,这里假定 Tomcat 运行在您本地工作站上,并且运行在端口 8080 上。让我们从安装、构建和运行该示例应用程序开始。

安装该文件查看器应用程序
要安装文件查看器应用程序,请完成以下步骤:

  1. 通过 参考资料中的链接,下载源代码软件包。
  2. fileviewer.zip 文件解压缩至临时目录。

安全性和代码签名
与 AWT 和 JFC 不同,SWT 与操作系统的本机窗口环境紧密集成在一起。SWT 使用系统库来管理自己的与平台无关的 API 和底层操作系统之间的集成。缺省情况下,运行在 Java Web Start 下的应用程序运行在受限的沙箱内。这个环境控制着对资源(譬如工作站的文件系统、系统库和其它资源)的访问。由于 SWT 需要在缺省的沙箱之外运行来装入系统库,因此用 Java Web Start 部署的所有 JAR 文件必须经过数字签名。因为我们不准备将该应用程序部署给广大的用户,所以创建了一个自签名的测试证书。

如果您准备将 SWT 应用程序放入生产环境,那么我们强烈建议您从认证中心(如 Thawte 或 VeriSign)获取一个证书。

创建自签名的证书
要创建自签名的测试证书,请完成以下步骤:

  1. 在将源代码解压缩的目录中执行以下命令: keytool -genkey -keystore keystore -alias myself

    系统会提示您提供关于新密钥的细节,包括密码、姓名以及位置等。为了使用已提供的 Ant 构建过程,请确保将密码设置为“password”。如果不想使用硬编码密码“password”,那么请编辑 build.xml 文件中的“sign-jars”目标文件。签名每个 JAR 文件的实际过程在 Ant 构建期间完成。

  2. 为验证是否正确创建了 keystore,在将源代码解压缩的目录中执行以下命令: keytool -list-keystore keystore

    输出结果将显示类似于下面的内容:

    
    Keystore type: jks
    Keystore provider: SUN
           
    Your keystore contains 1 entry
           
    myself, Jun 3, 2003, keyEntry,
    Certificate fingerprint (MD5):B8:C4:48:ED:68:E8:FE:47:83:78:F5:14:4E:28:5C:80

构建文件查看器应用程序
要构建文件查看器应用程序,请完成以下步骤:

  1. 为了清理环境,在将源代码解压缩的目录中执行下面这个命令: ant clean
  2. 执行下面这条命令来启动构建过程: ant

如果您的环境满足需求并且配置正确,那么您应当会看到类似于下面这样的内容:



Buildfile: build.xml

init:

compile-common:

compile-module:
    [echo] Compiling ...

package-common:

package-swtlib:

sign-jars:
     [echo] Signing JARS...
  [signjar] Signing Jar : D:\FileViewer\dist\swt-lib.jar
  [signjar] Signing Jar : D:\FileViewer\dist\fileviewer.jar
     [copy] Copying 1 file to D:\FileViewer\dist
  [signjar] Signing Jar : D:\FileViewer\dist\swt-win32.jar

package-web:
      [war] Building war: D:\FileViewer\dist\fileviewer.war

default:

BUILD SUCCESSFUL
Total time: 6 seconds

运行文件查看器应用程序
在用 Java Web Start 部署文件查看器应用程序之前,让我们尝试在本地执行该应用程序。为了启动该应用程序,在将源代码解压缩的目录中执行下面这条命令: ant run

执行这个 Ant 脚本之后,应该会出现文件查看器应用程序。图 2 显示了在 Red Hat Linux 8 下运行的该应用程序。

图 2. 在 Red Hat Linux 8 上运行的文件查看器

部署和测试文件查看器应用程序
要将该应用程序部署到 Tomcat 4,请完成以下步骤:

  1. dist 目录中的 fileviewer.war 文件复制到 Tomcat 4 下的 webapps 目录中。
  2. 执行该脚本以启动 Tomcat 4。
  3. 打开 Web 浏览器,并输入下面这个 URL,然后单击“Launch Application”链接: http://localhost:8080/fileviewer/index.html

    单击该链接之后,应该会看到下面这幅图像(图 3),此时应用程序的 JAR 文件将会下载至工作站:

    图 3. 文件查看器

  4. 在第一次下载该应用程序时,会看到下面这个对话框,如图 4 所示:

    图 4. 安全性警告

    单击“Start”以启动文件查看器应用程序。

实现 JNLP 文件
既然我们已经了解了如何用 Sun 的 Java Web Start 构建、分发和部署 SWT 应用程序,那么就让我们重新研究一下如何实现 JNLP 文件。通过 Java Community Process(JCP)管理 Java 网络启动协议规范。由于本文的目的在于介绍用 Java Web Start 来部署 SWT 应用程序的一些具体细节,因此并没有提供太多这方面的背景信息。关于更多有关 Java Web Start 方面的信息和背景知识,请参考 参考资料中列出的 Steve Kim 的文章“Java Web Start”。

清单 1说明了在 SWT 应用程序的 JNLP 文件中所使用的各种标记。

清单 1. index.jnlp 文件


1    <?xmlversion="1.0" encoding="utf-8"?>
2       <jnlp spec="1.0+"codebase="http://localhost:8080/fileviewer"href="index.jnlp">
3           <information>
4                   <title>File Viewer</title>
5                   <vendor>IBM developerWorks</vendor>
6                   <homepage href="index.html"/>
7                   <description>File Viewer</description>
8                   <description kind="short">FileViewer</description>
9           </information>
10          <security>
11                   <all-permissions/>
12           </security>
13           <resources>
14                   <j2se version="1.4"/>
15                   <jar href="fileviewer.jar"/>
16                   <nativelib href="swt-lib.jar"/>
17           </resources>
18           <resources os="Windows"> 
19                   <jar href="swt-win32.jar"/>
20           </resources>
21           <resources os="Linux"> 
22                   <jar href="swt-linux.jar"/>
23           </resources>
24           <application-descmain-class="org.eclipse.swt.examples.fileviewer.FileViewer"/>
25   </jnlp>

让我们仔细检查一下这个 XML 文件中的一些重要部分:

  1. 因为 SWT 应用程序在执行时需要装入系统库,所以它需要能够完全访问用户的工作站。第 10 行到第 12 行显示了应用程序如何请求对客户机环境的完全访问权。为了授予 Java Web Start 这个级别的访问权限,应用程序的所有 JAR 文件都必须经过数字签名。
  2. 正如第 16 行所示,我们需要声明一个 nativelib 标记来告诉 Java Web Start 这个 JAR 文件包含本机库。在我们的示例文件查看器应用程序中,这个 JAR 文件包含一个 Windows DLL 和一系列用于 Linux 的 SO 文件。
  3. 第 18 行到第 23 行为每个操作系统装入相应的 SWT JAR 文件。“resources”标记使您能够保护资源,从而只有特定的操作系统和体系结构能够使用该资源。 os 属性指定了应当考虑使用资源元素的操作系统。这个值基于最终用户的 os.name Java 系统特性。虽然在这个示例中没有用到这个值,但也可以使用 arch 属性进一步限制对 Java 库的访问。 arch 属性基于最终用户的 os.arch Java 系统特性。

更多有关 JNLP 文件的各种元素和格式的信息,请参考下面的 参考资料

结束语
SWT 用户界面工具箱和 Java Web Start 的结合向开发人员提供了一套很棒的工具,可以用这套工具来创建和部署高度交互的客户机端 Java 应用程序。这个示例文件查看器应用程序提供了一个构建和打包框架,您可以用它来创建自己的独立 SWT 应用程序,这些应用程序是通过 Java Web Start 分发的。

参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.

  • 下载本文所附带的 源代码,在整篇文章中,用这个源代码向读者做演示。

  • 从 Sun Microsystems 下载 Java 2 SDK 标准版 1.4.1

  • 从 Apache Software Foundation 下载 Ant 1.5.3

  • 从 Jakarta 项目下载 Tomcat 4.1.24

  • 关于 Java Web Start 的概述以及有关开发和分发客户机端 Java 应用程序的信息,请阅读 Steve Kim 的“ Java Web Start”( developerworks,2001 年 9 月)。

  • 可以在 Sun 的网站上获取更多有关 Java 网络启动协议和 API 规范及参考实现的信息。

  • Eclipse 项目提供了一个 SWT 工具箱,本文的源代码中用到这个工具箱。

  • Eclipse 技术概述介绍了 Eclipse 平台的核心组件。

  • Eclipse 项目发布了一系列 SWT 示例,如果想了解更多有关创建独立 SWT 应用程序的信息,那么这些示例是很好的着入点。

关于作者
Jeff Gunther 是 Intalgent Technologies的总经理和创始人,这家公司是新兴的软件产品和解决方案供应商,其产品和解决方案采用 Java 2 企业版和 Lotus Notes/Domino 平台。Jeff 从早期的“Mosaic”(最早的 Internet Web 浏览器)出现之前的时代就投身于因特网行业。他拥有软件生命周期所有方面的专业经验,包括 Java/J2EE、DHTML、XML/XSLT、数据库设计和手持设备方面的特殊软件开发专业经验。可以通过 [email protected]与他联系。


你可能感兴趣的:(java,Web,linux,网络应用,企业应用)