即成从战争文件中的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
下(用于内部应用程序使用),另一个用于下载?
PublicJar.jar被应用程序使用,因为它会加载资源(如果它通过spring的资源加载器classpath:public/resource.xml)。实际上PublicJar.jar只包含资源 - 它只是一个将它们全部保存为自包含单元的jar。 – Justin 2009-08-06 16:03:05
在这种情况下,将jar移出WEB-INF,Spring仍然可以使用ServletContextResource加载。一旦离开WEB-INF,客户将能够直接访问它。 – skaffman 2009-08-06 16:07:26
谢谢!春季资源加载器完全帮助。我使用servlet方法,因为我已经为客户端使用HttpInvoker,所以我添加了一个服务方法:byte [] readPublicJar() - quick + dirty。如果PublicJar变得很大,我将不得不将它移动到servlet上下文,而不是从servlet中读取它。 – Justin 2009-08-06 22:19:24