如果我想在Javaservlet中解析xml文件,我应该在哪里找到它
我想在servlet中解析xml文件,但出现了一个异常,JVM无法指定xml文件位置 这是个例外如果我想在Javaservlet中解析xml文件,我应该在哪里找到它,java,xml,servlets,Java,Xml,Servlets,我想在servlet中解析xml文件,但出现了一个异常,JVM无法指定xml文件位置 这是个例外 java.io.FileNotFoundException: FormFieldsNames.xml (The system cannot find the file specified) 我试图将xml文件放在项目方向、JavaSRC包和servlet包中,但所有这些尝试都得到了相同的结果 我应该在哪里找到xml文件,请提前帮助和感谢 如果您将其包含在jar/war文件中,您应该能够使用Clas
java.io.FileNotFoundException: FormFieldsNames.xml (The system cannot find the file specified)
我试图将xml文件放在项目方向、JavaSRC包和servlet包中,但所有这些尝试都得到了相同的结果
我应该在哪里找到xml文件,请提前帮助和感谢 如果您将其包含在jar/war文件中,您应该能够使用
Class.getResourceAsStream
或ClassLoader.getResourceAsStream
轻松加载它。这样做,而不是试图将其作为实际文件加载到文件系统中。通常的位置是:
-由WEB-INF/
getServletContext()获取。getResourceAsStream(..)
-通过上述或WEB-INF/classes
getClass()获取。getResourceAsStream(..)
InputStream is=MyServlet.getClass().getResourceAsStream("/path/to/file/example.txt")
它将查找存储在下的文件
WEB-INF/classes/path/to/file/example.txt
注意引导语/引导语,它经常吸引人
应用程序容器可以从本地文件系统读取数据(例如,如果您想获得外部属性,而不想使用JNDI)。为此,您将使用通常的文件访问过程:
InputStream fis = FileInputStream(new File("/usr/share/myapp/another-example.txt"));
当然,如果您想将DOM指向它,那么MyServlet可以包含以下内容:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = dbf.newDocumentBuilder();
InputStream is = MyServlet.getClass().getResourceAsStream("/path/to/my/example.xml");
Document document = documentBuilder.parse(new InputSource(is));
// And start exploring the NodeList...
NodeList nodeList = document.getFirstChild().getChildNodes();
这应该可以奏效。@Bozho-我尝试了这两种方法,但我使用了XMLStreamReader=factory.createXMLStreamReader(新文件阅读器(文件名));读取XML文件,然后通过STAX处理它,但同样的异常@Alaa-您正在传递一个文件名。我从来没有写过这样的东西。我写了如何获得
InputStream
。您可以通过InputStreamReader
从Stream获取读卡器。使用它。@Bozho-我将InputSream作为参数传递,但我认为传递文件名可能更有用!!你觉得怎么样?@Alaa-对谁有用?传递输入流被广泛使用。请记住,war文件可能在未爆炸的情况下运行-那么您没有物理文件。@Bozho-war文件在web组件中包含xml文件,那么“那么您没有物理文件”是什么意思??xml将在哪里加载?关于输入流,我知道读取任何文件并将其加载到内存中都是对象?所以你的意思是我最好让对象兑现吗?@Gray Rowe-如果我不想从servlet生成对象呢???如何使用这个MyServlet.getClass().getResourceAsStream(“/path/to/my/example.xml”)@Alaa上述方法适用于任何类别。您的servlet可以只调用处理查找的类的实例,只需用适当的类名替换MyServlet即可。如果可以,我需要指定servlet中的xml位置,以便使用:InputStream fis=this.getClass().getResourceAsStream(“/FormFieldsNames.xml”);许多thanxit strutsgetClass().getResourceAsStream(文件名)代码>为我工作。因此,如果文件在项目中,我不能直接创建InputStream。是否有一些概念上的解释?@saifan是一个抽象类。通常,您依赖工厂方法来创建实现。