JavaEE_day11_XML&反射

一、XML:

  • 概念:Extendsible Markup language,可扩展的标记语言。
  • 语法:
    1.文档声明:

JavaEE_day11_XML&反射_第1张图片

二、DTD约束:

这是一个XML约束,后缀名为.dtd
语法:

JavaEE_day11_XML&反射_第2张图片

实例:

JavaEE_day11_XML&反射_第3张图片

三、Schema约束:

后缀名.xsd,DTD的替代者。

四、dom4j:

JavaEE_day11_XML&反射_第4张图片

dom解析原理及结构模型:

JavaEE_day11_XML&反射_第5张图片

JavaEE_day11_XML&反射_第6张图片

使用dom4j之前,必须要导入相应的jar包:
必须使用SaxReader加载xml文档获得Document,通过Document获取根元素,然后就可以进行相关操作:


JavaEE_day11_XML&反射_第7张图片
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

public class TestDom4j {
    @Test
    public void testReadWebXML() {
        try {
            // 1.获取解析器
            SAXReader saxReader = new SAXReader();
            // 2.获得document文档对象
            Document doc = saxReader.read("src/cn/itheima/xml/schema/web.xml");
            // 3.获取根元素
            Element rootElement = doc.getRootElement();
            // System.out.println(rootElement.getName());//获取根元素的名称
            // System.out.println(rootElement.attributeValue("version"));//获取根元素中的属性值
            // 4.获取根元素下的子元素
            List childElements = rootElement.elements();
            // 5.遍历子元素
            for (Element element : childElements) {
                //6.判断元素名称为servlet的元素
                if ("servlet".equals(element.getName())) {
                    //7.获取servlet-name元素
                    Element servletName = element.element("servlet-name");
                    //8.获取servlet-class元素
                    Element servletClass = element.element("servlet-class");
                    System.out.println(servletName.getText());
                    System.out.println(servletClass.getText());
                }
            }

        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }

}

五、反射:

概念:java反射机制就是在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法。

案例实现:

  • 一个接口:
public interface IMyServlet {

    public void init();

    public void service();

    public void destory();
}
  • 一个实现类:
public class MyServletImpl implements IMyServlet {

    @Override
    public void init() {
        System.out.println("啊,俺来也……");
    }

    @Override
    public void service() {
        System.out.println("我可以为你服务……");
    }

    @Override
    public void destory() {
        System.out.println("啊,俺去也……");
    }
}
  • 一个测试类:
import org.junit.Test;

public class TestMyServlet {

    @Test
    public void testMyServlet(){
        MyServletImpl my = new MyServletImpl();
        my.init();
        my.service();
        my.destory();
    }
    
    @Test
    public void testMyServlet1(){
        try {
            String className = "cn.zl.web.servlet.MyServletImpl";
            Class clazz = Class.forName(className);
            MyServletImpl my = (MyServletImpl) clazz.newInstance();
            my.init();
            my.service();
            my.destory();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • 解析实现:
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

public class TestMyServlet {
    
    @Test
    public void testMyServlet(){
        try {
            //1.创建解析器对象
            SAXReader saxReader = new SAXReader();
            //2.使用解析器加载web.xml文件得到document对象
            Document document = saxReader.read("src/cn/itheima/web/servlet1/web.xml");
            //3.获取根元素节点
            Element rootElement = document.getRootElement();
            //4.根据元素名称获取子元素节点
            Element servletElement = rootElement.element("servlet");
            //5.根据元素名称获取servlet-class的文本节点
            String servletClass = servletElement.element("servlet-class").getText();
            //System.out.println(servletClass);
            //6.通过类全名获取字节码文件
            Class clazz = Class.forName(servletClass);
            //7.创建实例对象
            MyServlet1 my = (MyServlet1) clazz.newInstance();
            //8.调用实例对象里面的方法
            my.init();
            my.service();
            my.destory();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

你可能感兴趣的:(JavaEE_day11_XML&反射)