Java Web Start - 流行程度

30

我最近使用了一个Java Web Start应用程序。我从正在查看的页面中嵌入的jnlp链接启动了它。该应用程序被下载、启动并且运行良好。它可以访问我的本地文件系统,并在重新启动后记住我的偏好设置。

我想知道的是,为什么Java Web Start应用程序不是Web上复杂应用程序的更受欢迎的交付格式?为什么开发人员经常花费大量时间和精力在HTML/JavaScript中复制桌面功能,而使用Java和Java Web Start可以更轻松地交付桌面应用程序的功能呢?

我知道,在某些企业环境中,例如银行,它们是向客户交付复杂的交易应用程序的相对流行的方式,但它们为什么不在整个Web中普及呢?

(为了讨论的方便,假设:下载源是“可信的”,应用程序是“已签名”的(即没有安全问题),下载速度快(加载时间快)且开发人员了解Java(与他们熟悉的html/js/php等语言一样多))。


4
我喜欢这个想法,即签名应用程序没有安全问题。 - Tom Hawtin - tackline
8个回答

15

我认为原因不在于应用程序的安全性或启动时间。在找到根本原因之前,让我们先了解一下背后的情况。

Java控制面板具有设置,允许用户使用默认浏览器的代理设置或覆盖它们。换句话说,基础设施团队能够自定义Windows或OS安装映像,预安装带有企业代理设置的JVM。所以我认为这根本不是问题。

Java Web Start实际上会缓存所有具有可定制设置的应用程序在Java控制面板中。一旦应用程序被缓存,该应用程序就像其他应用程序一样“安装”了。虽然第一次执行可能会很慢,但由于JVM的智能内存分配技术,第二次将会很快。因此,启动时间可能是一个问题,但现在很多网站(甚至是企业内部)都已经迁移到门户网站。门户网站通常包含许多未使用的开发库,因为门户本身无法预测在特定页面上构建和部署哪些Portlet。因此,下载单个门户页面可能会消耗高达MB,并且需要超过5秒才能完成一个页面;这只是一个页面,缓存可以提高30%,但仍然需要每次下载许多HTML / JavaScript / CSS组件。因此,我相信Java Web Start在这里是一个优势。

Java Web Start只要服务器副本没有升级,就不会再次下载缓存。因此,例如使用SmartClient(类似于JWS)完成的项目管理软件如MS Project,客户端和服务器之间的信息交换将纯粹是数据,而没有像浏览器的完整页面刷新那样的演示。即使借助Ajax的帮助,也不能完全消除完整页面下载。此外,许多公司仍然认为Ajax不成熟且不安全。这就是为什么Ajax在开发人员圈子中是热门话题,但在企业软件领域内却不是。考虑到这一点,JWS应用程序绝对具有更多优势,例如JWS应用程序在沙盒中部署和执行、签名以及拥有更加交互式的GUI。
其他优点包括更快的开发速度(易于调试代码和性能)、响应迅速的用户界面(不需要Comet服务器提供PUSH功能)以及执行速度更快(因为客户端计算机呈现GUI时不需要像HTML/Javascript/CSS那样进行翻译,且数据处理量较少)。
经过所有这些,我还没有触及问题,为什么JWS不那么出名?
我的看法是与Brian Knoblauch的评论相同,它缺乏知名度。

IT人员太过于被Web技术、Ajax PUSH、GWT等流行词所吸引,这些词汇让他们偏向于使用不同的技术或解决技术挑战的乐趣,而不是真正为客户工作。

看看Citrix。我认为Citrix实际上是一个很好的想法。Citrix允许您在幕后构建自己的应用程序集群。有大量的升级和实施策略可供选择,而不会影响客户体验。Citrix部署非常容易、稳定和安全。企业仍在使用它。然而,我认为JWS比Citrix更好。JWS的想法是在客户机器上运行应用程序,而不是托管大量服务器集群,客户机器本身就能够运行这些应用程序。这可以为公司节省大量资金!通过JWS,开发团队仍然可以在服务器端构建业务逻辑和数据。但是,没有了Web处理单元,让客户计算机进行渲染处理,大大减少了网络消耗和服务器处理能力。

