为什么我无法在类路径中使用getResourceAsStream读取属性文件(在WEB-INF / lib下)

时间:2015-03-17 23:48:19

标签: java eclipse tomcat servlets properties

当属性文件在classpath(在WEB-INF \ lib文件夹下)时,我正在测试使用getResourceAsStream读取属性文件。而且由于某种原因它不起作用。谁能告诉我我做错了什么?

这是我的环境:操作系统是Windows 7. IDE是Eclipse 4.2.3 Kepler 64位。服务器是在8081端口上运行的Tomcat 6.0.37。

我创建了一个Web应用程序 MyWebProject

我有一个app.properties文件,位于WEB-INF\lib文件夹中。这是app.properties文件的内容:

  

数据源= JDBC / MYDB

我创建了一个读取此文件的类AppProperties。这是班级:

public final class AppProperties {

    private static String DATA_SOURCE_NAME;

    public static String getDataSourceName() {
        return DATA_SOURCE_NAME;
    }

    static {

        ClassLoader classLoader = null;
        InputStream propertiesFile = null;
        Properties properties = null;
        final String PROPERTIES_FILE_NAME = "app.properties";

        properties = new Properties();
        classLoader = Thread.currentThread().getContextClassLoader();
        System.out.println("AppProperties: Name of classLoader = " + classLoader.getClass().getName());
        propertiesFile = classLoader.getResourceAsStream(PROPERTIES_FILE_NAME);
        System.out.println("AppProperties: propertiesFile = " + propertiesFile);

    }
}

然后我创建了一个Servlet AppPropertiesServlet来测试它:

public class AppPropertiesServlet extends HttpServlet {

    public AppPropertiesServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {       
        String dataSourceName = null;

        dataSourceName = AppProperties.getDataSourceName();
    }
}

我在Tomcat上部署了Web应用程序 MyWebProject 。因此,在Tomcat的webapps文件夹下,创建了一个包含所有必需文件的新文件夹MyWebProject。然后我运行servlet http://localhost:8081/MyWebProject/AppPropertiesServlet 这就是Tomcat控制台上出现的内容:

  

AppProperties:classLoader =的名称   org.apache.catalina.loader.WebappClassLoader
AppProperties:   propertiesFile = null

为什么propertiesFile为null? app.properties文件位于WEB-INF\lib文件夹的MyWebProject文件夹中,但不知何故,类加载器无法找到它。奇怪。我在这里做错了什么?

由于

1 个答案:

答案 0 :(得分:1)

如果您希望它位于WEB-INF/lib之下,则必须将其打包在JAR中。

如果您希望它像普通文件一样,则必须位于WEB-INF/classes内。