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

标签 java eclipse tomcat servlets properties

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

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

我创建了一个网络应用程序 MyWebProject

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

DataSource=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: Name of classLoader = org.apache.catalina.loader.WebappClassLoader
AppProperties: propertiesFile = null

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

谢谢

最佳答案

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

如果你想让它像普通文件一样,它必须在 WEB-INF/classes 中。

关于java - 为什么在类路径中(在 WEB-INF/lib 下)我无法使用 getResourceAsStream 读取属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29111789/

相关文章:

java - 在基于方言的 Hibernate 标准 API 中使用不同的投影函数

java - 来自 cmdline 的 Junit - java.lang.ClassNotFoundException

java - ${catalina.base}/lib 子目录下的属性文件解析

java - CXF 客户端在 MyEclipse 中工作正常,但在 Tomcat 中出错

java - 空指针访问: The variable arrayLocations can only be null at this location

JAVA servlet 获取数据库返回结果给客户端

java - 使用 JSF 自动完成 Eclipse xhtml

windows - 如何在 Eclipse 上隐藏 Aptana 起始页?

python - PyDev 中假的 Unresolved 导入错误

java - 服务器端如何使用 jquery 或 javascript 将数据推送到客户端?