3

私の問題はあなたがかなり一般的だと思う問題ですが、私は今のところ解決策を見つけることができていません。

Tomcat5.5でJavaWebアプリを構築する(ただし、WebLogic環境など、どこにでもデプロイできることが要件であるため、リソースをストリームとしてロードする必要があります)。グッドプラクティスでは、リソースファイルをWEB-INF / classesの下に配置し、ClassLoaderのgetResourceAsStream()メソッドを使用してロードする必要があります。ロードしたいリソースの名前がわかっていれば、すべてうまくいきます。

私の問題は、クラスのサブディレクトリにあるすべてのもの(空でないサブディレクトリを再帰的に含む)をロードする必要があることです。

したがって、たとえば、WEB-INF /classesの下に次のものがある場合:

folderX / folderY

folderX / folderY / fileA.properties

folderX / fileB.properties

アプリケーションを起動する前に実際に名前を知らなくても、fileA.propertiesクラスとfileB.propertiesクラスをロードする必要があります(つまり、WEB-INF / classesの下の任意のディレクトリからリソースを任意にロードする機能が必要です)。

これを行うための最もエレガントな方法は何ですか?必要な情報(必要な各リソースへのリソースパス)を見つけるために、どのオブジェクトに問い合わせることができますか?サーブレット固有ではないソリューションが最適です(可能であれば、すべてをクラスローディングフレームワーク内に保持します)。

前もって感謝します!

4

2 に答える 2

2

私の知る限り、クラスローダーは要求されたものだけをロードしようとするため、そのような機能はありません。クラスパス上のすべてのアイテムをプリフェッチしたり、ディレクトリ構造として扱ったりするわけではありません。

私が問題を解決する方法は、ビルド時にすべての関連リソースのテキストファイルにディレクトリリストを作成し、それを戦争に含めてから、その方法を説明することです。

于 2009-05-26T05:07:28.350 に答える
1

あなたはいくつかのトリックでそれを行うことができます:)

リソースを URL として取得し、プロトコルを抽出します。

  • ファイル プロトコル - URL パスを取得すると、フォルダーが作成され、ファイルがスキャンされます。
  • jar/zip プロトコル - jar/zip パスを抽出し、JarFile を使用してファイルを参照し、パス/パッケージの下にあるすべてのものを抽出します。
于 2009-05-26T13:19:58.220 に答える