另一个展示JWS惊人理念的例子是Blackberry MDS。Blackberry应用实际上是从Javascript翻译成Java应用程序。使用BB的MDS studio,您可以使用GUI工具构建BB应用程序GUI,在Javascript中编写GUI逻辑。然后将应用程序翻译并部署在BES服务器上。然后BES服务器将这些应用程序分发到BB上。在每个BB上,它运行一个仅具有GUI渲染和网络功能的轻量级Java应用程序。每当应用程序需要数据时,它通过Web服务与BES通信,以从其他服务器消耗服务。这不就是JWS BB版本吗?它已经非常成功了。
最后,我认为JWS不流行是因为Sun的广告方式。BB从不宣传他们的BB Java应用程序有多好,他们认为客户甚至不关心是什么。BB宣传使用MDS开发应用程序的好处:快速、节省成本、商业回报。
以上仅是我的一点看法,略长,请见谅... :)

这只是一个纯理论的答案。当然,JWS在理论上看起来很棒,但它还没有准备好投入生产。 - Florin Marcus
JWS现在已经正式死亡。请参阅JDK 11发布说明 - Ortomala Lokni

11
Java Webstart的一个主要障碍可能是在尝试下载和启动应用程序之前仍需要安装JVM。每个人都有浏览器,但不是每个人都有JVM。
编辑:我已经获得了一些Webstart实践经验,现在可以补充这两点:
1. 部署工具包脚本和在Java 1.6u10左右发布的模块化JVM使JVM要求变得不那么棘手,因为它可以在下载其余内容时自动下载JVM和API核心并启动程序。
2. Web Start存在严重的错误。即使在Java 1.6版本中,有一次会每次下载整个应用程序,另一次则会下载它,然后出现晦涩的错误消息。总的来说,我不能真正推荐依赖这样一个脆弱的系统。

1
但是安装JRE的障碍可以像安装Flash或任何其他浏览器插件一样简单吗? - Joel
JRE仍然比那些大得多(Java6u10引入了缓解措施),并且它不会随Windows预装(我相信Flash会)。 - Michael Borgwardt
+1. 这与我的问题有关:https://dev59.com/ik_Ta4cB1Zd3GeqPA3fY - finnw
每个人都至少有3个不同的浏览器来正确显示几个不同的富客户端Web应用程序...而5个开发人员不断地在每个浏览器上工作,因为新的浏览器版本正在推出。 - Mike
...是的,虽然很少见,但有时一些大公司会限制他们的员工只能使用那个丑陋的微软浏览器,因为他们想最终摆脱所有这些兼容性问题而节省开支。 - Mike

8

我认为这主要是由于缺乏意识。它的工作非常出色,非常无缝。如果是第一次使用,已经更新或终端用户清除了缓存,应用程序只会下载一次。这是一个部署全面桌面应用程序的好方法,用户不必担心手动升级!


1
我同意,如果JNLP在Java的历史上更早被创建,我们可能会看到更强大的Java桌面应用程序。 - Thorn
1
自从这个答案之后,我遇到了一些问题。JNLP的缓存系统存在一个关键的设计缺陷。如果运行两个相同的JNLP应用程序副本,并且源代码在第一次和第二次启动之间发生了更改,则第一次执行的结果是不可预测的。JNLP不会下载第二个副本并运行它,而是将新版本转储到旧版本上方并启动第二个副本。这会严重破坏第一个副本。下一个故障。自签名证书现已弃用。对于Web使用来说还好,但对企业开发人员来说真的很痛苦。 - Brian Knoblauch
你是指两个不同名称的副本还是两个具有相同名称但使用不同浏览器的完全相同代码库的副本?是的,废弃自签名证书很糟糕,但企业可以通过解决方法来解决。您可以安装一个自签名证书作为受信任的证书,然后它应该与由“权威”颁发的证书具有相同的功能。 - Thorn
没有。在同一个浏览器中启动两个完全相同应用程序的副本,但是第一次和第二次启动之间代码库已经发生了变化。无论如何,浏览器都不重要,因为JNLP缓存本身不能正确处理这种(对我们来说)常见情况。 - Brian Knoblauch

