以下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目录中的不是。这是一个问题吗?
答案 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应用程序内,而不是在类路径中。