即成从战争文件中的jar文件(作为资源)

问题描述:

我有一个Web应用程序:MyApp.war,它里面,我有一个jar文件:WEB-INF/lib/PublicJar.jar即成从战争文件中的jar文件(作为资源)

  • 我想客户端应用程序是能够像网络资源一样下载该jar文件。 e.g http://theserver.com/myapp/jars/PublicJar.jar

  • 我想要的Web应用程序能够计算的jar文件 的哈希码看它是否已经改变,所以客户知道它是否需要重新加载它。

可以这样做吗?

WEB-INF内的资源无法直接提供给客户端。如果你想这样做,你需要编写一个servlet /控制器来将其解压缩为一个ServletContext资源并将其提供给http响应。

PublicJar.jar也被你的应用程序本身使用?难道你不能将它从WEB-INF中移出,或者可能在WAR中绑定它的两个副本,一个在WEB-INF下(用于内部应用程序使用),另一个用于下载?

+0

PublicJar.jar被应用程序使用,因为它会加载资源(如果它通过spring的资源加载器classpath:public/resource.xml)。实际上PublicJar.jar只包含资源 - 它只是一个将它们全部保存为自包含单元的jar。 – Justin 2009-08-06 16:03:05

+0

在这种情况下,将jar移出WEB-INF,Spring仍然可以使用ServletContextResource加载。一旦离开WEB-INF,客户将能够直接访问它。 – skaffman 2009-08-06 16:07:26

+0

谢谢!春季资源加载器完全帮助。我使用servlet方法,因为我已经为客户端使用HttpInvoker,所以我添加了一个服务方法:byte [] readPublicJar() - quick + dirty。如果PublicJar变得很大,我将不得不将它移动到servlet上下文,而不是从servlet中读取它。 – Justin 2009-08-06 22:19:24