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



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

这是我的环境:操作系统是Windows7。IDE是Eclipse 4.2.3开普勒64位。服务器是Tomcat 6.0.37,运行在8081端口上。

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

我有一个app.properties文件,它位于WEB-INFlib文件夹中。这是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:类加载器的名称=org.apache.catalina.loader.WebappClassLoader
应用程序属性:propertiesFile=空

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

感谢

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

如果你想让它像一个普通的文件,它必须在WEB-INF/classes里面。

相关内容

  • 没有找到相关文章

最新更新