zoukankan      html  css  js  c++  java
  • 2018-08-31XML文件+DTD约束文件+Schema约束文件

    Java里面两种配置文件:XML和Properties文件!

    只要是A标签这种没有办法指定提交方式(GET/POST)的标签,都是GET方式提交!

    Servlet:请求-->响应!

    XML指可扩展标记语言,XML被设计用来传输和存储数据!

    Servlet执行机制:

    XML个称为Extensible Markup Language,意思是可扩展的标记语言!XML语法上和HTML比较相似,但HTML中的元素是固定的,而XML的标签是可以由用户自定义的!

    XML文档声明

    1;文档声明必须为<?xml开头,以?>结束!

    2;文档声明必须从文档的0行0列位置开始!

    3;文档声明只有属性!

    versioin:指定XML文档版本,必须属性,不会选择1.1,只会选择1.0!

    encoding:指定当前文档的编码,可选属性,默认值是:utf-8!

    元素Element:

    1;元素是XML文档中最重要的组成部分!

    2;普通元素的结构开始标签,元素体,结束标签组成!

    3:元素体:元素体可以是元素,也可以是文本!

    4:空元素:空元素只有开始标签,而没有结束标签,但元素必须自己闭介!

    5:元素命名:

    区分大小写!

    不能使用空格,不能使用冒号!

    不建议以XML,xml,Xml开头!

    6:格式化良好的XML文档,必须只有一个根元素!

    属性

    1;属性是元素的一部分,它必须出现在元素的开始标签中!

    2;属性的定义格式:属性名=属性值,其中属性值必须使用单引或双引!

    3;一个元素可以有0~N个属性,但一个元素中不能出现同名属性!

    4;属性名不能使用空格,冒号等特殊字符,且必须以字母开头!

    注释:

    XML的注释与HTML相同,即以<!--开始,以-->结束!注释内容会被XML解析器忽略!

    转义字符

    XML中的转义字符与HTML一样(HTML实体)!

    因为很多符号己经被XML文档结构所使用,所以在元素体或属性值中想使用这些符号就必须使用转义字符!

    CDATA区

     

    当大量的转义字符出现在XML文档中时,会使XML文档的可读性大幅度降低!

    此时可以使用CDATA!

    1:内部DTD,在XML文档内部嵌入DTD,只对当前XML有效!

    <?xml version="1.0" encoding="UTF-8"? standalone="yes" ?>

    <!DOCTYPE web-app [

             ...//具体语法

    ]>

    <web-app>

    </web-app>

    2:外部DTD——本地DTD,DTD文档在本地系统上,公司内部自己项目使用!

    3:外部DTD——公共DTD,DTD文档在网络上,一般都有框架提供!

    XML文件中的特殊符号释义:

    定义元素语法:<!ELEMENT元素名 元素描述>

        元素名:自定义

        元素描述包括 : 符号和数据类型

              常见符号: ?  *  +  ()  |  ,

              常见类型:#PCDATA表示内容是文本,不能是子标签

    符号

    符号类型

    描述

    示例

    ?

    问号

    表示该对象可以出现,但只能出现一次

    (菜鸟?)

    *

    星号

    表示该对象允许出现任意多次,也可以是零次

    (爱好*)

    +

    加号

    表示该对象最少出现一次,可以出现多次

    (成员+)

    ()

    括号

    用来给元素分组

    (古龙|金庸|梁羽生),

    (王朔|余杰),毛毛

    |

    竖条

    表明在列出的对象中选择一个

    (男人|女人)

    ,

    逗号

    表示对象必须按指定的顺序出现

    (西瓜,苹果,香蕉)

    DTD和Schema约束:

    Schema约束更加规范化一点!

    Schema优点:

    Schema是新的XML文档约束:

    Schema要比DTD强大很多,是DTD替代者;

    Schema本身也是XML文档,但Schema文档的扩展名为xsd,而不是xml .

    Schema功能更强大,数据类型更完善

    Schema支持名称空间

    DTD约束文件:

    <servlet>

    <!-- 不可以使用空格和冒号 -->

    <!-- 3 -->

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

    <!-- 4是包名加类名文件 -->

    <servlet-class>com.oracle.helloservlet</servlet-class>

    </servlet>

    <servlet-mapping>

    <!-- 2和3名字必须相同 -->

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

    <!-- 1页面进来先找URL地址,必须以/开头 -->

    <url-pattern>/hello</url-pattern>

    </servlet-mapping>

    Schema约束文件规范:

    <!-- Schema约束,需要手动加入结束标签 -->

    <web-app xmlns="http://www.example.org/web-app_2_5"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"

    version="2.5">

    </web-app>

    解析方式和解析器:

    1;DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象!

    ①     优点:元素与元素之间保留结构关系,故可以进行增删改查操作!

    ②     缺点:XML文档过大,可能出现内存溢出显现!

    2;SAX:是一种速度更快,更有效的方法!它逐行扫描文档,一边扫描一边解析!并以事件,驱动的方式进行具体解析,每执行一行,都将触发对应的事件!

    ①    优点:处理速度快,可以处理大文件

    ②    缺点:只能读,逐行后将释放资源!

    3;PULL:Android内置的XML解析方式,类似SAX!

    解析器释义:

    ①    解析器:就是根据不同的解析方式提供的具体实现,有的解析器操作过于繁琐,为了方便开发人员,有提供易于操作的解析开发包!

    ①    常见的解析开发包:

    ①  JAXP:Sun公司提供支持DOM和SAX开发包!

    ②  JDom:Dom4J兄弟!

    ③  JSoup:一种处理HTML特定解析开发包!

    ④  Dom4J:比较常用的解析开发包,Hibernate底层采用!

    原理示意图:

    解析器使用如下:

    步骤:

    1.获取解析器

    2.获得document文档对象

    3.获取根元素

    4.获取根元素下的子元素

    5.遍历子元素

    6.判断元素名称为servlet的元素

    7.获取servlet-name元素

    8.获取servlet-class元素

    作业代码:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
    <web-app>
    <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.oracle.homework.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/HelloServlet</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    </web-app>
    
    
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://www.example.org/web-app_2_5" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
    version="2.5">
    <servlet>
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>com.oracle.homework.TestServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/TestServlet</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    </web-app>
    
    
    package com.oracle.homework;
    import java.util.List;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    public class TestQues3 {
        public static void main(String[] args) throws DocumentException {
            //获取解析器:
            SAXReader saxr=new SAXReader();
            //获取Document文档:
            Document doc=saxr.read("src/com/oracle/homework/WebXSD.xml");
            //获取文档中的根标签,拿到web-app:
            Element rootEle=doc.getRootElement();
            //获取跟标签的子标签放进List集合:
            List<Element> childEle=rootEle.elements();
            //遍历该集合:
            for(Element ele:childEle){
                if("servlet".equals(ele.getName())){
                    System.out.println(ele.element("servlet-name").getName());
                    System.out.println(ele.element("servlet-class").getName());
                }else if("servlet-mapping".equals(ele.getName())){
                    System.out.println(ele.element("servlet-name").getName());
                    System.out.println(ele.element("url-pattern").getName());
                }
                System.out.println(ele.getName());
            }
        }
    }
    
    
    //定义接口:
    package com.oracle.homework;
    public interface MyServlet {
        public void init();
        public void service();
        public void distory();
    }
    
    //实现以上接口:
    package com.oracle.homework;
    public class MyServletImp implements MyServlet {
        @Override
        public void init() {
            System.out.println("这是Init");
        }
    
        @Override
        public void service() {
            System.out.println("这是Service");
        }
    
        @Override
        public void distory() {
            System.out.println("这是Distory");
        }
    }
    
    //进行不可描述的操作:
    package com.oracle.homework;
    import java.util.List;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    public class TestMyServlet {
        public static void main(String[] args) throws DocumentException, ClassNotFoundException, InstantiationException, IllegalAccessException {
            //获取解析器:
            SAXReader saxr=new SAXReader();
            //获取Document文档:
            Document doc=saxr.read("src/com/oracle/homework/MyServletXSD.xml");
            //获取根标签web-app:
            Element rootEle=doc.getRootElement();
            //获取rootEle的子元素并放进List集合:
            List<Element> childEle=rootEle.elements();
            //定义String接收,并遍历赋值:
            String getPackClass=null;
            for(Element ele:childEle){
                if("servlet".equals(ele.getName())){
                    getPackClass=ele.element("servlet-class").getText();
                }
            }
            //获取字节码文件对象:
            Class cla=Class.forName(getPackClass);
            //获取Object对象:
            MyServletImp myser=(MyServletImp)cla.newInstance();
            myser.init();
            myser.service();
            myser.distory();
        }
    }
  • 相关阅读:
    常见算法:C语言求最小公倍数和最大公约数三种算法
    java数据结构
    创建与删除索引
    Delphi 2007体验!
    wxWindows
    Android中WebView的相关使用
    IAR FOR ARM 各版本号,须要的大家能够收藏了
    [AngularJS] $interval
    [ES6] 10. Array Comprehensions
    [ES6] 09. Destructuring Assignment -- 2
  • 原文地址:https://www.cnblogs.com/postgredingdangniu/p/9569993.html
Copyright © 2011-2022 走看看