我正在使用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文件夹被用作classpath的基础...在代码客户端(例如* .jsp)中,找到了正确的路径,但没有找到服务器端代码(Java类)!
此问题与https://stackoverflow.com/questions/7774446/netbeans-setting-default-current-directory-for-tomcat中的其他用户提到的相同,但没有给出任何解决方案。
这可能是NetBeans Maven插件的错误?如何解决这个问题?
答案 0 :(得分: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
文件夹中,您可以使用以下命令将其作为InputStream使用:
Classloader.getResourceAsStream("/test.xml");
如果您正在使用2.5 servlet规范或更高版本,并且您可以访问ServletContext(或HttpServletRequest或HttpSession,您可以从中深入了解以获取ServletContext):
ServletContext.getRealPath("/"); // will return the root of your web app