【问题标题】:Dynamic JNLP fetching file from server动态 JNLP 从服务器获取文件
【发布时间】:2013-11-12 20:52:33
【问题描述】:

我想为用户提供带有自定义启动 <argument> 标记的动态 JNLP。

经过一番折腾,它几乎可以工作了。

用户登录网站,下载为用户定制的 JNLP。 Java Web Start 使用下载的自定义 JNLP 文件启动。

但是,当用户第一次启动应用程序时,Java Web Start 会使用嵌入在 .jnlp 文件中的 href 属性从服务器获取“主”JNLP 文件。这不包含用户的自定义 <argument> 标签,并且事情会中断。

有没有办法告诉 JNLP 使用本地 JNLP 文件而不是从服务器获取它?

这是我的APPLICATION_TEMPLATE.jnlp

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE jnlp PUBLIC "-//Sun Microsystems, Inc//DTD JNLP Discriptor 1.5//EN" "http://java.sun.com/dtd/JNLP-1.5.dtd">
<jnlp
        spec="6.0+"
        codebase="http://localhost/jnlp"
        version="1234"
        href="http://localhost/jnlp/app.jnlp">
    <information>
        <title>JNLPHelper</title>
        <vendor>Yoyodyne, Inc.</vendor>
        <offline-allowed/>
        <shortcut online="true" install="false">
            <desktop/>
            <menu submenu="Yoyodyne, Inc."/>
        </shortcut>
        <association extensions="jnlphelper" mime-type="application-x/jnlphelper"/>
    </information>
    <security>
        <all-permissions/>
    </security>
    <update check="timeout" policy="always"/>
    <resources>
        <java initial-heap-size="32M" max-heap-size="256M" version="1.6+"/>
        <!--<j2se version="1.6+" java-vm-args="-esa -Xnoclassgc"/>-->
        <jar href="JNLPHelper.jar"/>
    </resources>

    <application-desc main-class="com.prosc.msi.jnlp.JNLPHelper">
        <argument>*</argument>
    </application-desc>
</jnlp>

这个示例文件托管在我的网络服务器上,在测试期间它是localhost。用户下载自定义 JNLP,用 &lt;argument&gt;foo&lt;/argument&gt; 替换 &lt;argument&gt;*&lt;/argument&gt;

我尝试从&lt;jnlp&gt; 标记中完全删除href 属性。这几乎成功了,但是应用程序每次都会提示重新安装,并且我的桌面图标被删除并重新添加。

【问题讨论】:

  • 您必须更具体。这究竟是如何工作的?为什么不直接用 PHP 之类的动态网页呢?
  • @Robin,我需要向最终用户发送一个 JNLP,并且它需要包含该用户的许可证密钥,因此他不需要在 Java Swing 应用程序中手动输入它由 JNLP 发起。
  • 我明白这一点,但我仍然不明白 (a) 你在做什么,(b) 为什么你不使用 从未透露过的简单 PHP 或 JSP主 JNLP 文件 到 Web 浏览器。你到底在做什么?
  • 经过身份验证的用户登录网站,并希望运行 Swing 应用程序。单击站点上的按钮,该按钮会为已签名的应用程序下载动态 JNLP。当用户想要在没有任何自定义参数的情况下启动应用程序时使用主 JNLP 文件,因此它是可公开服务的。你是说我应该省略 标签中的 href 属性吗?

标签: java java-web-start jnlp


【解决方案1】:

您如何确定用户?您可能会发现这是一个会话问题或类似问题,其中 JNLP href 指向的结果是未自定义的 .jnlp 响应。 您可能想要更改确定谁在使用下载的方式,或者允许您的 app.jnlp URL 采用一个参数来确认当前用户是谁?

【讨论】:

  • 是的,此类缓存问题的一般解决方案是“不允许通过使 URL 不同的方式对其进行缓存”。
  • 我已经编辑了这个问题,问题不在于缓存,而是 javaws 急切地从服务器获取不同的 JNLP,并使用它。
  • 感谢您的更新,我认为我的回答仍然有效 - 如果 href 指向该用户 JNLP 的特定 URL,那么它将不再是问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
相关资源
最近更新 更多