web java应用程序中的xml属性文件位置

web java应用程序中的xml属性文件位置,java,xml,file,servlets,properties,Java,Xml,File,Servlets,Properties,我有一个java的web应用程序,在servlet中我需要从xml文件加载属性 代码是 XMLReader reader = XMLReaderFactory.createXMLReader(); ... FileInputStream fis = new FileInputStream("myconf.xml"); reader.parse(new InputSource(fis)); 我的问题是:myconf.xml文件应该放在war文件中的什么位置,以便servlet可以找

我有一个java的web应用程序,在servlet中我需要从xml文件加载属性

代码是

XMLReader reader = XMLReaderFactory.createXMLReader();
...       
FileInputStream fis = new FileInputStream("myconf.xml");
reader.parse(new InputSource(fis));
我的问题是:myconf.xml文件应该放在war文件中的什么位置,以便servlet可以找到它

谢谢不要使用带有相对路径的FileInputStream。您将依赖于当前的工作目录,在Java代码内部您完全无法控制该目录。而是将文件放在类路径中并使用

本例期望文件位于类路径的根目录中。从IDE的角度来看,它可以是src文件夹的根目录,也可以是/WEB-INF/classes文件夹的根目录。你甚至可以把它放在外部的其他地方,添加它的绝对值!服务器配置中某个位置的运行时类路径

另见: 不要使用具有相对路径的FileInputStream。您将依赖于当前的工作目录,在Java代码内部您完全无法控制该目录。而是将文件放在类路径中并使用

本例期望文件位于类路径的根目录中。从IDE的角度来看,它可以是src文件夹的根目录,也可以是/WEB-INF/classes文件夹的根目录。你甚至可以把它放在外部的其他地方,添加它的绝对值!服务器配置中某个位置的运行时类路径

另见:
还要注意这里获得类加载器的方式。这是正确的方法。我经常看到的不正确的方式是这样的:this.getClass.getClassLoader。对于多层次类加载器起作用的Web应用程序,它确实是首选方式。您不应该依赖当前所在类的类加载器。在使用单个类加载器的简单桌面应用程序中,这并没有什么坏处。还请注意这里获得类加载器的方式。这是正确的方法。我经常看到的不正确的方式是这样的:this.getClass.getClassLoader。对于多层次类加载器起作用的Web应用程序,它确实是首选方式。您不应该依赖当前所在类的类加载器。在带有单个类加载器的简单桌面应用程序中,它不会造成任何损害。
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("/myconf.xml");