开发非常漂亮的客户机端的 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 上。让我们从安装、构建和运行该示例应用程序开始。
安装该文件查看器应用程序 要安装文件查看器应用程序,请完成以下步骤:
- 通过 参考资料中的链接,下载源代码软件包。
- 将
fileviewer.zip 文件解压缩至临时目录。
安全性和代码签名 与 AWT 和 JFC 不同,SWT 与操作系统的本机窗口环境紧密集成在一起。SWT 使用系统库来管理自己的与平台无关的 API 和底层操作系统之间的集成。缺省情况下,运行在 Java Web Start 下的应用程序运行在受限的沙箱内。这个环境控制着对资源(譬如工作站的文件系统、系统库和其它资源)的访问。由于 SWT 需要在缺省的沙箱之外运行来装入系统库,因此用 Java Web Start 部署的所有 JAR 文件必须经过数字签名。因为我们不准备将该应用程序部署给广大的用户,所以创建了一个自签名的测试证书。
如果您准备将 SWT 应用程序放入生产环境,那么我们强烈建议您从认证中心(如 Thawte 或 VeriSign)获取一个证书。
创建自签名的证书 要创建自签名的测试证书,请完成以下步骤:
- 在将源代码解压缩的目录中执行以下命令:
keytool -genkey -keystore keystore -alias myself 。 系统会提示您提供关于新密钥的细节,包括密码、姓名以及位置等。为了使用已提供的 Ant 构建过程,请确保将密码设置为“password”。如果不想使用硬编码密码“password”,那么请编辑 build.xml 文件中的“sign-jars”目标文件。签名每个 JAR 文件的实际过程在 Ant 构建期间完成。
- 为验证是否正确创建了 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
|
构建文件查看器应用程序 要构建文件查看器应用程序,请完成以下步骤:
- 为了清理环境,在将源代码解压缩的目录中执行下面这个命令:
ant clean
- 执行下面这条命令来启动构建过程:
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,请完成以下步骤:
- 将
dist 目录中的 fileviewer.war 文件复制到 Tomcat 4 下的 webapps 目录中。
- 执行该脚本以启动 Tomcat 4。
- 打开 Web 浏览器,并输入下面这个 URL,然后单击“Launch Application”链接:
http://localhost:8080/fileviewer/index.html 单击该链接之后,应该会看到下面这幅图像(图 3),此时应用程序的 JAR 文件将会下载至工作站:
图 3. 文件查看器
- 在第一次下载该应用程序时,会看到下面这个对话框,如图 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 文件中的一些重要部分:
- 因为 SWT 应用程序在执行时需要装入系统库,所以它需要能够完全访问用户的工作站。第 10 行到第 12 行显示了应用程序如何请求对客户机环境的完全访问权。为了授予 Java Web Start 这个级别的访问权限,应用程序的所有 JAR 文件都必须经过数字签名。
- 正如第 16 行所示,我们需要声明一个
nativelib 标记来告诉 Java Web Start 这个 JAR 文件包含本机库。在我们的示例文件查看器应用程序中,这个 JAR 文件包含一个 Windows DLL 和一系列用于 Linux 的 SO 文件。
- 第 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 分发的。
参考资料
关于作者 Jeff Gunther 是 Intalgent Technologies的总经理和创始人,这家公司是新兴的软件产品和解决方案供应商,其产品和解决方案采用 Java 2 企业版和 Lotus Notes/Domino 平台。Jeff 从早期的“Mosaic”(最早的 Internet Web 浏览器)出现之前的时代就投身于因特网行业。他拥有软件生命周期所有方面的专业经验,包括 Java/J2EE、DHTML、XML/XSLT、数据库设计和手持设备方面的特殊软件开发专业经验。可以通过 jeff.gunther@intalgent.com与他联系。 |
|
相关推荐
Java Web Start,也称为Java Network Launch ...通过本文的详细介绍,读者应该能够理解Java Web Start的工作原理,掌握创建和部署Java Web Start应用程序的方法,并能够应用这些知识来简化Java应用的部署和更新。
Java Web Start 是一种由 Sun Microsystems 开发的技术,用于在客户端机器上方便地部署、启动和更新基于 Java 的应用程序。这项技术结合了 Applet 的可移植性、Servlet 和 JSP 的可维护性,以及类似 XML 和 HTML 的...
Java Web Start(简称 JWS)是 Sun Microsystems(现 Oracle)为解决 Java 应用程序部署和更新问题而开发的一项技术。它是 JSR-56 规范的一部分,旨在提供一种简便的方法来发布和维护在客户端 JVM 上运行的 Java ...
对于初学者来说,理解Java Web Start的关键在于学习如何编写JNLP文件,配置应用程序的资源,以及如何在服务器上部署。"Java Web Start入门基础教程.pdf"这个文档应该会详细讲解这些内容,包括JNLP文件的结构、如何...
Java Web Start 签名是Java应用程序在Web环境中运行时的一种安全机制,它允许用户从不可信的网络源下载并执行代码,同时确保代码的完整性和来源可信。这个技术主要应用于Java Applets和Java Web Start应用程序,通过...
总的来说,Java Web Start曾经是Java应用程序部署的一种便捷方式,但由于技术和安全环境的变化,现在已经不再推荐使用。开发者和用户转向了其他替代方案,如HTML5、WebAssembly和现代的云应用模型,这些都提供了类似...
### 部署Java Web Start应用程序到JBoss应用服务器 #### 概述 本文将详细介绍如何在JBoss应用服务器上部署Java Web Start应用程序,并利用Java Web Start技术实现客户端图形用户界面(GUI)的自动更新。Java Web ...
Java Web Start(JWS)是SUN公司推出的一项技术,用于通过Web来部署和发布Java应用程序,无论是Application还是Applet。这项技术在初次运行时会下载程序,之后的版本更新和维护都由JWS自动处理,极大地简化了客户端...
Java Web Start(JWS)是Java平台上的一种技术,用于便捷地部署和运行基于网络的Java应用程序。它允许用户通过点击Web浏览器中的链接来启动和更新应用程序,而无需手动下载和安装。在本篇博客“用java web start来...
Java Web Start提供了一种浏览器独立架构,用于将基于Java技术的应用程序部署到客户端桌面。通过Java Web Start,用户只需点击网页中的链接即可启动Java应用程序。该链接指向一个Java Network Launch Protocol (JNLP...
Java Web Start 是一种Java技术的部署方案,它使得Java应用程序可以通过Web进行无缝分发和运行。用户只需单击即可启动应用程序,而无需繁琐的下载和安装步骤,而且保证始终使用的是最新版本。这一技术消除了传统软件...
Java Web Start(JWS)是SUN公司推出的一项技术,用于通过Web来部署和发布Java应用程序。这项技术在Java 1.4版本中被引入,它会在安装时自动安装,但在1.4之后的版本中,你需要手动找到安装路径下的`javaws.exe`来...
maven-webstart 使用 Maven 构建 Java Webstart 应用程序的模板。 此存储库包含多个示例项目,用于使用 Maven 构建 Java Webstart 应用程序。 不同的配置: 使用 JnlpDownloadServlet 使用自定义的 Jsp 作为 jnlp 而...
一种可能的方法是利用Java Web Start或JavaFX,它们允许Java应用程序在Web浏览器中运行,但这些技术本身并不直接支持SWT。另一种可能的方式是利用像GWT(Google Web Toolkit)这样的框架,它可以将Java代码编译为...
- **跨平台**:Java Web Start基于Java平台,因此可以实现跨平台运行,无论用户使用何种操作系统,只要安装了Java运行环境,就能运行基于Java Web Start的应用程序。 - **离线运行**:一旦应用程序被下载到本地...