Java属性类在servlet中加载XML文件时抛出NPE?

Java属性类在servlet中加载XML文件时抛出NPE?,java,servlets,nullpointerexception,Java,Servlets,Nullpointerexception,全部, 我决定在我的servlet中采用java.util.Properties类,以简化配置的维护 我正在使用poperties类函数loadFromXML获取一个XML文件,该文件包含我的servlet将执行的变性(XML兼容)SQL查询 使用在普通CLI Java应用程序中运行良好的以下代码: // retrieve all queries from xml from classpath queries = new Properties(); try {

全部,

我决定在我的servlet中采用java.util.Properties类,以简化配置的维护

我正在使用poperties类函数loadFromXML获取一个XML文件,该文件包含我的servlet将执行的变性(XML兼容)SQL查询

使用在普通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方法引发的空指针异常

java.lang.NullPointerException 位于java.util.Properties.loadFromXML(Properties.java:851)

该文件存在于web服务器日志中,由system out消息生成

CORE3282:stdout:/u02/SunONE61060/testserver/myservlet/WEB-INF/querys.xml

我尝试将XML文件移动到Servlet类所在的基本目录,并从那里调用它,但仍然是相同的NPE


有什么想法吗?

获取真实路径并将其视为资源路径的一部分是无效的。事实并非如此。下定决心吧。照办

getResourceAsStream("/WEB-INF/classes/.../queries.xml")

在哪里。。。是MyServlet的包,并将资源文件放在那里。

获取真实路径然后将其视为资源路径的一部分是无效的。事实并非如此。下定决心吧。照办

getResourceAsStream("/WEB-INF/classes/.../queries.xml")

在哪里。。。是MyServlet的包,并将资源文件放在那里。

获取真实路径然后将其视为资源路径的一部分是无效的。事实并非如此。下定决心吧。照办

getResourceAsStream("/WEB-INF/classes/.../queries.xml")

在哪里。。。是MyServlet的包,并将资源文件放在那里。

获取真实路径然后将其视为资源路径的一部分是无效的。事实并非如此。下定决心吧。照办

getResourceAsStream("/WEB-INF/classes/.../queries.xml")
在哪里。。。是MyServlet的包,并将资源文件放在那里。

您的问题在于:

MyServlet.class.getResourceAsStream(path + "/queries.xml")
这将返回
null
.getResourceAsStream()
只能从类路径加载(例如,
/com/foo/myclass/MyResource.xml

由于您拥有资源的绝对路径,因此只需使用标准的
FileInputStream

另外:完成后关闭流。现在你没有:你有一个资源泄漏。请参阅javadoc以了解可关闭的

您的问题在这里:

MyServlet.class.getResourceAsStream(path + "/queries.xml")
这将返回
null
.getResourceAsStream()
只能从类路径加载(例如,
/com/foo/myclass/MyResource.xml

由于您拥有资源的绝对路径,因此只需使用标准的
FileInputStream

另外:完成后关闭流。现在你没有:你有一个资源泄漏。请参阅javadoc以了解可关闭的

您的问题在这里:

MyServlet.class.getResourceAsStream(path + "/queries.xml")
这将返回
null
.getResourceAsStream()
只能从类路径加载(例如,
/com/foo/myclass/MyResource.xml

由于您拥有资源的绝对路径,因此只需使用标准的
FileInputStream

另外:完成后关闭流。现在你没有:你有一个资源泄漏。请参阅javadoc以了解可关闭的

您的问题在这里:

MyServlet.class.getResourceAsStream(path + "/queries.xml")
这将返回
null
.getResourceAsStream()
只能从类路径加载(例如,
/com/foo/myclass/MyResource.xml

由于您拥有资源的绝对路径,因此只需使用标准的
FileInputStream


另外:完成后关闭流。现在你没有:你有一个资源泄漏。请参阅javadoc以了解
Closeable

您试图从类路径加载资源,但提供了一个真实的路径。这两个不一样

当你使用

MyServlet.class.getResourceAsStream("queries.xml")
然后类加载器将尝试加载
MyServlet.class
文件所在的类,因此如果包是
my.pkg
,它将尝试从
WEB-INF/classes/my/pkg/querys.xml
加载它

您还可以将查询放入类层次结构的根目录(
WEB-INF/classes/querys.xml
)中,并按如下方式加载:

MyServlet.class.getResourceAsStream("/queries.xml")
然后它将在
WEB-INF/classes/querys.xml
中看到该文件

或者,如果要将文件保留在原来的位置,只需使用servlet上下文获取输入流:

getServletContext().getResourceAsStream("/WEB-INF/queries.xml")

您试图从类路径加载资源,但提供了一个真实的路径。这两个不一样

当你使用

MyServlet.class.getResourceAsStream("queries.xml")
然后类加载器将尝试加载
MyServlet.class
文件所在的类,因此如果包是
my.pkg
,它将尝试从
WEB-INF/classes/my/pkg/querys.xml
加载它

您还可以将查询放入类层次结构的根目录(
WEB-INF/classes/querys.xml
)中,并按如下方式加载:

MyServlet.class.getResourceAsStream("/queries.xml")
然后它将在
WEB-INF/classes/querys.xml
中看到该文件

或者,如果要将文件保留在原来的位置,只需使用servlet上下文获取输入流:

getServletContext().getResourceAsStream("/WEB-INF/queries.xml")

您试图从类路径加载资源,但提供了一个真实的路径。这两个不一样

当你使用

MyServlet.class.getResourceAsStream("queries.xml")
然后类加载器将尝试加载
MyServlet.class
文件所在的类,因此如果包是
my.pkg
,它将尝试从
WEB-INF/classes/my/pkg/querys.xml
加载它

您还可以将查询放入类层次结构的根目录(
WEB-INF/classes/querys.xml
)中,并按如下方式加载:

MyServlet.class.getResourceAsStream("/queries.xml")
然后它将在
WEB-INF/classes/querys.xml
中看到该文件

或者,如果要将文件保留在原来的位置,只需使用servlet上下文获取输入流:

getServletContext().getResourceAsStream("/WEB-INF/queries.xml")

您正在尝试加载