/* 1 */ InputStream in1 = ClassLoader.getSystemResourceAsStream("foobar.txt");
/* 2 */ InputStream in2 = this.getClass().getResourceAsStream("/foobar.txt");
は、どちらも同じリソースを(私は答えの "はい" と思う)を返すのですか?
両方とも「同じ」クラスパスにアクセスしていますか? #1のメソッド名が "システム ResourceAsStream"になっていますが、#2の場合は単に "getResourceAsStream"ですか?
おかげ
Webアプリケーションに複数のクラスパスがあると言っていますか? @マイケル - 並べ替えの。 – Michael
。通常、各Webアプリケーションは、WAR、EARなどの内容を担当する独自のクラスローダを取得します。これらのクラスローダは共通の親を持ち、共通のlibディレクトリのクラスはさまざまなWebアプリケーション間で共有されます。しかし、これらの階層はいくつかのローダーになる可能性があります。システムクラスローダーは一番上にありますが、その間に番号があります。 – sblundy
異なるWebアプリケーションには、おそらく異なるクラスローダーがあります。たとえば、Glassfishでは、次の階層が指定されています(http://download.oracle.com/docs/cd/E19798-01/821-1752/6nmndgmhr/index.html#fvxzq)。 – g051051