2

Eclipse での私のビルド パスは次のようになります。

ProjectName
   -- WEB-INF
      -- classes
         -- myClass.class
      -- configs
         -- myConfig.xml

現在、構成への絶対パスは次のようになっています。

C:\開発\Java\プロジェクト名\WEB-INF\configs\myConfig.xml

バインディングに JAXB を使用していますが、FileInputStream が必要です。FileInputStream は、XML 構成ファイルのストリームである必要があります。ただし、構成の FileInputStream を取得する方法がわかりません。FileNotFoundException が発生し続けます。

プロジェクトのオープンソースをリリースする予定があるため、誰かが構成へのパスをハードコードする必要がないように、この構成をロードする必要があります。誰かが完全な絶対パスをハードコードするだけの例をたくさん見ますが、次のように「より柔軟」にする必要があります。

新しい FileInputStream("/WEB-INF/configs/myConfig.xml");

ありがとう!

4

2 に答える 2

4

ServletContext.getResourceAsStream()メソッド (javadoc here ) とそのバリアントを使用すると、WEB-INF の下の相対パスの入力ストリームをかなり簡単に取得できます。

たとえば、selvlet コードでは、次のことができます。

getServletContext().getResourceAsStream("/WEB-INF/configs/myConfig.xml") // your file
getServletContext().getResource("/WEB-INF") // URL to WEB-INF dir
于 2010-02-06T09:12:00.607 に答える
4

その myConfig.xml を代わりに WEB-INF/classes ディレクトリに配置し、クラス ローダーを介してロードすることをお勧めします。これはクラスパスにあるためです。サーブレット コンテキストで getResourceAsStream() を呼び出すと、使用できる InputStream が返されます。これはコンテキスト ルートに相対的であるため、その WAR を取得してどこにでも置くことができます。コードは引き続き機能します。

于 2010-02-06T04:12:36.977 に答える