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;文档声明必须为结束!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约束文件:HelloServletcom.oracle.helloservletHelloServlet/hello Schema约束文件规范: 解析方式和解析器: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();
    }
}
 

相关内容推荐