美文网首页我爱编程
JavaEE_day11_XML&反射

JavaEE_day11_XML&反射

作者: 背对背拥抱 | 来源:发表于2017-06-03 21:43 被阅读0次

    一、XML:

    • 概念:Extendsible Markup language,可扩展的标记语言。
    • 语法:
      1.文档声明:
    <?xml version="1.0" encoding="UTF-8"?>
    

    二、DTD约束:

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

    实例:

    三、Schema约束:

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

    四、dom4j:

    dom解析原理及结构模型:

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


    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<Element> 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&反射

        本文链接:https://www.haomeiwen.com/subject/dbymfxtx.html