无法在JSP中读取属性文件

时间:2012-01-03 08:30:37

标签: java jsp properties stream classpath

以下JUnit测试正在我的应用程序中运行:

@Test
public void testMessageResources(){
    final InputStream stream = getClass().
        getResourceAsStream("/com/service/MessageResources.properties");
    Assert.assertNotNull(stream);
}

但在我的JSP中,我无法使用此代码读取文件:

<%
    final InputStream resourceAsStream = application.
        getResourceAsStream("/com/service/MessageResources.properties");
%>

resourceAsStream始终为null。我正在使用JSP 2.1。


MessageResources.properties文件位于类路径中,但JSP目录中的不是。这是一个问题吗?

2 个答案:

答案 0 :(得分:5)

JSP使用ServletContext.getResourceAsStream(),它与Class.getResourceAsStream()的功能不同。它不搜索类路径中的资源。如果您要使用Class.getResourceAsStream(),请使用Class.getResourceAsStream()。它也适用于Java EE环境。只需确保使用从您要用于加载属性文件的类加载器加载的类。

但是,这样的方法调用不应该在JSP中完成,而是在Servlet或JSP中执行的操作中。应该使用JSP来生成标记。

答案 1 :(得分:1)

getClass()。getResourceAsStream()搜索类路径中的文件,而application.getResourceAsStream直接在Web应用程序中查找资源。所以目录&#39; com&#39;应该在您的Web应用程序内,而不是在类路径中。