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 ”。

搜索图像或其他文件时,会出现同样的问题。它开始在“/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,那么您可以利用两个系统属性:

  • 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 或更高版本的 servlet 规范,并且您可以访问 ServletContext(或 HttpServletRequest 或 HttpSession,您可以从中深入获取 ServletContext):

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