【问题标题】:Read an xml file from a servlet从 servlet 读取 xml 文件
【发布时间】:2013-03-15 15:07:48
【问题描述】:

我无法从我的 servlet 正确加载文件 xml: 这是代码:

       try{

           DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
           DocumentBuilder db = dbf.newDocumentBuilder();
           Document doc = db.parse("db.xml");
       } catch (Exception ex) {
       ex.printStackTrace();
           out.print("File Not Found!");
   }

db.xml 位于类文件夹中,其中包含类和 java 文件...

【问题讨论】:

  • 如果它在类路径中,您需要使用ClassLoader#GetResourceAsStream
  • 文档文档 = ClassLoader.getResourceAsStream("db.xml"); ???
  • 阅读 Class#getResourceAsStream() 的 javadoc。

标签: java xml servlets


【解决方案1】:

你需要使用getResourceAsStream()

    try {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(getClass().getResourceAsStream("db.xml"));
    } catch (Exception ex) {
        ex.printStackTrace();
        out.print("File Not Found!");
    }

【讨论】:

  • 它说找不到文件... db.xml 在我的项目的根文件夹中,也在类文件夹中...是否正确?
  • 试试其他路径,例如“/db.xml”。反复试验会让你无处不在......
  • 你确定资源在你的类路径上?
  • 它在 app/WEB-INF/classes/
  • 而且我在 app/ 上有一份副本
【解决方案2】:

如果您在 war 文件的根文件夹中有 XML 文件,您可以使用上下文应用程序文件夹的 real path 来读取它。

String contextPath = request.getSession().getServletContext().getRealPath("/");

另外一种方式,你可以使用context class loader in a multi-module environment

ClassLoader classloader = Thread.currentThread().getContextClassLoader()
Document doc = db.parse(classloader.getResourceAsStream(contextPath+ "/db.xml"));

在某些环境中,不需要额外的斜线。

【讨论】:

    猜你喜欢
    • 2010-11-11
    • 2012-03-12
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 2011-07-11
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多