java - 我可以在未展开的 WAR 中获取 JAR 中文件的 URLConnection 吗?

标签 java war urlconnection exploded

我有一些资源文件位于我的 Web 应用程序的类路径中(如果重要的话,在 JAR 中)。我知道我可以通过调用例如访问这些资源的内容SomeClassLoader.getResourceAsStream( "/samples/myscript.txt")。我过去曾在explodednon-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/

相关文章:

java - 客户端传输异常 : The server sent HTTP status code 302: Found

java - 在一周的时间跨度内每天按时间戳聚合对象

java - BOOT_COMPLETED 后无法启动 Intent

java - 如何以及为什么不在 URLConnection (DownloadFile) 上运行 "timeout"?

java - Guava 输入/输出供应商和 URLConnection

java - 读取 unicode *.txt 文件?

java - war 部署初始化方法

java - 如何从部署在同一tomcat中的另一个war文件重新配置war文件的log4j

maven-2 - 在 Maven 中禁用 war 覆盖

java - URL 连接超时后导致应用程序崩溃