0 0

用Jdom向web.xml添加节点出错5

想通过Jdom向web.xml文件添加servlet的配置信息。如:
<servlet>
        <servlet-name>xxx</servlet-name>
        <servlet-class>com.sdt.action.xxx</servlet-class>
</servlet>
<servlet-mapping>
        <servlet-name>xxx</servlet-name>
        <url-pattern>/xxx</url-pattern>
</servlet-mapping>
但是总是报这样的错误:Exception in thread "main" org.jdom.IllegalAddException: The Content already has an existing parent "servlet"
我的代码如下:
import java.io.File;
import java.io.FileOutputStream;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.Parent;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;


/**向web.xml中增加Servlet配置
 *
 * @author liujia
 */
public class DomUtil {
    
    public static void add(String tableName) throws Exception {
        String className = "PersonServlet" ;
        String servletPackage = "com.sdt.servlet" ;
        
        String fileName = "d:/netbeans/workday01/src/test/javaeye/web.xml" ;
        File f = new File(fileName) ;
        SAXBuilder builder = new SAXBuilder() ;
        Document doc = builder.build(f) ;
        Element root = doc.getRootElement() ;
        System.out.println("root: " + root.getName());
        Element servlet = new Element("servlet") ;
        Element servletMapping = new Element("servlet-mapping") ;
        Element servletName = new Element("servletName") ;
        Element servletClass = new Element("servletClass") ;
        Element urlPattern = new Element("urlPattern") ;
        
        servletClass.setText(servletPackage + "." + className) ;
        servletName.setText("className") ;
        urlPattern.setText("/" + className) ;
        
        servlet.addContent(servletName) ;
        servlet.addContent(servletClass) ;
        servletMapping.addContent(servletName) ;
        servletMapping.addContent(urlPattern) ;
        
        Parent p = root.getParent();
        p.removeContent(root);
        root.addContent(servlet) ;
        root.addContent(servletMapping) ;
        
        XMLOutputter out = new XMLOutputter() ;
        out.setFormat(out.getFormat().setEncoding("GBK")) ;
        out.output(doc, new FileOutputStream(new File(fileName),true)) ;
        
    }
    
    
    public static void main(String[] args) throws Exception {
        add("t_person") ;
    }
}

希望大家能帮帮我,实在是解决不了了。

问题补充:谢谢大家的回答,根据cmyx2008love的意见,修改后确实可以生成,但是生成的代码是这样的:
<servlet xmlns=""><servletName>PersonServlet</servletName><servletClass>com.sdt.servlet.PersonServlet</servletClass></servlet><servlet-mapping xmlns=""><servletName>PersonServlet</servletName><urlPattern>/PersonServlet</urlPattern></servlet-mapping>
servlet和servlet-mapping节点都有属性了,怎么才能去掉呢?

问题补充:已经解决了。方法如下:
Namespace ns1 = Namespace.getNamespace("http://java.sun.com/xml/ns/javaee"); 
        servlet.setNamespace(ns1); 
        servletMapping.setNamespace(ns1) ;
        servletName1.setNamespace(ns1) ;
        servletName2.setNamespace(ns1) ;
        servletClass.setNamespace(ns1) ;
        urlPattern.setNamespace(ns1) ;
2012年6月05日 22:19

3个答案 按时间排序 按投票排序

0 0

采纳的答案

第26行代码  Element servlet = new Element("servlet") ;  

servlet节点不能共享,只能是一个节点的子节点,不能即是a节点的子节点又是b节点的子节点
也就是说解决你的问题在于
第38行代码
servletMapping.addContent(servletName) ;  

处修改为
servletMapping.addContent( new Element("servletName")) ;  


另外42行处
  p.removeContent(root);  
干什么吧根节点给删除了?
如果跟节点删除了,没有根节点
那么document就不完整了,你后面也没有显示的增加,所以,是你的思路的问题;再好好的整理一下!

2012年6月06日 08:49
0 0

楼主竟然运行时改web.xml?
我out了 还是楼主碉堡了

2012年6月06日 11:27
0 0

这个功能有用吗?web.xml不是在服务器启动的时候加载的吗?

2012年6月06日 09:08

相关推荐

    DWR.xml配置文件说明书(含源码)

    实际上并不会使用.这有点向java中的import语句,多数类在使用之前需要引入,但引入了类并不意味着这些在使用,每个creator和converter需要有个id属性来允许以后进行引用. 配置文件的allow部分定义哪些类可以建立和转换,...

    java操纵xml文件的读写,并根据xml生成树型菜单

    ### Java操作XML文件读写与树型...通过上述分析,我们不仅了解了如何使用Java和JDOM库读写XML文件,还探讨了基于XML数据生成树型菜单的基本思路。这对于开发需要处理复杂结构化数据的应用程序来说是非常有用的技能。

    xml解析工具类

    - 注解支持:通过在Java类的字段上添加特定注解,可以自定义XML节点的名称、命名空间等,提高灵活性。 - 处理复杂结构:如果XML文档包含嵌套元素或多个同名元素,工具类可能提供了处理数组或集合的方法。 - 错误...

Global site tag (gtag.js) - Google Analytics