Java tomcat 5.5-读取资源文件时出现问题

Java tomcat 5.5-读取资源文件时出现问题,java,tomcat,servlets,resources,Java,Tomcat,Servlets,Resources,我使用Tomcat5.5作为servlet容器。我的web应用程序通过.jar部署,并且在其web-INF目录下有一些资源文件(带有字符串和配置参数的文本文件)。Tomcat 5.5在ubuntu linux上运行。使用文件读取器读取资源文件: fr=newfilereader(“messages.properties”) 问题是,有时候servlet找不到资源文件,但是如果我重新启动它几次,它就会工作,然后在一段时间后又会停止工作。 有人能提出从servlet读取资源字符串的最佳方法吗?还是解

我使用Tomcat5.5作为servlet容器。我的web应用程序通过.jar部署,并且在其web-INF目录下有一些资源文件(带有字符串和配置参数的文本文件)。Tomcat 5.5在ubuntu linux上运行。使用文件读取器读取资源文件:
fr=newfilereader(“messages.properties”)

问题是,有时候servlet找不到资源文件,但是如果我重新启动它几次,它就会工作,然后在一段时间后又会停止工作。 有人能提出从servlet读取资源字符串的最佳方法吗?还是解决这个问题的方法?
将资源文件放在WEB-INF/classes下也没有帮助。

我猜问题在于您试图使用相对路径访问该文件。 使用绝对路径应该有帮助(即“/home/tomcat5/properties/messages.properties”)

然而,这个问题的通常解决方案是使用类加载器的getResourceAsStream方法。将属性文件部署到“WEB-INF/classes”将使类加载器可以使用它,并且您将能够访问属性流

未测试的原型代码:

Properties props = new Properties();

InputStream is =
getClass().getClassLoader().getResourceAsStream("messages.properties");

props.load(is);
如果你使用

new FileReader("message.properties");
然后,FileReader将尝试从基本目录中读取该文件—在Tomcat中很可能是/bin文件夹


如diciu所述,使用绝对路径或将其作为资源加载到类加载器。

如果您试图从支持Servlet的类(如ContextListener或其他生命周期侦听器)访问此文件,则可以使用ServletContext对象获取资源的路径

这三者大致相当。(不要将getResourceAsStream与
类加载器提供的流混淆。它们的行为非常不同)


我使用以下代码从servlet中加载属性文件:

public void init(ServletConfig config) throws ServletException {
    String pathToFile = config.getServletContext().getRealPath("")
        + "/WEB-INF/config.properties";
    Properties properties = new Properties();
    properties.load(new FileInputStream(pathToPropertiesFile));
}

这与我在Jboss Seam中使用的Tomcat 6.0兼容:


ServletLifecycle.getServletContext().getRealPath(“”)

这与所问的问题有什么关系?
public void init(ServletConfig config) throws ServletException {
    String pathToFile = config.getServletContext().getRealPath("")
        + "/WEB-INF/config.properties";
    Properties properties = new Properties();
    properties.load(new FileInputStream(pathToPropertiesFile));
}