当我手动关闭、或者程序发生了很严重的错误,导致tomcat关闭时想在tomcat关闭之前,把下面xml文件修改了,state的文本值改为stopedxml内容:
<?xml version="1.0" encoding="gb2312"?>
<TASK> 
  <property> 
    <state>running</state>   
    <url>http://www.xici.net</url>  
    <keyword>南京</keyword>    
    <policemethod>email</policemethod>  
  </property> 
</TASK>前提是这个文件没有被tomcat占用!

解决方案 »

  1.   

    增加一个钩子Runtime.getRuntime().addShutdownHook(new Thread(){
      public void run() {
        // 自己的代码         
      }
    });
      

  2.   

    假如tomcat正在运行中,你点了关闭,就在你点关闭的时候,把此状态改掉
      

  3.   

    请问obullxl:
    这个钩子该如何用呀,麻烦你说详细点好吗?
    先谢谢您!
      

  4.   

    可以加个监听器
    在关闭程序的时候 监听器启用,在监听器中做修改state的操作
      

  5.   

    哦~!对了把你的web.xml贴上来看看呗~!
      

  6.   

    web.xml还没有配置监听器,只配了一个过滤器和几个servlet请问 zyus1987: 监听器可以实现吗?
      

  7.   


    package xml;import java.io.File;
    import org.w3c.dom.Document;
    import org.w3c.dom.*;import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.DocumentBuilder;
    import org.xml.sax.SAXException;
    import org.xml.sax.SAXParseException;public class XMLRead { public static void main(String argv[]) {
    try { DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
    Document doc = docBuilder.parse(new File("test.xml")); doc.getDocumentElement().normalize();
    NodeList listOfPersons = doc.getElementsByTagName("TASK"); for (int s = 0; s < listOfPersons.getLength(); s++) {
    Node firstPersonNode = listOfPersons.item(s);
    if (firstPersonNode.getNodeType() == Node.ELEMENT_NODE) {
    Element firstPersonElement = (Element) firstPersonNode;
    NodeList firstNameList = firstPersonElement.getElementsByTagName("state");
    Element firstNameElement = (Element) firstNameList.item(0);
    NodeList textFNList = firstNameElement.getChildNodes();//读取state节点的值
    System.out.println("state : " + ((Node) textFNList.item(0)).getNodeValue().trim());
    firstNameElement.setTextContent("stop");//修改state节点的值
    System.out.println("state : " +firstNameElement.getTextContent());
    }
    }
    } catch (SAXParseException err) {
    System.out.println("** Parsing error" + ", line "
    + err.getLineNumber() + ", uri " + err.getSystemId());
    System.out.println(" " + err.getMessage()); } catch (SAXException e) {
    Exception x = e.getException();
    ((x == null) ? e : x).printStackTrace(); } catch (Throwable t) {
    t.printStackTrace();
    }
    }
    }
      

  8.   

    我不是问怎么修改xml文件,不过还是谢谢你的帮助!