Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java XMLOutPutter和FileWriter不使用上下文路径_Java_Xml_Servlets - Fatal编程技术网

Java XMLOutPutter和FileWriter不使用上下文路径

Java XMLOutPutter和FileWriter不使用上下文路径,java,xml,servlets,Java,Xml,Servlets,您好,我很难理解为什么不能使用上下文路径写入xml文件,但可以使用它获取xml文档。我正在尝试向现有xml文件添加内容 URL path = getServletContext().getResource("/WEB-INF/workinfo.xml"); 在我的servlet中,我使用这一简单的行来获取xml文件的路径 URL path = getServletContext().getResource("/WEB-INF/workinfo.xml"); 然后我实例化一个对象,这也是执行x

您好,我很难理解为什么不能使用上下文路径写入xml文件,但可以使用它获取xml文档。我正在尝试向现有xml文件添加内容

URL path = getServletContext().getResource("/WEB-INF/workinfo.xml");
在我的servlet中,我使用这一简单的行来获取xml文件的路径

URL path = getServletContext().getResource("/WEB-INF/workinfo.xml");
然后我实例化一个对象,这也是执行xml工作的方法所必需的。然后调用该方法

    WorktoXML workto = new WorktoXML();
    workto.uploadToXML(works, path);
下面是我的方法,它在我的类WorktoXML中,我正在从我的servlet调用它

 public void uploadToXML(work workss, URL path) throws JDOMException,
                IOException {

        work work = workss;

        SAXBuilder saxBuilder = new SAXBuilder();

        Document document = saxBuilder.build(path.toString());

        Element root = document.getRootElement();

        List<Element> list = root.getChildren("works");
        String id = Integer.toString(list.size());
        Element works = new Element("works");

        works.setAttribute(new Attribute("id", id));
        works.addContent(new Element("username").setText(work.getUsername()));
        works.addContent(new Element("subject").setText(work.getSubject()));
        works.addContent(new Element("body").setText(work.getBody()));
        works.addContent(new Element("imageurl").setText(work.getImagepath()));

        document.getRootElement().addContent(works);   
        XMLOutputter xmlOutput = new XMLOutputter();    
        xmlOutput.output(document, System.out);
        xmlOutput.setFormat(Format.getPrettyFormat());

        //This is where it goes wrong.
        xmlOutput.output(document,new FileWriter(path.toString())));
    }
public void uploadToXML(工作,URL路径)抛出JDOMException,
IOException{
工作=工作;
SAXBuilder SAXBuilder=新SAXBuilder();
Document Document=saxBuilder.build(path.toString());
元素根=document.getRootElement();
List=root.getChildren(“工作”);
字符串id=Integer.toString(list.size());
要素工程=新要素(“工程”);
works.setAttribute(新属性(“id”,id));
works.addContent(新元素(“用户名”).setText(work.getUsername());
works.addContent(新元素(“subject”).setText(work.getSubject());
works.addContent(新元素(“body”).setText(work.getBody());
works.addContent(新元素(“imageurl”).setText(work.getImagepath());
document.getRootElement().addContent(works);
XMLOutputter xmlOutput=新的XMLOutputter();
输出(文档,系统输出);
setFormat(Format.getPrettyFormat());
//这就是问题所在。
输出(文档,新的FileWriter(path.toString());
}
运行上述命令会导致java.io.FileNotFoundException: 如果我只使用xml文件的绝对路径,它就可以工作,但这并不理想


感谢您的帮助。请告诉我是否可以提供有关我的问题的更多信息。

出于安全原因,.war文件是不可变的

当然,容器可以解压.war文件以获得更好的性能,但是解压后的文件永远不应该更新。当然,除了用新的.war文件或课程升级webapp

任何上载的文件都必须存储在.war文件之外以及分解/解包的.war目录结构之外的其他位置

你把它放在哪里取决于你自己。在目录中,在数据库中,在其他位置


如果您希望webapp附带默认资源,但允许上载自定义资源,请将自定义资源存储在您选择的位置。以后查询资源时,首先检查是否存在自定义文件。如果没有,那么您将像以前一样获得默认资源,并将其返回。

非常感谢您的帮助。多亏了你,我现在成功了!