Java 如何从部署为.war文件并在Tomcat5.5中运行的servlet访问配置文件?

Java 如何从部署为.war文件并在Tomcat5.5中运行的servlet访问配置文件?,java,tomcat,Java,Tomcat,我试图从.war文件中的servlet访问配置文件。问题是,默认文件路径是tomcat根目录本身,硬编码文件路径似乎也不是一个选项。是否可以通过ServletContext或任何Tomcat变量获取任何信息?我完全不确定这样做是否“正确”,但在过去,我已经读取了一个环境变量作为配置文件的路径 类似这样的情况(您应该比本例更好地处理异常……但您明白了要点): 如果将文件放在特定webapps目录(./webapps/{servlet}/classes)下的“classes”目录中,则可以通过以下操

我试图从.war文件中的servlet访问配置文件。问题是,默认文件路径是tomcat根目录本身,硬编码文件路径似乎也不是一个选项。是否可以通过ServletContext或任何Tomcat变量获取任何信息?

我完全不确定这样做是否“正确”,但在过去,我已经读取了一个环境变量作为配置文件的路径

类似这样的情况(您应该比本例更好地处理异常……但您明白了要点):


如果将文件放在特定webapps目录(./webapps/{servlet}/classes)下的“classes”目录中,则可以通过以下操作从Java类内部访问该文件:

Class.getResourceAsStream(<filename>);
甘道夫给出了“正确”的答案。你可以在任何地方安全地使用它。这就是你所需要的

只是提醒一下。有些人认为,因为有从战争中读取数据的方法,这意味着在战争中写入数据也是可以的。从字面意义上讲,有时这是真的。但并非总是如此。而且几乎从来都不安全

我之所以提到这一点,是因为我继承了一个网络应用程序。将文件的整个目录树存储在分解的WAR目录中。第一次软件升级时,“噗!”所有仔细上传的数据文件都不见了

因此,将战争视为只读。如果需要写入,请在appserver外部指定一个目录。最好是作为web.xml文件中的可配置参数,这样您就可以使用JNDI来查找它,并且无需修改源代码就可以覆盖它进行测试

Class.getResourceAsStream(<filename>);
Class.getResourceAsStream("conf.xml");