如何使用JnlpDownloadServlet访问webapp的webstart目录中的jar内的资源

时间:2011-02-17 16:48:00

标签: web-applications jnlp java-web-start

我已经通过webstart-maven-plugin和JnlpDownloadServlet将一个swing GUI部署到一个servlet容器(Glassfish 3.0)中的webapp。 我的GUI类和资源位于我的webapp的webstart目录中的mygui-4.8.jar文件以及launch.jnlp文件中。

当通过网络浏览器中的launch.jnlp网址访问时,该应用可以正常启动:

http://localhost:8080/myserver/webstart/launch.jnlp

但是,当我的webapp中的代码尝试访问mygui-4.8.jar文件中的图像资源时,它无法检索它。

我在GUI中用来获取图标的代码是:

网址iconURL = getClass()。getClassLoader()。getResource(“/ icons / Find.png”);

使用调试器我看到iconURL.toString()返回以下URL:

罐:HTTP://本地主机:8080 / MYSERVER /在webstart / mygui.jar /icons/Find.png

我注意到jar文件名缺少版本(mygui.jar而不是mygui-4.8.jar)。

这似乎与jnlp协议中的版本处理有关。

任何人都可以告诉我应该如何重写我的客户端代码以获取jar文件中的这些资源?谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

问题解决了!

问题原来是我的代码中的其他地方的错误,与webstart,jnlp或JnlpDownloadServlet无关。图像资源在构建过程中意外预处理的结果存在缺陷,从而导致损坏。

引用资源的正确方法是我最初如何使用它:

String icon = "icons/Find.png"; //Notice no leading '/'
URL url = getClass().getClassLoader().getResource(icon);            
ImageIcon imageIcon = new ImageIcon(url);

当资源位于webapp的webstart目录中的jar内时,上面的代码工作正常。如果在类路径中找到它作为本地文件,它也可以正常工作。它适用于应用程序是在javaws中运行还是作为javaws之外的独立应用程序运行。