带有签名的 Java Web 启动

标签 java http jnlp java-web-start

全部,

我在运行由 Netbeans 7 生成的 java web start 应用程序时遇到了一些问题。

我已将我现有的 java 6.9.1 应用程序迁移到 Netbeans 7 并尝试使其成为 Web 启动应用程序。

为此,我从项目属性中选中了启用 Web Start 选项。

对于代码库选项,我选择了 Web 应用程序部署。 选择应用程序描述符选项,它将 JNLP application-desc 元素指向我的应用程序主类。

为了签名,我生成了一个 key 并将签名属性指向它。我将混合代码设置为仅受信任,因为我的应用程序将仅使用签名的 JAR。

当我编译时,所有引用的 JAR 文件和应用程序 JAR 文件都被签名,这在控制台中输出(对于每个文件)如下:

Signing JAR: D:\MyCode\dist\lib\somejarfile.jar to D:\MyCode\dist\lib\somejarfile.jar as signFiles
Enter Passphrase for keystore: Enter key password for signFiles: 

注意:signFiles 是我在 Netbeans 的签名属性中使用的别名。

在我的 dist 文件夹中创建了以下文件:

  • 图书馆
  • jnlpcomponent1.jnlp
  • launch.html
  • 启动.jnlp
  • 自述文件.TXT
  • 我的 App.jar

我已将这些复制到托管在 tomcat 下的我的 Web 文件夹中,该文件夹位于 C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\mywebapp。

我在 IE 和 Firefox 中从以下 URL 运行: http://mylaptop:8080/mywebapp/launch.html

当我点击 launch.html 中的按钮启动 JNLP 文件时抛出以下异常:

com.sun.deploy.net.FailedDownloadException: Unable to load resource: file:/C:/Users/panderson/AppData/Local/Microsoft/Windows/Temporary Internet Files/Content.IE5/B3UCQV8C/$$codebase/launch.jnlp
at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResource(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getResource(Unknown Source)
at com.sun.javaws.Launcher.updateFinalLaunchDesc(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.launch(Unknown Source)
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

我的 launch.jnlp 文件包含以下内容:

<jnlp codebase="$$codebase" href="launch.jnlp" spec="1.0+">
...
<resources>
    <j2se version="1.6+"/>
    <jar href="My App.jar" main="true"/>
...

我不太清楚为什么它会在 Internet Explorer 的临时文件夹下寻找它...

...但我已尝试将 jnlp href 中的完整 url 放入 launch.JNLP 文件 http://mylaptop:8080/mywebapp/launch.jnlp然后它抛出以下异常:

com.sun.deploy.net.FailedDownloadException: Unable to load resource: file:/C:/Users/panderson/AppData/Local/Microsoft/Windows/Temporary Internet Files/Content.IE5/DR2O6URQ/$$codebase/My App.jar

如果我然后将 jar href 更改为 http://mylaptop:8080/mywebapp/My App.jar,点击launch.html中的按钮运行launch.JNLP文件时抛出如下异常。

BadFieldException[ The field <jnlp>codebase has an invalid value: $$codebase,$$codebase]

有什么帮助或想法吗?

干杯,

安德斯

最佳答案

<jnlp codebase="$$codebase" href="launch.jnlp" spec="1.0+">

这些 $$ 占位符值通常由 servlet 或类似功能转换为有意义的内容。

关于带有签名的 Java Web 启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6424308/

相关文章:

php - 为什么即使我将 CURLOPT_PROXY 与 Curl 一起使用,我的原始 IP 仍然可见?

java - 在资源中找到未签名的条目

java - NoSuchMethod 异常

java - 类完成后静态变量变为 null

json - "More user input please?"的 HTTP 状态代码

http - HTTP POST 可以无限吗?

java - JNLP 应该使用特定的 Java 版本但错误结果

java - jnlp无法启动swt应用程序

java - 如何保证一个线程在另一个CORE中执行?

java - 使用 Java 在 pentaho Kettle-spoon 中进行转换和工作的示例程序(Eclipse)