下面的代码在Tomcat中运行得很漂亮,但是对getResource(...)的调用在WebSphere 6.1中返回null。我尝试过使用Thread.currentThread()。getClassLoader()和MyClass.class.getClassLoader() - 都返回null。
URL url = null;
ClassLoader cl = MyClass.class.getClassLoader();
LOG.info("Using class's classloader.");
url = cl.getResource("resources/AConfigFile.xml");
if(url == null) {
throw new RuntimeException("The ClassLoader returned null for the URL of the " +
"the XML Document. This is definitely not right.");
}
......我也试过这个,没有运气......
URL url = null;
url = MyClass.class.getResource("resources/AConfigFile.xml");
if(url == null) {
throw new RuntimeException("The ClassLoader returned null for the URL of the " +
"the XML Document. This is definitely not right.");
}
这是怎么回事?如何在类路径上正确获取资源的URL?
答案 0 :(得分:4)
我猜不同之处在于ClassLoader
的行为方式。您可以使用Class
变体吗? MyClass的。class.getResource()?我们一直在WebSphere 6.1下使用Class.getResourceAsStream()
。
或者尝试使用前导斜杠替换资源路径。
使用Class
变体,您的相对路径将显示在resources
包下的MyClass
子目录中。但ClassLoader
变种可能不会。
答案 1 :(得分:1)
在servlet容器中,您应分别使用ServletContext.getResource()
和ServletContext.getResourceAsStream()
而不是Class.getResource()
和Class.getResourceAsStream()
。它更可能在不同的servlet容器中表现一致。
另外,仔细检查您的相对路径在您使用它的上下文中是否正确。尝试一个绝对路径,看看它是否有效。