Java Web Start

    技术2024-01-20  98

    在当今软件行业不断增长的市场中,用户越来越要求客户端应用程序不仅可以从桌面环境运行,而且可以从Internet运行。 用户希望从基于Web的应用程序获得与从台式机获得的功能和支持相同的功能和支持,最好是与瘦客户端接口集成在一起。 当前,最常见的解决方案是开发两个单独的Java应用程序:一个作为桌面应用程序执行,另一个模拟桌面应用程序的许多功能,但是可以通过Web访问。 这给开发人员带来了负担,他们需要编写在不同的执行环境上执行相同功能的两个单独的应用程序,但是这也给软件公司带来了财务负担,后者不得不为两个单独的应用程序提供支持。 为了缓解此问题,Sun Microsystems引入了Java Web Start,这是一种客户端技术,使Java应用程序可以从桌面或从网页启动。 这消除了开发对Web应用程序的Java支持的需要,并且还提供了一种在任何通用Web服务器支持下升级,维护和管理客户端Java应用程序的有效方法。

    什么是Java Web Start?

    Java Web Start是一种软件技术,包括小程序的可移植性,Servlet和JavaServer Pages(JSP)技术的可维护性,以及XML和HTML等标记语言的简单性。 它是基于Java的应用程序,允许从标准Web服务器启动,部署和更新功能齐全的Java 2客户端应用程序。 首次启动Java Web Start时,用户可以从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 Application Manager实用程序,使最终用户可以组织其Java应用程序,并提供各种选项,例如清除下载的应用程序的缓存,指定多个JRE的使用以及设置HTTP代理。

    Java Web Start与Java插件

    Java Web Start和Java插件具有一个共同的目的:允许Java程序在任何平台,任何地方安全地运行。 两种Java技术都提供了一个“沙盒”安全环境,可以从中启动和执行Java程序,并且具有缓存应用程序和指定要使用的JRE的能力。 Java Web Start和Java插件之间的根本区别是Java插件仅限于在Web浏览器的上下文中运行Java小程序。 Java插件在很大程度上依赖于Web浏览器的JRE,并且如果不运行浏览器就无法执行。 另一方面,Java Web Start可以通过单击网页中的链接或单击Java Application Manager中的链接来启动Java应用程序。 在Windows操作系统环境中,用户可以从“开始”菜单或通过双击桌面图标来启动应用程序。 如果关闭浏览器窗口,则从Web浏览器启动的客户端应用程序不会受到影响。

    尽管Java Web Start确实支持Java小程序并且包含内置的Appletviewer,但是该技术的主要目的是启动和部署Java客户端应用程序。 不支持某些限制,例如applet的策略文件。

    从用户角度看Java Web Start

    Java Web Start不仅允许开发人员开发可以从网页启动和执行的应用程序(不仅是applet),而且还强调了一种部署方案,该方案可以对现有客户端代码进行透明更新,而无需任何用户交互。 为了帮助您理解该过程,并帮助您决定是否开发与Java Web Start兼容的应用程序,我们将从用户的角度来看待该产品。 我将从两个基本用户方案的基本说明开始:安装Java Web Start以及使用Java Web Start从Web下载和启动应用程序。

    首次安装Java Web Start

    与Java Plug-In(不需要用户在客户端计算机上安装任何应用程序)不同,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所示。

    图1.安装Java Web Start

    在安装过程中,Java Web Start安装程序将确定客户端计算机上是否安装了Java 2环境。 否则,将出现一个设置对话框,如图2所示。

    图2. Java Web Start搜索Java 2环境

    安装Java Web Start后,必须关闭所有打开的Web浏览器。 为Web浏览器定义了扩展名为jnlp的新MIME标记,以便Web浏览器启动自身,Web服务器和Java Web Start之间的联系。 (JNLP是Java网络启动协议的首字母缩写。JNLP文件确定哪些JAR文件和资源对客户端Java应用程序有所贡献。)一旦关闭并重新启动了Web浏览器,用户可以再次单击使用相同的链接启动所需的应用程序。 然后,Web浏览器将与Java Web Start联系,并且该应用程序将开始启动过程。

    “ Java Web Start开发人员指南”(请参阅参考资料 )包含JavaScript和Visual Basic脚本,它们可以检测本地计算机上是否安装了Java Web Start。

    使用Java Web Start启动应用程序

    当用户第一次单击链接以启动客户端Java应用程序时,将发生以下过​​程:

    指示Web浏览器运行Java Web Start。 Java Web Start从启动初始屏幕开始。 然后,Java Web Start连接到指定的Web服务器,并确定是否已为所需的Java应用程序下载了任何文件。 适当的文件将下载到本地计算机。 Java Web Start将运行下载的应用程序。

    Java Web Start与Java Web Start Application Manager一起提供了一致的外观界面,并在整个安装和启动过程中向用户提供了反馈。 图3显示了Java Web Start首次尝试启动客户端Java应用程序时出现的窗口。

    图3. Java Web Start下载客户端JAR文件

    Java Web Start将应用程序下载到本地计算机后,将执行客户端程序。 将来,当再次从Java Web Start启动程序时,Java Web Start将尝试确定客户端是否具有该应用程序的最新版本。 在此过程中,将向用户显示一个类似于图4所示的窗口。

    图4. Java Web Start检查应用程序的版本

    从用户的角度来看,这些窗口提供了视觉反馈,表明客户端Java应用程序处于启动过程中还是处于更新过程中。 此外,进度条和文本反馈不仅通知用户两个过程将花费多少时间,而且还使用户感觉到更新或启动何时完成。 这也许是产品最有用的功能之一,可确保在应用程序启动过程的每个步骤中都向用户通知发生了什么。

    图形用户界面

    应用程序管理器的GUI(图形用户界面)提供了一个简单而合理的界面,允许用户在启动应用程序时指定各种选项。 每次启动Application Manager时,都会出现一个初始屏幕,如图5所示。

    图5. Application Manager启动屏幕

    启动画面消失后,将显示Application Manager的主窗口,如图6所示。

    图6.应用程序管理器的主窗口

    在“应用程序”框中,可以查看和启动从Java Web Start启动的所有应用程序。 在下面的框中,提供了有关所选Java应用程序的其他信息(即,图6中的Draw 4),例如供应商,可以在其中找到有关该应用程序的更多信息的主页以及其描述。程序。 此信息直接来自应用程序的JNLP文件(稍后会在JNLP上提供更多信息)。

    在“文件首选项”下,有多种设置可供用户调整和校准。 尽管这些设置大多数都是由Java Web Start自动配置的,但是允许用户覆盖各种设置,例如代理设置,如图7所示。

    图7. Application Manager的Preferences选项卡

    用户还可以指定启动应用程序时使用的JRE版本,如图8所示。

    图8.指定JRE

    本质上,应用程序管理器的目的是提供一个合并实用程序,用于管理遵守Java Web Start准则和策略的所有应用程序。 另外,应用程序管理器允许更多有经验的用户配置一些应用程序设置。 这减轻了开发人员原本需要做的一些工作,例如编写脚本或bat文件来启动或配置应用程序。 重要的是要注意,Application Manager仅对为Java 2平台编写的应用程序有用,并且与Java Web Start兼容。 该实用程序无法检测到本地计算机上的其他Java应用程序。

    要考虑的问题

    在选择是否开发与Java Web Start兼容的应用程序时,考虑所有用户体验是明智的。

    必须在从Web或从Java应用程序管理器启动客户端Java应用程序的每台机器上都安装Java Web Start。 因此,尽管可以从网页启动客户端Java应用程序,但是如果没有先在本地计算机上安装Java Web Start,就无法启动应用程序本身。 因此,Web浏览器只是提供了一个方便的链接来启动程序-仅此而已。 Java Web Start仅对正确包装并符合Java Web Start准则的应用程序有用。 此外,需要Web服务器,并且必须正确配置Web服务器以解释所有 JNLP和MIME标记。 因此,除非从Web下载或启动的所有客户端Java应用程序都满足这些要求,否则不能从Java Web Start启动和管理每个客户端Java应用程序。 用户之间的Java Web Start和Java Plug-In的应用程序和小程序之间的差异可能会有些混乱。 用户可能会或可能不会理解,为什么Java Web Start可以管理和启动客户端Java应用程序列表,但却无法与使用Java插件运行的Java Applet有任何连接,尽管事实上可以从一个程序启动一个程序。网页浏览器。 同样,对于只需要为一个客户端Java应用程序下载Java Web Start的用户而言,Java Web Start应用程序管理器的功能可能被认为很麻烦,并且安装过程对于执行一个客户端而言可能被认为是“麻烦”的。 Java应用程序。 Java Web Start仅可用于为Java 2平台编写的客户端Java应用程序。 Java Web Start当前可以在Windows 95/98 / NT / 2000,Linux和Solaris操作系统上执行。

    为Java Web Start开发

    从开发的角度来看,您应该能够像正常的客户端Java应用程序一样编写和设计与Java Web Start兼容的代码。 您应该相对不必担心打包问题和更新现有客户端代码所需的回旋技术。 以下是在为Java Web Start开发和部署客户端Java应用程序时需要遵循的一些简单规则:

    应用程序可以正常编写为Java 2平台的独立应用程序。 如果您的应用程序需要访问本地系统,则必须对JAR文件中的每个条目进行签名。 您的应用程序的所有文件必须存储在一组JAR文件中,包括诸如图像和声音文件之类的资源。 任何对加载资源(例如图像)的访问都必须将getResource方法与类加载器一起使用。 有关使用getResource方法的示例,请参见下面的清单1。 //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浏览器中定义的代理设置以及使用常见的代理自动配置脚本。 如果需要其他信息,可以使用“首选项”部分使用“应用程序管理器”来指定端口和代理。

    Java Web Start的核心:JNLP

    要使Java应用程序能够使用Java Web Start执行,必须为该应用程序创建Java网络语言协议(JNLP)文件。 JNLP是一个XML文件,为您的应用程序提供基本元素和描述。 该JNLP符合Java社区进程(JCP),在规范号JSR 000056(请参阅相关的主题 )。

    JNLP文件的用途如下:

    指定要从Web服务器下载的JAR文件 提供其他可能的包装要求 指定系统属性 允许任何必要的运行时参数 指定要使用的Java 2平台版本

    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文件的以下观察可能会帮助您创建自己的文件:

    在第一行中,您可以看到文件的编码为UTF-8字符编码。 因此,在编辑JNLP文件时,应使用JDK随附的native2ascii工具转换最终文件,以确保文件正确编码。 jnlp codebase属性用于指定JNLP文件中使用的所有相对URL。 设置(必需) href属性是为了将应用程序合并到Java Web Start应用程序管理器中。 信息标签(例如标题,供应商等)用于从Java Web Start Application Manager提供有关该应用程序的其他信息。 homepage ref属性专门用于指向Web URL,以便用户可以转到提供有关该应用程序的更多信息的网页。 最有趣的信息标签是offline-allowed属性; 此属性确定是否可以脱机启动客户端Java应用程序。 脱机运行客户端Java应用程序时,Java Web Start将继续确定Web服务器中的最新文件。 在大多数情况下,这种情况导致快速超时(因为该位置被指定为脱机启动),并且该应用程序是从本地缓存启动的。 资源标签允许JNLP文件指定应用程序使用的JAR文件以及如何下载JAR文件。 要么是热切地,要么是懒洋洋的。 当客户端有大量文件要下载但客户端不需要执行所有文件时,此功能非常有用。 默认情况下,大多数资源会急切地下载,在这种情况下,JAR文件和资源是在启动应用程序之前下载的。 仅当Java虚拟机(JVM)触发要从应用程序加载的资源或文件时,才下载延迟下载的资源。 延迟下载资源的一个示例是客户端的帮助文件。 直到用户实际从客户端请求帮助文件之前,这些文件都不会被下载,从而可以更快地启动和执行客户端。 但是,一旦用户请求了帮助文件,便会在该请求期间下载适当的JAR文件,并通过一个窗口通知用户大约的下载时间。 JNLP文件中最后一个有趣的标记是security属性。 默认情况下,从Java Web Start启动的任何客户端Java应用程序都在安全,受限制的环境中执行,在该环境中,不允许进行本地文件访问,与其他计算机的网络连接等。 但是,对于确实希望拥有对客户端计算机和网络的完全访问权限的功能丰富的客户端,则使用all-permissions值为客户端提供完全访问权限。 要完全访问本地计算机,必须对Java应用程序使用和加载的所有JAR文件和资源进行数字签名。 安全性将在下面进一步讨论。

    JNLP和WAR文件

    为了为与应用程序相关联的JNLP文件和JAR文件提供更便捷和有效的打包方案,Java Web Start启用了Web存档(WAR)文件的分发。 WAR文件是一个目录结构,其中包含一个Servlet,该Servlet与JNLP文件和JAR文件打包在一起,因此可以轻松地将整个捆绑软件部署在Web服务器上。 该servlet本身打包在jnlp-servlet.jar文件中,类JnlpDownloadServlet充当主要的执行Java类,它将负责各种任务,例如:

    生成JARDiff文件 基于WAR文件中每个文件或目录的版本控制 支持JNLP文件中定义的下载协议 自动将URL安装到JNLP文件中,从而无需开发人员对URL进行硬编码

    不必将应用程序与WAR文件捆绑在一起才能由Java Web Start启动。 但是,添加WAR文件可以同时改进管理和升级到Web服务器上存储的文件。 WAR文件的主题对于本文而言太长了。 请参阅相关主题的链接到更多信息。

    Java Web Start中的版本控制

    到目前为止,我们已经讨论了要实现Java Web Start的开发人员和用户所需的总体部署和管理技术。 在继续之前,我将总结到目前为止介绍的部署步骤。

    应用程序使用的文件存储在JAR文件中。 必须创建一个JNLP来通知Java Web Start应用程序使用了哪些JAR文件,如何下载所需的文件等等。 将标准Web服务器配置为接受Java Web Start可以理解的MIME类型。 JAR文件放置在Web服务器上。 要求用户下载并安装Java Web Start(仅一次)。 用户第一次运行该应用程序; 下载JAR文件,然后执行。 用户可以再次运行该应用程序,从Java Web Start应用程序管理器或Web页面启动它。 Java Web Start将下载需要更新的所有文件,然后启动该应用程序。

    从技术角度来看,此摘要可能会引发一个问题:Java Web Start如何确定需要更新哪些文件? 答案很简单:JNLP文件。 带有版本ID的唯一URL与JNLP文件中定义的每个资源相关联,如清单3所示。

    <jar href=http://www.companySite.com/javaApp/imageFiles.jar version="1.1+">

    启动应用程序时,Java Web Start将检查JNLP文件并创建具有URL和版本ID的HTTP GET请求。 如果未指定版本属性,则Java Web Start将仅创建JAR文件的HTTP GET请求。 Java Web Start检查Web服务器的响应状态代码和MIME类型,以确定JAR文件是否具有较新的版本。

    JNLP文件还允许使用JARDiff实用程序以增量方式更新JAR文件。 JARDiff实用程序只能下载JAR文件中的特定文件(而不能下载整个JAR文件本身),因此可以加快下载速度。 请参阅相关主题 ,以了解更多关于确定JNLP文件的配置。

    安全

    在决定是否开发与Java Web Start兼容性的应用程序时要考虑的最重要问题是安全性。 Java Web Start允许客户端Java应用程序访问各种本地计算机资源,例如文件访问,剪贴板访问等。 但是,该产品继承自Java 2平台,因此继承了该平台的安全性体系结构。 如前所述,JNLP文件中定义的安全属性确定了通过Java Web Start启动应用程序时可能具有的安全级别。 默认情况下,使用受限环境,从而授予应用程序对网络和本地计算机的受限访问权限。 与小程序沙箱一样,这可确保恶意应用程序不会造成任何伤害。

    Java Web Start安全性的另一个关键要素是数字代码签名的使用。 启动或更新应用程序时,其JAR文件将下载到客户端计算机。 Java Web Start使用这些文件中的数字代码来确定自文件初始签名以来是否已更改或修改了任何JAR文件。 如果存在不一致或未对文件进行签名,则不会从Java Web Start启动该应用程序。 已正确签名的应用程序可以访问本地计算机。

    用户授予安全性

    当运行请求对本地计算机无限制访问的应用程序时,最初会向用户显示一个对话框,该对话框说明应用程序或供应商的来源,并允许用户向该应用程序授予其他特权。 此外,当应用程序需要使用本地计算机的资源并且没有签名的JAR文件时,Java Web Start将允许用户通过“安全咨询”对话框显式授予应用程序访问权限。 例如,如果客户端Java应用程序需要能够将信息粘贴到Windows OS剪贴板工具中,则会出现一个类似于图9所示的对话框。

    图9.应用程序尝试访问剪贴板的“安全建议”对话框

    当应用程序尝试访问客户端计算机的本地资源(例如文件系统)时,将出现其他对话框窗口,如图10所示。

    图10.应用程序尝试访问文件系统的“安全建议”对话框

    用户可以在以下区域向应用程序授予对本地计算机的访问权限:

    将应用程序的当前状态存储在本地计算机上 查看本地文件的内容 将文件保存到本地计算机 打开文件到本地计算机 读取/写入本地计算机上的随机访问文件 从本地机器打印

    JNLP API库中的各种类使开发人员可以在不受信任的环境中使用系统的资源,并赋予用户确定是否应允许操作的责任。

    结论

    Java Web Start为开发和部署客户端Java应用程序提供了创造性的解决方案。 向用户提供了用于启动,更新和管理Java应用程序的各种选项。 Java开发人员可以自由地设计软件,而不必担心代码修复,更新和分发的过程。 尽管这项技术是新技术,但Java Web Start试图定义一个行业标准。 凭借久经考验的Java 2安全性体系结构的基础,Java Web Start可以建立通用,一致的协议,以从Web和桌面启动和部署Java应用程序。


    翻译自: https://www.ibm.com/developerworks/java/library/j-webstart/index.html

    Processed: 0.013, SQL: 9