我有一些资源文件位于我的 Web 应用程序的类路径中(如果重要的话,在 JAR 中)。我知道我可以通过调用例如访问这些资源的内容SomeClassLoader.getResourceAsStream( "/samples/myscript.txt")
。我过去曾在exploded 和non-exploded WAR 文件中成功测试过这一点。
但是,为了与我的应用程序中的其他一些现有类集成,我需要为该文件提供一个 URLConnection 对象。我测试并确认调用 getResource("/samples/myscript.txt").openConnection()
在 exploded WAR 中有效(另外,调试显示结果是 file:///
展开文件的 URL)。
问题:该方法是否也适用于未爆炸(“打包?”)WAR?
(我目前无法轻松访问部署 war 而不引爆 war 的服务器,因此我为什么要问而不是直接尝试它。另外,一些服务器(例如 Jetty、Tomcat —— 即使使用 unpackWARs ="false"
) 允许非爆炸式部署,但在幕后他们解开了 war ,有效地表现得像爆炸式部署——而且,显然,工作正常。我认为过去给我带来麻烦的服务器是 Websphere 和 Weblogic)。
最佳答案
我不这么认为。为此,您必须使用 JarUrlConnection对于其基础 URL 是另一个 JAR URL 的 JAR URL。如果我尝试这样做,我会得到:
java.net.MalformedURLException: no !/ in spec
'spec' 是 JarUrlConnection 调用的引用 JAR 内文件的路径。似乎对于像 jar:jar:file:///outer.jar!/inner.jar!/myscript.txt
这样的 URL , 它在 第一个 感叹号处砍掉规范,然后拒绝 inner.jar!/myscript.txt
作为规范。实际上,我们希望它在最后一个感叹号路径处砍掉规范,解开内部 URL(指的是外部 JAR!)以用作基础。不幸的。我想不出任何办法解决这个问题。
关于java - 我可以在未展开的 WAR 中获取 JAR 中文件的 URLConnection 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6574189/