1

サーバーとしてApache Tomcat 7.0.22を使用して、NetBeans 7.1.1でMaven Webアプリケーションを開発しています。アプリを実行またはデバッグするとき、Java クラスは「/home/user/apache-tomcat-7.0.22/bin/」をファイルのベースとして想定します。

たとえば、「Writer rssFile = new FileWriter("test.xml");」で新しいファイルを作成する場合、この新しいファイルは「/home/user/apache-tomcat-7.0.22/bin/test.xml」として作成されます。 "。

画像や別のファイルを検索すると、同じ問題が発生します。「/home/user/apache-tomcat-7.0.22/bin」で検索を開始します...

プロジェクト ファイルは Tomcat ベースにないため、bin フォルダーがクラスパスのベースとして使用される理由がわかりません... クライアント側のコード (*.jsp など) では、正しいパスが見つかりますが、サーバー側では見つかりません。コード (Java クラス)!

この問題は、https://stackoverflow.com/questions/7774446/netbeans-setting-default-current-directory-for-tomcatで他のユーザーが言及したものと同じですが、解決策はありませんでした。

これは NetBeans Maven プラグインのバグでしょうか? この問題を解決するには?

4

1 に答える 1

2

Tomcat の使用に縛られている場合は、次の 2 つのシステム プロパティを利用できます。

  • catalina.home- Tomcat がインストールされている場所 ( /home/user/apache-tomcat-7.0.22)
  • catalina.base- Tomcat インスタンスがベースになっている場所 (通常は上記と同じですが、複数の Tomcat インスタンスをすべて同じ共通バイナリに基づいて実行できるように構成できます)

したがって、次を使用できます。

new File(System.getProperty("catalina.base") + "/conf/test.xml");

戦争にバンドルされているリソースをロードしようとしている場合、コンテナに依存しないリソースをロードするために他に行うべきことがいくつかあります。

  • リソースがWEB-INF/classesフォルダーにある場合は、次を使用して InputStreams として使用してそれらをロードできます。

    Classloader.getResourceAsStream("/test.xml");
    
  • 2.5 サーブレット仕様以降を使用していて、ServletContext (またはドリルダウンして ServletContext を取得できる HttpServletRequest または HttpSession) にアクセスできる場合:

    ServletContext.getRealPath("/"); // will return the root of your web app
    
于 2012-05-17T00:21:48.227 に答える