全部,
我决定在我的 servlet 中采用 java.util.Properties 类,以便于更轻松地维护配置。
我正在使用 poperties 类函数 loadFromXML 来获取包含变性(符合 XML 的)SQL 查询的 XML 文件,然后我的 servlet 将执行该查询。
使用此代码在普通 CLI Java 应用程序中运行良好:
// retrieve all queries from xml from classpath
queries = new Properties();
try
{
String path = getServletContext().getRealPath("/WEB-INF");
System.out.println(path + "/queries.xml");
queries.loadFromXML(MyServlet.class.getResourceAsStream(path + "/queries.xml"));
}
catch (IOException io)
{
io.printStackTrace();
}
输出是 loadFromXML 方法抛出的 NULL 指针异常
java.lang.NullPointerException at java.util.Properties.loadFromXML(Properties.java:851)
该文件存在于 Web 服务器日志中的系统输出消息中。
CORE3282: stdout: /u02/SunONE61060/testserver/myservlet/WEB-INF/queries.xml
我尝试将 XML 文件移动到 Servlet 类所在的基目录并从那里调用它,但仍然是相同的 NPE。
有什么想法吗?
最佳答案
您的问题在这里:
MyServlet.class.getResourceAsStream(path + "/queries.xml")
这将返回null
。 .getResourceAsStream()
只能从类路径加载(例如,/com/foo/myclass/MyResource.xml
)。
由于您拥有资源的绝对路径,因此只需使用标准的 FileInputStream
即可。
另外:完成后关闭您的信息流。现在你不知道:你有资源泄漏。请参阅 Closeable
的 javadoc。
关于在 servlet 中加载 XML 文件时,Java Properties 类抛出 NPE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22038117/