gpt4 book ai didi

java - 为什么 Java Web Start 要求从 1.7.0_21 开始安装我的应用程序的主要 JAR 和链接组件?

转载 作者:行者123 更新时间:2023-11-29 05:39:26 24 4
gpt4 key购买 nike

假设您有一个多组件 Java Web Start 应用程序,它由引用主应用程序的 JAR 的 JNLP 和多个其他 JNLP 作为 component-desc 组成。

出于某种原因,从 1.7.0_21 版本(Java SE 7 更新 21)开始,Web Start 似乎提示用户安装所有这些(主 JAR - 或主JNLP - 以及所有列为 component-desc 条目的 JNLP),而以前版本的 Web Start 似乎只提示用户安装主要组件(包含“主要”JAR 的顶级 JNLP ).

正如您所想象的,这是一个严重的问题,因为高度模块化的应用程序或依赖第三方组件并链接到他们自己的 JNLP 的应用程序最终会导致对用户非常不友好的启动过程,可能会要求用户单击在能够启动他们的应用程序之前通过大量对话。

这是为什么?

最佳答案

我直接发布了我自己的答案,因为在思考了数周的原因后,我们终于找到了触发此行为的原因。请随时发布您自己的答案以添加到讨论中。

根本原因

自 Java SE 7 Update 21 起,Web Start 启动器在启动 JNLP 时将在主机名中使用大写和小写字母以不同方式对待远程服务器。

因此,使用以下替代拼写启动 JNLP 将触发不同的行为:

  • [EVIL] 使用大写字母将触发问题中提到的行为(例如 http://MYDOMAIN.COM/webapp/webstart.jnlp)

  • [GOOD] 使用小写字母将按预期和预期运行(例如 http://maydomain.com/webapp/webstart.jnlp)

注意:这背后的原因并未在 1.7.0_21 的发行说明中进行解释。

解决方案

在链接将通过 Web Start 通过 JNLP 协议(protocol)加载的资源时,不要使用大写字符。

如果您的系统使用大写主机名(出于任何原因,这可能不是有效主机名 - 请参阅下面的下一节),那么在调用 Web Start 启动器或构建它将使用的 URL 之前将它们转换为小写用于发射。

主机名不区分大小写

需要注意的是 RFC952因此假设主机名(强调我的):

“名称”(网络、主机、网关或域名)是一个文本字符串 从字母 (A-Z)、数字 (0-9)、减号中提取的 24 个字符 符号 (-) 和句点 (.)。 请注意,只有在以下情况下才允许使用句点 它们用于分隔“域样式名称”的组件。 (看 RFC-921,“域名系统实现计划”,用于 背景)。不允许空格或空格字符作为 a 的一部分 姓名。 不区分大小写。第一个 字符必须是字母字符。最后一个字符不能是 减号或句点。作为网关的主机应该有 “-GATEWAY”或“-GW”作为其名称的一部分。不作为的主机 Internet 网关不应使用“-GATEWAY”和“-GW”作为 他们的名字。作为 TAC 的主机应将“-TAC”作为最后一个 其主机名的一部分,如果它是 DoD 主机。单字符名称 或昵称是不允许的。

如果您的系统出于某种原因需要大写字符,那么它就做错了;不幸的是,从 1.7.0_21 开始,Web Start 显然也是如此。


请注意,目前我还没有看到也不知道 Oracle 数据库中的错误报告,而且这个问题在网上的信号似乎相当低,因此其他情况可能会触发此行为。我还没有制定出一个简单的测试用例。

关于java - 为什么 Java Web Start 要求从 1.7.0_21 开始安装我的应用程序的主要 JAR 和链接组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18190833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com