1

当我尝试动态分发 jar/jnlp 时,我遇到了几个问题。我的所有文件都是使用http://www.mywebsite.com/ServeFile?name=xxx为文件 xxx 动态提供的。我可以正确下载文件。

当我将 jnlp 的链接放入浏览器并下载时,javaws 出现错误,显示找不到 jar 文件。GAE 日志文件显示 javaws 尝试加载/ServeFile.pack.gz?name=test__V1.0.jar,因此没有由 ServeFile servlet 提供服务,而是由 / 提供服务(这是另一个 servlet)

这是我的 jnlp 文件部分内容:

<resources>
    <j2se version="1.6+"/>
    <jar href="ServeFile?name=test.jar" main="true" version="1.0"/>
    <property name="jnlp.packEnabled" value="true"/>
    <property name="jnlp.versionEnabled" value="true"/>
</resources>

我的问题是 javaws 如何将 .pack.gz 放入 url 的中间,而不仅仅是在请求中放入 AcceptEncoding?动态服务 jnlp 和 jar 的正确方法是什么?

更新

使用“静态”类型链接(例如http://website.com/path/file.jar而不使用?file=file.jar )时问题已解决。我还有一个问题:

新问题

JavaWS 有时会放置?version-id=1.0并且我的动态 url 也使用类似的模式,例如?folder=root&user= guest。所以 version-id 会变成1.0?folder=root

如果我把&folder=root&user=guest它会工作,但 javaws 有时会请求myjar __ V1.0.jar& folder=root所以现在文件名有myjar _ V1.0& folder=root这是错误的。这是不一致的。

暂时,我可以只解析这个 version-id 来查看它是否包含问号。我希望有更好的解决方案。

4

2 回答 2

1

在 GAE 上,考虑将文件放在 blobstore 中并使用 blobstore 服务来提供它们。

Blobstore 可以提供任何二进制文件

https://developers.google.com/appengine/docs/java/blobstore/overview

于 2013-01-01T18:55:44.750 回答
0

我得到了一个临时解决方案,但还有另一个问题。这个 jar 存储在数据存储中,所以我需要http://www.myserver.com/?file=start.jar来访问它。一旦我使用http://www.myserver.com/start.jar它就会工作。我只需要我的 servlet 来解析 Path 而不是 getParameter 这仍然很容易。

问题出在 pack.gz 和 version-id 上。如果您的链接是http://www.myserver.com/start.jar?folder=root&user=guest那么 javaws 将生成http://www.myserver.com/start.jar.pack.gz?version-id=1.0 ?folder=root&user=guestgetParameter("version-id")的,1.0?folder=root所以你可能认为你可以使用&folder=root&user=guest

但是您的链接也可能变成http://www.myserver.com/start__V1.0.jar.pack.gz?folder=root&user=guest(这很好)。我认为您不能保证使用哪一个 javaws,因此您无法准备使用 ?folder=root 或使用 &folder=root。

于 2013-01-04T01:49:20.080 回答