[英]Java WebStart with version Update
我正在使用 Java WebStart 和我正在開發的這個簡單的應用程序,並且我也制作了它,以便它能夠檢查 jar 文件的最新版本的更新。 雖然在運行它時,我收到一條錯誤消息,指出服務器缺少版本響應。
以下是我的 jnlp 文件代碼:
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://localhost:8081/WebStartLauncher/app" href="Agecalc.jnlp">
<information>
<title>Jnlp Testing</title>
<vendor>Peter Ivan & co</vendor>
<homepage href="http://localhost:8081/WebStartLauncher" />
<description>Testing Testing</description>
<icon href="app/index.jpeg" kind="default"/>
<icon kind="shortcut" href="app/index.jpeg" width="32" height="32"/>
<offline-allowed/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.6+" />
<jar href="AgeCalc__V1.0.jar" version="1.0"/>
<jar href="AgeCalc__V1.1.jar" version="1.1"/>
<property name="jnlp.versionEnabled" value="true"/>
</resources>
<application-desc main-class="com.webstart.AgeCalculator" />
</jnlp>
對於版本.xml:
<jnlp-versions>
<resource>
<pattern>
<name>AgeCalc__V1.0.jar</name>
<version-id>1.0</version-id>
</pattern>
<file>AgeCalc__V1.0.jar</file>
</resource>
</jnlp-versions>
對於 web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>WebStartLauncher</display-name>
<welcome-file-list>
<welcome-file>webstart.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>JnlpDownloadServlet</servlet-name>
<servlet-class>jnlp.sample.servlet.JnlpDownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JnlpDownloadServlet</servlet-name>
<url-pattern>/WebContent/WEB-INF/lib</url-pattern>
</servlet-mapping>
</web-app>
這些是我得到的錯誤日志:
com.sun.deploy.net.FailedDownloadException: Unable to load resource: (http://localhost:8081/WebStartLauncher/app/AgeCalc__V1.0.jar, 1.0)
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.javaws.LaunchDownload.downloadJarFiles(Unknown Source)
at com.sun.javaws.LaunchDownload.downloadEagerorAll(Unknown Source)
at com.sun.javaws.Launcher.downloadResources(Unknown Source)
at com.sun.javaws.Launcher.prepareLaunchFile(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)
java.io.IOException: missing version response from server
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.javaws.LaunchDownload.downloadJarFiles(Unknown Source)
at com.sun.javaws.LaunchDownload.downloadEagerorAll(Unknown Source)
at com.sun.javaws.Launcher.downloadResources(Unknown Source)
at com.sun.javaws.Launcher.prepareLaunchFile(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)
請告知如何進行。 非常感謝!
基於http://docs.oracle.com/javase/7/docs/technotes/guides/javaws/developersguide/downloadservletguide.html#requests我認為您正在混合兩種可能的基於版本的下載策略。 對於任何 jar 資源,您可以使用任一文件名約定,您不需要版本。xml 條目和您的 jnlp 條目將讀取
<jar href="AgeCalc.jar" version="1.0"/>
並且 servlet 會自動使用 AgeCalc__V1.0.jar。
另一種可能的方法是寫
<resource>
<pattern>
<name>AgeCalc.jar</name>
<version-id>1.0</version-id>
</pattern>
<file>AgeCalc__V1.0.jar</file>
</resource>
在您的版本中。xml 結合上面更改的 jnlp。 但由於您使用的是文件名約定,我建議根本不要使用 version.xml。
當 jnlp 中的 href 包含 __V 時,DownloadServlet 可能會出現問題。
但是從 Java 7 開始,您甚至不再需要下載 servlet。 現在客戶可以施展魔法了。 您所要做的就是向您的 jnlp 添加一個值為 true 的系統屬性 jnlp.versionEnabled。 只要服務器上的文件是 *__V${version}.jar 形式, 一切都會正常工作。
但是你可以使用我的 gradle 插件,它會自動創建一個正確的 webstart 目錄,准備打包部署。
您應該檢查文件名。
AgeCalc__V1.0.jar 和 AgeCalc_V1.0.jar 是不同的。
重命名 jar 文件時,請確保在版本號前包含兩個下划線 (__)。
<resources>
<j2se version="1.6+" />
<jar href="AgeCalc.jar" version="1.0"/>
<jar href="AgeCalc.jar" version="1.1"/>
<property name="jnlp.versionEnabled" value="true"/>
</resources>
文件名 AgeCalc__V1.0.jar 和 AgeCalc__V1.1.jar
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.