Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以在非爆炸战争中为JAR中的文件获取URLConnection吗?_Java_War_Urlconnection_Exploded - Fatal编程技术网

Java 我可以在非爆炸战争中为JAR中的文件获取URLConnection吗?

Java 我可以在非爆炸战争中为JAR中的文件获取URLConnection吗?,java,war,urlconnection,exploded,Java,War,Urlconnection,Exploded,我在web应用程序的类路径中有一些资源文件(如果有必要的话,在JAR中)。我知道我可以通过调用SomeClassLoader.getResourceAsStream(“/samples/myscript.txt”)来访问这些资源的内容。我过去在爆炸式和非爆炸式战争文件中都成功地测试了这一点 但是,要与我的应用程序中的其他一些现有类集成,我需要为该文件提供一个URLConnection对象。我测试并确认调用getResource(“/samples/myscript.txt”).openConne

我在web应用程序的类路径中有一些资源文件(如果有必要的话,在JAR中)。我知道我可以通过调用SomeClassLoader.getResourceAsStream(“/samples/myscript.txt”)来访问这些资源的内容。我过去在爆炸式非爆炸式战争文件中都成功地测试了这一点

但是,要与我的应用程序中的其他一些现有类集成,我需要为该文件提供一个URLConnection对象。我测试并确认调用
getResource(“/samples/myscript.txt”).openConnection()
可以在分解的WARs中工作(另外,调试显示结果是分解文件的
文件://
URL)

问:这种方法是否也适用于非爆炸性战争(打包战争)


(我目前无法轻松访问部署战争而不爆发战争的服务器,因此我不直接尝试而是询问。此外,一些服务器(例如Jetty、Tomcat——即使使用
unpacwars=“false”
)允许非爆炸式部署,但在幕后它们将战争解包,有效地表现为爆炸式部署——显然,工作正常。我认为过去给我带来麻烦的服务器是Websphere和Weblogic)。

我不这么认为。要做到这一点,您必须为一个JAR URL使用一个,其底层URL是另一个JAR URL。如果我尝试,我会得到:

java.net.MalformedURLException: no !/ in spec

“spec”是JarUrlConnection调用的指向JAR内文件的路径。对于像
jar:jar这样的URL:file:///outer.jar!/inner.jar/在myscript.txt
中,它在第一个感叹号处切掉规范,然后拒绝
inner.jar/myscript.txt
作为一个规范。如果真的是这样,我们希望它在最后一个感叹号路径处切掉规范,打开内部URL(它指的是外部JAR!)以用作基础。不幸。我想不出任何方法来解决这个问题。

与正在尝试的操作相关的一点需要注意:存档中的条目本身就是存档条目,它有两层打包,并且可能有两层压缩。如果试图访问条目的数据,而将中间存档保留为最外层存档中的条目,则必须在检索条目之前解压缩中间存档

要访问双嵌套归档文件,需要使用两种基本技术和一种高级技术:首先,最常见的是,将中间归档文件提取到临时文件中。第二,有时,可以通过中间归档的条目进行流式处理,但这非常缓慢,除非在非常有限的情况下,否则不建议这样做。第三,一种先进的技术是先不压缩中间归档文件,然后创建一个偏移文件,其中包含指向中间归档文件最外层归档文件区域的指针。我不确定这是否在任何地方都可以实现,但它可以避免其他两种技术的开销

在任何情况下,访问双重嵌套条目都需要大量额外的步骤,这对于一个简单的协议处理程序来说有点太多了


还要注意,这是JavaEE应用程序归档的一个常见问题,它被定义为多层归档:EAR->(JAR | WAR | RAR)、WAR->JAR和RAR->JAR。JavaEE创建了三层嵌套归档。

您的意思是资源位于WAR文件中的JAR文件中吗?