用xml作为数据源存储数据。在后台用dom动态修改添加xml中的内容。
我在前台页面用ajax定时读取xml。
xml被动态修改后,前台页面不能获取修改后的xml文档内容,必须重启tomcat才能将修改后的xml文档读出来。
如何才可以不用reloading context,就将修改后的xml文档显示出来?
我想在刷新页面以后就将修改后的xml文档内容读出来~~,该怎么办?

解决方案 »

  1.   

    你在xml写入时需要关闭连接,没有关闭时是没办法读到新的信息,下面是我二个方法,一个是读,一个是写,供参考:/**
     * 把数据写到XML文件的方法
     * 
     * @param doc
     *            需要写入数据的XML文件的Document
     */
    private void output_xml(Document doc) { ConfigManager xmlConfig = new ConfigManager(
    "./servConfig/xmlConfig.ini");
    File file = new File(xmlConfig.getValue("xml_path"));
    OutputFormat op_format = OutputFormat.createPrettyPrint();
    op_format.setEncoding("GBK");
    op_format.setIndent("\t");
    try {
    XMLWriter xml_writer = new XMLWriter(new FileOutputStream(file),
    op_format);
    xml_writer.write(doc); } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } }
    /**
     * 查找用户数据,
     * 
     * @param doc
     *            要查找的数据文件
     * @param id
     *            通过用户id条件精确查询
     * 
     */
    private Element search_user(Document doc, String id) { Element root = doc.getRootElement();
    String xml_path = "/users/user[@sid='" + id + "']";
    Node node = root.selectSingleNode(xml_path);
    if (node != null) {
    if (node.getNodeType() == Node.ELEMENT_NODE) {
    return (Element) node;
    }
    } return null;
    }
      

  2.   

    再提供一个连接得到数据源的代码: /**
     * 建立数据文件的读取连接
     * 
     * @return 读取成功时返回Document对象,失败则返回空
     */
    public static Document getDocument() { Document doc1 = null;
    ConfigManager xmlConfig = new ConfigManager(
    "./servConfig/xmlConfig.ini");
    File file = new File(xmlConfig.getValue("xml_path"));
    SAXReader xml_read = new SAXReader();
    try {
    doc1 = xml_read.read(file);
    } catch (DocumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return null;
    }
    return doc1; }
      

  3.   

    楼上的朋友,你写了这么多,辛苦了!
    你没明白我的意思,用JSP操纵xml我会用,可是用的时候出了点儿问题。我可以把数据写进xml文件里去,但是要把xml文件读出来的时候只有每次重启tomcat的时候才能读取xml文件,而我刷新页面的时候即使xml文件已经被修改了,也不能读取修改后的xml文件,读到的只是修改前的xml~~
    我想问的是这个问题应该怎么解决?是哪里出问题了?
      

  4.   

    你在xml写入时需要关闭连接,没有关闭时是没办法读到新的信息,下面是我二个方法,一个是读,一个是写,供参考: 
    ~~~~~
    怎么关闭连接呀?
      

  5.   

    对于某个应用,我们一般会在tomcat的配置文件server.xml为它建一个context,为应用配置数据源等,我们修改这个应用的context就可以达到让tomcat自动加载的目的: 
    例如: 
    <Context path="/test" docBase="test" 
    debug="0" privileged="true" reloadable="true" > 
    </Context>
    最重要的就是 reloadable="true"了。 
      

  6.   

    重新写一个配置信息的xml,用系统自带的会是需要重新加载的