2012-05-16 47 views
1

我正在開發NetBeans 7.1.1中的Maven Web應用程序,並將Apache Tomcat 7.0.22作爲服務器。在運行或調試應用程序時,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」。NetBeans Maven {tomcat_base}/bin文件夾作爲錯誤類路徑

當搜索圖像或其他文件時,會發生同樣的問題。它在「/home/user/apache-tomcat-7.0.22/bin」中開始搜索...

項目文件不在Tomcat基礎中,所以我不知道爲什麼bin文件夾用作classpath的基礎。在代碼客戶端(例如* .jsp)中,找到了正確的路徑,但沒有找到服務器端代碼(Java類)!

此問題與其他用戶在https://stackoverflow.com/questions/7774446/netbeans-setting-default-current-directory-for-tomcat中提到的問題相同,但未提供任何解決方案。

這可能是NetBeans Maven插件的錯誤?如何解決這個問題呢?

回答

2

如果你依賴於使用Tomcat,那麼你可以使用兩個系統屬性:

  • 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文件夾如果您使用

    Classloader.getResourceAsStream("/test.xml"); 
    
  • :,您可以使用使用加載它們作爲InputStreams 2.5 Servlet規範或超越,可以訪問ServletContext中(或HttpServletRequest的HttpSession中或從中你可以深入獲取ServletContext中):

    ServletContext.getRealPath("/"); // will return the root of your web app 
    
+0

謝謝克里斯。我會試試看。 – ricardoc