3

Webアプリケーションのクラスパスにあるリソースファイルがいくつかあります(重要な場合は、JAR内にあります)。たとえば、を呼び出すことで、これらのリソースのコンテンツにアクセスできることを知っていますSomeClassLoader.getResourceAsStream( "/samples/myscript.txt" )。私は過去にこれを爆発したWARファイルと爆発していないWARファイルの両方でテストして成功ました。

ただし、アプリ内の他の既存のクラスと統合するには、そのファイルにURLConnectionオブジェクトを提供する必要があります。分解getResource("/samples/myscript.txt").openConnection()されたWARで呼び出しが機能することをテストして確認しました(さらに、デバッグにより、結果が分解されたファイルへのURLであることが明らかになりました)。file:///

質問:そのメソッドは、展開されていない(「パッケージ化された」)WARでも機能しますか?

(現在、戦争を爆発させずに展開するサーバーに簡単にアクセスできないため、完全に試してみるのではなく、質問しているのです。また、一部のサーバー(Jetty、TomcatなどunpackWARs="false")では、爆発しない展開が許可されています。しかし、舞台裏では、彼らは戦争を解き放ち、爆発的な展開のように効果的に動作し、明らかに正しく機能しています。過去に問題を引き起こしたサーバーはWebsphereとWeblogicだったと思います)。

4

2 に答える 2

2

私はそうは思いません。これを行うには、基になる URL が別の JAR URL である JAR URL に対してJarUrlConnectionを使用する必要があります。それを試してみると、次のようになります。

java.net.MalformedURLException: no !/ in spec

「spec」は、JarUrlConnection が JAR 内のファイルを参照するパスを呼び出すものです。のような URL の場合jar:jar:file:///outer.jar!/inner.jar!/myscript.txt最初のエクスクラメーション マークで仕様を切り捨てinner.jar!/myscript.txt、仕様として拒否するようです。実際には、最後のエクスクラメーション パスで仕様を切り取り、ベースとして使用する内部 URL (外部 JAR を参照します!) をアンラップしたいと考えています。残念です。これを回避する方法は考えられません。

于 2011-07-04T19:00:15.870 に答える