在现今的不断发展的软件业市场,用户强烈要求客户机应用程序不但能运行在台式机环境,还能运行在因特网。
用户希望他们从基于 Web 的应用程序获得与从台式机获得的相同的功能和支持,而且最好是用瘦客户机接口打包。
目前,最通用的解决方案是开发两个独立的 Java 应用程序:一个作为台式机应用程序执行,另一个模仿台式机应用程序的多数功能,
但是通过 Web 访问。这对开发者是个负担,开发者要写两个独立的在不同的执行环境执行相同的功能的应用程序,
然而对软件公司也是个财政负担,软件公司被迫为两个独立的应用程序提供支持。
为缓解该问题,Sun Microsystems 引进了 Java Web Start,它是个使 Java 应用程序可以从台式机或 Web 页面启动的客户机端技术。
这消除了为 Web 应用程序开发 Java 支持的需要,而且还提供了一个有效方式来升级、维护和管理任何通用的 Web 服务器都支持的客户端的 Java 应用程序。
什么是 Java Web Start?
Java Web Start 是一个软件技术,它包含了 applet 的可移植性、Servlet 和 JavaServer Pages (JSP)的可维护性以及象 XML 和 HTML 这样的标记语言的简易性。
它是基于 Java 的应用程序,允许从标准的 Web 服务器启动、部署和更新功能完全的 Java 2 客户机应用程序。
在第一次启动 Java Web Start 时,用户可以从 Web 下载新的客户机应用程序;
之后这些应用程序可以通过 Web 页面的链接或(Windows 中的)桌面图标或“开始”菜单初始化。
应用程序在 Java Web Start 下快速初始化,被高速缓存在客户机,并且可以远程的离线启动。
另外,因为 Java Web Start 是从 Java 2 技术建立起来的,所以它继承了 Java 平台的完整的安全性体系结构。
由于 Java Web Start 自身是一个 Java 应用程序,所以该软件是平台独立的,并且支持 Java 2 平台的任何客户机系统都支持该软件。
当客户机应用程序启动时,Java Web Start 自动执行更新,在从原来的高速缓存(倘若存在高速缓存)装入应用程序的同时,从 Web 下载最新的代码。
Java Web Start 还提供了一个 Java 应用程序管理器(Java Application Manager)实用程序,
既提供了多种选项,如清除下载的应用程序的高速缓存、指定多种 JRE 的使用、设置 HTTP 代理,还允许最终用户组织他们的 Java 应用程序。
Java Web Start 对 Java 插件
Java Web Start 和 Java 插件的一个共同作用是:允许 Java 程序从任何地方、在任何平台安全运行。
两种 Java 技术都提供了可以启动和执行 Java 程序的“沙箱(sandbox)”安全环境,还具有高速缓存应用程序和指定使用的 JRE 的能力。
Java Web Start 和 Java 插件的根本不同是 Java 插件限于在 Web 浏览器环境中运行的 Java applet。
Java 插件严重的依赖于 Web 浏览器的 JRE,并且如果没有浏览器就不能运行。
另一方面,Java Web Start 可以在 Web 页面单击链接或是单击 Java 应用程序管理器来启动 Java 应用程序。
在 Windows 操作系统中,用户可以从开始菜单或是只要双击桌面图标来启动应用程序。
如果浏览器窗口被关闭,从 Web 浏览器启动的客户机应用程序不会受到影响。
尽管 Java Web Start 确实支持 Java applet,而且确实包含内置的 Appletviewer,但这个技术的最初目的是启动和部署 Java 客户机应用程序。
某些约束,如 applet 的策略文件不受支持。
用户观点的 Java Web Start
Java Web Start 不仅允许开发者开发可从 Web 页面启动和执行的应用程序(不只是 applet),
还强调了无需任何用户交互就可以为现存的客户机代码提供透明更新的部署方案。
为帮助您理解这个过程、帮助您决定是否为与 Java Web Start 的兼容性而开发自己的应用程序,我们将从用户的观点来看这个产品。
我将从两个基本的用户场景(安装 Java Web Start 和从使用 Java Web Start 的 Web 下载和启动应用程序)的基本解释开始。
首次安装 Java Web Start
Java 插件无需用户在客户机安装任何的应用程序,与 Java 插件不同,Java Web Start 必须要安装在每台用于从 Web 来启动 Java 应用程序的客户机。
当用户试图用 Java Web Start 启动一个基于 Web 的应用程序时,Web 浏览器将启动 Java Web Start 从而开始下载适当的文件。
如果 Java Web Start 安装在本地机的话,那么需要的应用程序将正常的启动和进行。另一方面,如果 Java Web Start 还没安装,用户将被提示要下载该程序。
一旦用户同意下载 Java Web Start 并且已经下载了该文件,用户就必须运行程序来安装 Java Web Start,如图 1 所示。
在安装过程中,Java Web Start 安装程序将判断在客户机上是否安装了 Java 2 环境。如果未安装,将出现一个安装对话框,如图 2 所示。
一旦装好了 Java Web Start,就必须关闭所有的打开的 Web 浏览器。
新的 MIME 标记(带有 jnlp 扩展名)是为 Web 浏览器定义的,用于 Web 浏览器启动自身(Web 服务器)和 Java Web Start 之间的联系。
(JNLP 是 Java Network Launching Protocol 的首字母缩略字。JNLP 文件确定哪些 JAR 文件和资源有助于客户端的 Java 应用程序。)
一旦 Web 浏览器被关闭并重新启动,用户可以再次单击相同的链接来启动所要的应用程序。
Web 浏览器然后将与 Java Web Start 联系,并且应用程序将开始启动过程。
“Developer's Guide for Java Web Start” 包含能够查出本地是否安装了 Java Web Start 的 JavaScript 和 Visual Basic 脚本。
用 Java Web Start 启动应用程序
当用户首次单击一个链接来启动一个客户端的 Java 应用程序时,发生下面的过程:
在整个安装和启动过程中,Java Web Start 与 Java Web Start 应用程序管理器一起提供了一个外观和感觉一致的界面,同时还向用户提供了反馈。图 3 表示了当 Java Web Start 首次试图启动一个客户机 Java 应用程序时出现的窗口。
Java Web Start 把一个应用程序下载到了本地机之后,客户机程序就被执行了。
将来,当程序再次从 Java Web Start 启动时,Java Web Start 将试图判定客户机是否有应用程序的最新版本。
在此过程中,用户将可以看到一个与图 4 所示的相似的窗口。
从用户的观点来看,该窗口提供了该 Java 应用程序是在启动过程还是在更新过程的可视化反馈。
另外,进度条和文本反馈不仅通知用户每个过程所需的时间,还让用户可以了解更新或启动什么时候将完成。
这也许是该产品的最有用的特性之一,它可以确保在应用程序的启动过程的每一步都通知了用户正在发生什么。
图形用户界面(GUI)
应用程序管理器的 GUI (图形用户界面)提供了一个简单的却合理的界面,该界面允许用户在启动应用程序时可以指定多种的选项。
每次启动应用程序管理器时,出现一个闪屏,如图 5 所示。
一旦闪屏消失,应用程序管理器的主窗口就显示出来,如图 6 所示。
在 Applications 框中,可以看到和启动所有的从 Java Web Start 启动的应用程序。
在下面的框中,提供了关于选中的 Java 应用程序的附加信息(在图 6 中,即为 Draw 4),
如供应商、可以获得关于该应用程序的更多信息的主页以及程序的描述。
这条信息是直接从该应用程序的 JNLP 文件(稍后有更多关于 JNLP 的介绍)派生的。
在 File Preferences,有让用户调整和校准的多种设置。尽管大多数设置已经由 Java Web Start 自动配置了,
但仍然允许用户覆盖不同的设置,如代理设置,如下面的图 7 所示。
用户还可以指定当启动应用程序时使用 JRE 的什么版本,如图 8 所示。
本质上,应用程序管理器的目的在于为管理所有的遵照 Java Web Start 指导方针和策略的应用程序提供了一个统一的实用程序。
另外,应用程序管理器允许有经验的用户配置一些应用程序设置。
这样免除了一些开发者将在其它方面需要做的工作,比如写脚本或批处理文件来启动或配置应用程序。
要注意应用程序管理器仅对为 Java 2 平台编写的而且与 Java Web Start 兼容的应用程序有用,注意到这一点是很重要的。实用程序不能查出驻留在本地机的其它 Java 应用程序。
要考虑的问题
当选择是否为与 Java Web Start 兼容而开发应用程序时,明智的做法是对用户体验做全面考虑。
为 Java Web Start 做开发
从开发的观点,您应该能象为常规的客户端应用程序一样能为与 Java Web Start 的兼容性编写和设计代码。您应该相对的不用担心更新现存的客户机代码所需的打包问题和变通技术。下面是您在开发和部署 Java Web Start 的客户端 Java 应用程序时需要依照的一些简单的规则:
getResource
方法。请参阅下面的使用getResource
方法示例的清单 1。 清单 1. 使用 ClassLoader 对象从 JAR 文件装入资源
//Obtain the current classloader ClassLoader classLoader = this.getClass().getClassLoader(); //Load the company logo image Image companyLogo = classLoader.getResource("images/companyLogo.gif");
更新应用程序代码
从 Web 服务器首次下载一个应用程序时,应用程序的所有的相关的 JAR 文件被下载到了本地机。Java Web Start 将自动决定该把这些文件下载到何处,这是因为缺省的安全性协议(如本地磁盘存取)在起作用。下面将进一步讨论安全性。
从应用程序开发和维护的观点来看,Java Web Start 使更新应用程序代码很容易。因为下载的应用程序的所有文件必须包含在客户机的 JAR 文件集中,您只需更新存储在 Web 服务器的 JAR 文件集。Java Web Start 将根据下面将讨论的版本编号方案来决定当应用程序最初被启动时需要下载和更新客户机的哪些文件和资源。每次用户启动一个应用程序时,Java Web Start 将与包含 JAR 文件集的 Web 服务器连接,并将下载适当的文件。注意客户机可以下载的资源仅为 JAR 文件、图像和 JNLP 文件。
Java Web Start 使用 HTTP 请求来从 Web 服务器获得资源文件,并且允许客户机端 Java 应用程序从代理服务器或防火墙后执行。最初,Java Web Start 将既使用通用的代理自动配置脚本也试着检测本地机的缺省 Web 浏览器中定义的代理设置。如果需要附加信息,可用应用程序管理器使用 Preferences 部分来指定端口和代理。
Java Web Start 的核心:JNLP
为使 Java 应用程序能用 Java Web Start 执行,您必须为应用程序创建一个 Java 网络语言协议(Java Networking Language Protocol,JNLP)文件。JNLP 是一个为应用程序提供基本的元素和描述的 XML 文件。JNLP 符合规范号为 JSR 000056(请参阅参考资料)的 Java Community Process (JCP)。
JNLP 文件的目的如下:
JNLP 文件的一个示例
JNLP 文件以一种与 Web 浏览器相似的方式(仅用 URL 而不是特定的文件名)来获得并定位文件。清单 2 表示了 JNLP 文件的一个示例。
<?xml version="1.0" encoding="UTF-8"?> <jnlp codebase=http://www.companySite.com/javaApp> <href="clientApp.jnlp"> <information> <title>This is my company's Java client application</title> <vendor>Company name</vendor> <icon href="companyLogo.gif"/> <homepage ref="reference/tips.html"> <offline-allowed/> </information> <resources> <j2se version=1.3/> <jar href="companySong.jar" part="music" download="lazy"/> </resources> <resources os="Windows"/> <nativelib="windowIconsForWindowOS.jar" part="windowIcons" download="eager"/> <application-desc main-class="com.company.ui.Client"/> <security> <all-permissions/> </security> </jnlp> |
清单 2 的注释
接下来对 JNLP 文件的示例的评述也许在您创建自己的文件时对您有所帮助:
jnlp codebase
属性用于在 JNLP 文件中指定所有的相关 URL。 href
属性设置(要求的)是为了让应用程序并入 Java Web Start 应用程序管理器。 homepage ref
属性是专门用于指向 Web URL 从而用户可以去提供了关于应用程序的更多的信息的 Web 页面。最有趣的 information 标记是offline-allowed
属性;该属性决定了客户机 Java 应用程序是否能离线启动。当离线运行客户机 Java 应用程序时,Java Web Start 将继续判定来自 Web 服务器的最新的文件;在多数情况下,这个方案将引起快速的超时(因为位置被指定要离线启动),并且应用程序从本地高速缓存启动。security
属性。缺省的,任何从 Java Web Start 客户机启动的 Java 应用程序在一个安全的、受限制的环境执行,该环境中不允许进行本地文件访问、与其它计算机的网络连接等等。然而,对于要对客户机和网络可以完全访问的特性丰富的客户机来说,all-permissions
值是用于给予客户机完全访问的权限的。为具有对本地机的完全访问,Java 应用程序所使用和装入的所有 JAR 文件和资源必须被数字签名。安全性将在下面将进一步讨论。JNLP 和 WAR 文件
为与应用程序相关的 JNLP 文件和 JAR 文件提供更加方便有效的打包方案,Java Web Start 使 Web 压缩文件(WAR)的分发成为可能。WAR 文件是一个目录结构,它包含了一个与 JNLP 文件和 JAR 文件一起打包的 servlet,从而使整个包能够方便的在 Web 服务器上部署。该 servlet 自身被打包在 jnlp-servlet.jar 文件里,包里还有JnlpDownloadServlet
类作为主要的执行 Java 类,这个类将负责不同的任务,如:
为了从 Java Web Start 启动应用程序,把应用程序和 WAR 文件打包在一起并非必需。然而,WAR 文件的加入可以改善存储在 Web 服务器的文件的管理和升级。WAR 文件的主题对于本文的范围来讲实在是太冗长了。请参阅参考资料来获得与附加信息的联系。
Java Web Start 中的版本变化
到目前为止,我们已经讨论了想要实施 Java Web Start 的开发者和用户所需的整体的部署和管理技术。在我们深入前,我要概括一下到目前为止我所讲到的部署的步骤。
从技术角度来说,这个总结可能会引发问题:Java Web Startf 是如何决定哪些文件是有必要更新的呢?答案很简单:JNLP 文件。一个有版本标识的唯一的 URL与每个 JNLP 文件中定义的资源相关联。如清单 3 所示。
<jar href=http://www.companySite.com/javaApp/imageFiles.jar version="1.1+"> |
当启动了一个应用程序时,Java Web Start 检查 JNLP 文件并创建一个有 URL 和版本标识的 HTTP GET
请求。如果没有 version 属性,那么 Java Web Start 就只是创建一个 JAR 文件的 HTTPGET
请求。Java Web Start 检查 Web 服务器的响应状态代码和 MIME 类型来决定此 JAR 文件是否有更新的版本。
JNLP 文件还允许使用 JARDiff
实用程序来递增的更新 JAR 文件。 JARDiff
实用程序能只下载 JAR 文件中的特定文件(不是整个 JAR 文件本身),这样使下载更快。请参阅参考资料来获得关于决定 JNLP 文件配置的更多信息。
安全性
也许在决定是否为了与 Java Web Start 兼容而开发应用程序时,需要考虑的最重要的问题就是安全性。Java Web Start 允许客户端 Java 应用程序访问各种本地机资源,如文件访问、剪贴板访问等。源自 Java 2 平台,该产品继承了该平台的安全性体系结构。如前面提到的,在 JNLP 文件中定义的 security 属性决定了当应用程序通过 Java Web Start 启动时所能有的安全性级别。缺省的,使用受限环境,为应用程序授权对网络和本地机的有限的访问。如同使用 applet 沙箱(sandbox),这样可以保证恶意的应用程序不能造成任何破坏。
Java Web Start 的安全性的另一重要元素是数字签名的使用。当启动或更新一个应用程序时,它的 JAR 文件被下载到客户机。Java Web Start 用那些文件中的数字编码来判定在对文件初始签名之后,是否有 JAR 文件已经被修改或改变。如果有不一致的或是文件尚未被签名,应用程序就不能从 Java Web Start 启动。正确签名的应用程序可以访问本地机。
用户授权安全性
当运行要对本地机无限制访问的应用程序时,用户最初将看到一个对话框,该对话框说明了应用程序的出处或供应商,并且允许用户给应用程序授予额外的权限。此外,当应用程序要求使用本地机的资源并且还没有被签名的 JAR 文件时,Java Web Start 将允许用户通过一个 Security Advisory 对话框显式的授予应用程序访问权限。例如,如果客户机 Java 应用程序需要能把信息粘贴到 Windows 操作系统剪贴板工具,将出现一个与图 9 相似的对话框。
当应用程序试图访问客户机的本地资源(如文件系统)时,将出现另外的对话框窗口,如图 10 所示。
用户可以在以下方面授予应用程序对本地机的访问权限:
JNLP API 库中的很多的类允许开发者在不可靠的环境使用系统的资源,由用户来负责决定操作是否是允许的。
结论
Java Web Start 提供一个创造性的解决方案来开发和部署客户机端的 Java 应用程序。呈现给用户启动、更新和管理 Java 应用程序的很多种的选项。Java 开发者获得了设计软件的自由,无须过多的关注代码的修订、更新和分布。尽管这是个新技术,但 Java Web Start 是定义工业标准的一个尝试。偕同已被证明的 Java 2 安全性体系结构中的基础,Java Web Start 有潜力为从 Web 或桌面启动和部署的 Java 应用程序建立一个通用的、一致的协议。
j-webstart.zip download
http://www.ibm.com/developerworks/apps/download/index.jsp?contentid=53150&filename=j-webstart.zip&method=ftp&locale=zh_CN