7
Webstart的问题在于,你实际上需要“启动”一些东西,即使使用快速连接也不会很快,而使用Web应用程序则只需输入URL即可访问应用程序。
此外,Webstart可能会出现许多问题。也许预期的用户没有所需的特权,或者Webstart代理配置错误,或者jre依赖关系出了问题,或者根本没有安装java。因此,对于互联网上的普通用户来说,这并不令人愉快。
在像公司这样的受控环境中,它是一个好的、易于使用的解决方案。

我明白你所说的“开始”,但是考虑到我们假设下载速度很快,这与通过“点击”链接“启动”网页有何不同呢?这完全是一样的事情,也就是页面上的链接。 - Joel
除非已经升级,否则由于缓存,第二次启动速度较快。 - Brian Knoblauch
我在回答中试图澄清:即使在本地网络上,WebStart 的速度也比典型的 Web 应用程序慢得多。 - Jens Schauder
2
一个典型的Web应用是什么?我不是在谈论复制简单网页的功能,而是整个应用程序。一旦你的Java应用程序已经加载,从“特性”到“特性”的成本要比使用一系列网页创建的成本低得多。 - Joel
Web Start 应该能够在本地副本上“即时”启动,然后提示“嘿,有更新了,要下载吗?”。如果用户接受,则用户可以继续工作,并且当整个新的 jar 包集合被下载完成后,在下一次应用程序启动时将使用新的 jar 包。 - Thorbjørn Ravn Andersen
显示剩余3条评论

3
我曾经在一个用户群为数千人的JWS部署应用上工作了几年,它的自动升级实际上是一个巨大的麻烦。
每次更新时,总有几十个用户“卡在中间”。你只会得到“类未找到”异常(如果你很幸运的话),或者是来自JWS的不太具体的“无法启动”,甚至还没进入你的代码。看起来像是更新已经下载了一半。换句话说,它并没有原子地下载和应用更新,并且缓存效果很差,这样从相同的URL重新启动应用程序并不能解决任何问题。
除了清除JWS缓存或提供不同的URL(例如,在结尾处添加?dummyparam=jwssucks)之外,没有其他解决方法。即使作为开发人员,我有时也会遇到这种情况,而且看不到任何解决办法。
当它正常工作时,它是好的。但太常出问题了,那么对于你和你的帮助台来说就是一个巨大的痛苦。我不建议将其用于企业或关键任务。

你使用的Java版本是哪个? - Raleigh
6及以上版本最新的。目前仍然很混乱。 - Konrad Garus
哇,真是太痛苦了。幸好我没有遇到过这种情况。不知道将更新检查设置为“后台”是否有帮助。这样可以在当前版本运行时下载最新版本。 - Thorn

1

有一个非常大的问题,即它不允许进行“立即启动程序,然后在后台检查并下载任何更新”的部署,而这正是应用程序的事实行为正在趋同的方向。

我个人认为这是一个非常大的烦恼,我们正在积极寻找另一种能够提供此功能的技术。


那会是给部署者的一个不错选项。但我不会完全把决定权交给最终用户。开发人员需要打开这个选项,才能让用户使用该选择。在我的特定环境中,我们需要强制(无用户选择)在启动时进行升级。 - Brian Knoblauch
6
Java Web Start确实具有这种功能。在您的<resources>部分之前加入<update check="background" policy="prompt-update">即可。 - finnw
听起来像是Java 6版本引入的一些新功能。这也适用于主要的jar文件吗? - Thorbjørn Ravn Andersen
是的,它适用于主要的JAR文件。我认为这正是你在寻找的。 - Thorn

1

从这些帖子来看,使用Web Start时,重视服务器非常重要。每次启动应用程序时下载的“巨大痛苦”可能是由于服务器提供的时间戳不正确造成的。这里不是应用程序而是服务器必须配置以正确使用缓存,而不仅仅是禁用它。至于错误的启动,我不是很确定,但我觉得这也可能是由于不可靠的连接导致的。

Web Start的重要优点是它在Linux下与OpenJDK很好地配合使用。一些幸福开发者的客户只使用Windows,但我的客户不是。

初始问题中提到的HTML和JavaScript是轻量级的方法,非常适合处理小任务,例如动画按钮或交互式表格。Java的领域似乎围绕着更复杂的任务。


1

Java Web Start是Java Applets的一种继任者,而在新千年时期,applets被抛弃了。 但是,我仍然认为Java Applets比GWT或Javascript好得多。

Java Web Start vs Embedded Java Applet


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接