通过web.xml配置文件,使用DOM4J解析XML

web.xml配置文件

         * DOM4J解析XML

         * 拿到cn.itcast.servlet.HelloServlet

         * 就可以通过反射Class对象可以获得类中的属性和方法。

 

                            <web-app>

                                   <servlet>

                                          <servlet-name>HelloServlet</servlet-name>

                                          <servlet-class>cn.itcast.servlet.HelloServlet</servlet-class>

                                   </servlet>

                            </web-app>

  过程:   

     * 容器(服务器)启动。加载配置文件,读取配置文件,然后进行解析。拿到配置文件内容。通过反射创建实例,拿到类中方法。

                  * 加载.class文件。不能使用xxx.java文件。

代码

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>cn.itcast.servlet.HelloServlet</servlet-class>
    </servlet>
</web-app>
package cn.itcast.servlet;

public class HelloServlet {
    
    public void run(){
        System.out.println("正在跑...");
    }

}
import java.io.FileOutputStream;
import java.lang.reflect.Method;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import cn.itcast.reflect.Person;

/**
 * DOM4J的解析XML
 * @author Administrator
 *
 */
public class Dom4jTest {
    
    public static void main(String[] args) {
        try {
            run1();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    
    /**
     * 对XPATH的支持
     * @throws Exception
     */
    public static void run1() throws Exception{
        // 获取解析器对象
        SAXReader reader = new SAXReader();
        // 解析XML
        Document document = reader.read("src/myweb.xml");
                                            
        List<Node> list = document.selectNodes("//servlet-class");
        Node packet = list.get(0);
        System.out.println(packet.getText());
       //acket.getTextContent()等于cn.itcast.servlet.HelloServlet

Class clazz
= Class.forName(packet.getText()); HelloServlet p = (HelloServlet) clazz.newInstance(); Method m = clazz.getDeclaredMethod("run"); m.invoke(p); } }

结果

cn.itcast.servlet.HelloServlet
正在跑...

 

posted on 2019-06-12 11:27  backend  阅读(284)  评论(0编辑  收藏  举报

导航