个人理解:

  知晓XML与HTML的不同,知道其的自由性和约束的方式(规范)!数据按Schema约束写到XML里,然后通过dom4j解析出所有的元素,再用反射创建对象接着调出其所有的方法!!!特别要熟练掌握反射的3种创建对象的方法!

一、模拟Servlet执行

了解WEB服务器就是另一台计算机。

  为了灵活实现的不同路径(/hello)执行不同的资源( HeIIoMyServlet)我们需要使用XML进行配置;为了限定XML内容,我们需要使用xml约束(DTD或schema);为了获得xml的内容,我们需要使用dom4j进行解析。然后可以通过反射进行创建对象,获取其中的方法。

二、XML介绍:

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

  W3C在1998年2月发布1.0版本,2004年2月义发布1.1版本,但因为1.1版本不能向下兼容1.0版本,所以1.1没有人用。同时,在2004年2月W3C又发布了1.0版本的第三版。我们要学习的还是1.0版本!!!

三、XML语法:

1、文档声明:

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

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

②、文档声明必须从文档的0行0列位置开始:(注释也不能加!!!)

③、文档声明只有属性:

a)     versioin:指定XML文档版本。必须属性,因为我们不会选择1.1,只会选择1.0;

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

2、元素element:

①.元素是XML文档中最重要的组成部分,

②.普通元素的结构开始标签、元素体、结束标签组成。例如:<hello>大家好</hello>

③.元素体:元素体可以是元素,也可以是文本,例如:<b><a>你好</a ></b>

④.空元素:空元素只有开始标签,而没有结束标签,但元素必须自己闭介,例如:<c/>

⑤.元素命名:

a)     区分大小写

b)     不能使用空格,不能使用冒号:

c)     不建议以XML,  xml,  Xml开头

⑥.格式化良好的XML文档,必须只有一个根元素。

3、属性:

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

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

③.一个元素可以有O ~ N个属性,但一个元素中不能出现同名属性

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

4、注释:

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

5、转义字符:

XML中的转义字符与HTML一样。

  因为很多符号己经被XML文档结构所使用,所以在元素体或属性值中想使用这些符号就必须使用转义字符,例如:"<"、”>”、” ’ ”、” ” ”、”&”。

6、CDATA区:

  在CDATA段中出现的“<”、“>’,、“””、“‘”、“&”,都无需使用转义字符。这可以提高xml文档的可读性。

在CDATA段中不能包含“]]>”,即CDATA段的结束定界符。

<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person class="黑色" height="192">
<name>熊二</name>
<age>22</age>
</person>
<person>
<name>熊大</name>
<age>
<!-- 转义字符出现在以下区域内,会自动转义! -->
<![CDATA[
if(10>9&&9>8){
aaaa;
}
]]>
</age>
</person>
</persons>

四、DTD:

1、DTD (Document Type Definition ),文档类型定义,用来约束XML文档。规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。

2、我们都是通过框架提供的DTD约束文档,编写对应的XML文档。常见框架使用DTD约束有:struts2,  hibernate等。

<?xml version="1.0" encoding="UTF-8"?>
<!--
模拟servlet2.3规范,如果开发人员需要在xml使用当前DTD约束,必须包括DOCTYPE。
格式如下:
<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
-->
<!ELEMENT web-app (servlet*,servlet-mapping* , welcome-file-list?) >
<!ELEMENT servlet (servlet-name,description?,(servlet-class|jsp-file))>
<!ELEMENT servlet-mapping (servlet-name,url-pattern+) >
<!ELEMENT servlet-name (#PCDATA)>
<!ELEMENT servlet-class (#PCDATA)>
<!ELEMENT url-pattern (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT jsp-file (#PCDATA)> <!ELEMENT welcome-file-list (welcome-file+)>
<!ELEMENT welcome-file (#PCDATA)> <!ATTLIST web-app version CDATA #IMPLIED>
<?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.demo01.HelloServlet</servlet-class> </servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping> </web-app>

3、文档声明:

①、内部DTD,在XML文档内部嵌入DTD,只对当前XML有效。

②、外部DTD——本地DTD,DTD文档在本地系统system上,公司内部自己项目使用。

③、外部DTD——公共DTD,DTD文档在网络public+网址上,一般都有框架提供。

4、元素声明:

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

元素名:自定义

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

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

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

五、Schema约束:

1、介绍:

①、Schema是新的XML文档约束:

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

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

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

⑤、Schema支持名称空间

2、通过schema约束文档编写xml文档。常见框架使用schema的有:Spring等通过提供”web-app_ 2_ 5.xsd"编写xml文档

<?xml version="1.0" encoding="UTF-8"?>
<!--
模拟servlet2.5规范,如果开发人员需要在xml使用当前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">
-->
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/web-app_2_5"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.example.org/web-app_2_5"
elementFormDefault="qualified"> <xsd:element name="web-app">
<xsd:complexType>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="servlet">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="servlet-name"></xsd:element>
<xsd:element name="servlet-class"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="servlet-mapping">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="servlet-name"></xsd:element>
<xsd:element name="url-pattern" maxOccurs="unbounded"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="welcome-file-list">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="welcome-file" maxOccurs="unbounded"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:choice>
<xsd:attribute name="version" type="double" use="optional"></xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<?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></servlet-name>
<servlet-class></servlet-class>
</servlet>
<servlet-mapping>
<servlet-name></servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
</web-app>

六、dom4j解析:

1、XML的解析方式:

开发中比较常见的解析方式有三种,如下:

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

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

b)  缺点:XML文档过大,可能出现内存溢出显现。

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

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

b)  缺点:只能读,逐行后将释放资源。

③、PULL:  Android内置的XML解析方式,类似SAX。(了解)

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

常见的解析开发包:

①、 JAXP: sun公司提供支持DOM和SAX开发包

②、 JDom:dom4j兄弟

③、 jsoup:一种处理HTML特定解析开发包

④、dom4j:比较常用的解析开发包,hibernate底层采用。

3、DOM解析原理及结构模型:

  XML DOM和HTML DOM类似,XML DOM将整个XML文档加载到内存,生成一个DOM树,

并获得一个Document对象,通过Document对象就可以对DOM进行操作。

DOM中的核心概念就是节点,在XML文档中的元素、属性、文本等,在DOM中都是节点!

4、API使用:

  dom4j必须使用核心类SaxReader加载xml文档获得Document通过Document对象获得文档的根元素,然后就可以操作了。

七、解析步骤:

1.创建解析器对象

2.使用解析器加载web.xml文件得到document对象

3.获取根元素节点

4.根据元素名称获取子元素节点

5.根据元素名称获取servlet-class的文本节点

6.通过类全名获取字节码文件

7.创建实例对象

8.调用实例对象里面的方法

package com.oracle.demo04;

public class MyServlet {
public void init(){
System.out.println("init()正在执行");
}
public void service(){
System.out.println("service()正在执行");
}
public void destroy(){
System.out.println("destory()正在执行");
}
}
<?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>MyServlet</servlet-name>
<servlet-class>com.oracle.demo04.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/my</url-pattern>
</servlet-mapping>
</web-app>
package com.oracle.demo04;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
//将数据按Schema约束写到XML里,然后通过dom4j解析出所有的元素,再用反射创建对象再调出其所有的方法!!!
public class Demo {
public static void main(String[] args) throws DocumentException, ClassNotFoundException, InstantiationException, IllegalAccessException {
// 1.获取解析器
SAXReader sax=new SAXReader();
// 2.获得document文档对象
Document doc=sax.read("src/com/oracle/demo04/web.xml");
// 3.获取根元素
Element element=doc.getRootElement();
// 4.判断元素名称为servlet的元素
Element servlet=element.element("servlet");
// 5.获取servlet-class元素
Element className=servlet.element("servlet-class");
//System.out.println(className.getText());获取当前元素的文本内容
//开始反射获取MyServlet的字节码文件对象
Class c=Class.forName(className.getText());
//快速创建对象
Object obj=c.newInstance();
//向下转型
MyServlet my=(MyServlet) obj;
my.init();
my.service();
my.destroy();
}
}

JAVA基础之XML相关的更多相关文章

  1. java基础之XML

    目录 java基础之XML 1. XML解析概述 2. DOM4J介绍 2.1 常用包 2.2 内置元素 2.2 Element类 2.3 Attribute类 2.4 常用操作 3. 代码演示 3. ...

  2. JAVA基础知识xml,date

    虽然说看文档最好是看官方原来的文档,但是呢,下面是我看别的人的总结,算做抛砖引玉吧,如果有不对的,我会在后期给更正或者自己来写一篇 1,JAVA中对xml的操作,包括schema,dtd等相关知识:标 ...

  3. 【Java基础】String 相关知识点总结

    String 相关知识点总结 字符串的不可变性 概述 String 被声明为 final,因此它不可继承 在 Java8 中,String 内部使用 char 数组存储数据 public final ...

  4. java基础74 XML解析中的SAX解析相关知识点(网页知识)

    1.SAX解析工具 SAX解析工具:是Sun公司提供的,内置JDK中.org.xml.sax.*         点击查看: DOM解析相关知识:以及DOM和SAX解析的原理(区别) 2.SAX解析的 ...

  5. java基础71 XML解析中的【DOM和SAX解析工具】相关知识点(网页知识)

    本文知识点(目录):本文下面的“实例及附录”全是DOM解析的相关内容 1.xml解析的含义    2.XML的解析方式    3.xml的解析工具    4.XML的解析原理    5.实例    6 ...

  6. java基础篇---XML解析(一)

    XML是可扩展标记语言 在XML文件中由于更多的是描述信息的内容,所以在得到一个xml文档后应该利用程序安装其中元素的定义名称去除对应的内容,这样的操作称为XML解析. 在XML解析中W3C定义SAX ...

  7. java基础篇---XML解析(二)

    XML解析之最流行的方式:DOM4J dom4j是使用java语言编写的,用于读,写,操作XML的一套组件 dom4j是一个开源的java组件,可从http://sourceforge.net/pro ...

  8. Java基础--面向对象以及相关知识

    一. 面向对象特征与原则 1.三大特征:封装.继承.多态. (1)封装:将客观的事物封装成抽象的类,封装代码逻辑,并通过访问控制符来控制访问的方式,从而保护程序(使用反射时,可以获取对象的私有方法和成 ...

  9. Java基础 - Date的相关使用(获取系统当前时间)

    前言: 在日常Java开发中,常常会使用到Date的相关操作,如:获取当前系统时间.获取当前时间戳.时间戳按指定格式转换成时间等.以前用到的时候,大部分是去网上找,但事后又很快忘记.现为方便自己今后查 ...

随机推荐

  1. 中标麒麟(龙芯CPU)--忘记root密码怎么修改?

    中标麒麟桌面版和服务器版均采用GRUB2为启动器,无法通过单用户模式重置root密码.下面将介绍如何重置中标麒麟系统的root密码: 桌面版 1.修改grub2引导 在正常系统入口上按下"e ...

  2. Java基础 try...catch 处理ArithmeticException 除以零的异常

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...

  3. Sword 第三方库介绍二

    /* uuid生成 */ #include <stdio.h> #include <stdlib.h> /* calloc()函数头文件 */ #include <ass ...

  4. 【SSH进阶之路】Spring的IOC逐层深入——Spring的IOC原理[通俗解释一下](三)

    1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机械 ...

  5. Jenkins - 构建项目

    1 - 登录 进入起始界面 2 - 创建并运行第一个Jenkins项目 新建Item:创建新项目 --->Freestyle project:通用的项目创建方法 --->在新建项目页面(添 ...

  6. 【视频开发】Nvidia硬解码总结

    Nvidia硬解码总结 1.前言 本文的主要目的是对近期进行的nvidia硬件解码工作的记录和总结.至于为什么研究nvidia硬件解码的具体内容,其实主要是为了在项目中能够利用nvidia的硬件解码和 ...

  7. Oracle current redo.log出现坏块后的不完全恢复案例一则

    1异常出现      8月30日下午2时左右,接同事电话,说数据库异常宕机了,现在启动不了. 2初步分析 我让现场把alert.log发过来,先看看是什么问题.   关于ORA-00353和ORA-0 ...

  8. SQL查询优化思维即SQL子查询

    一. 什么叫子查询 定义及分类 子查询又称内部查询,而包含子查询的语句称之外部查询(又称主查询).所有的子查询可以分为两类,即相关子查询和非相关子查询. 非相关子查询是独立于外部查询的子查询,子查询总 ...

  9. jquery向上滚动页面的写法

    jquery向上滚动页面的写法<pre> $('.arrow_top').on('click',function () { $body = (window.opera) ? (docume ...

  10. 怎么又出错了?盘点java中最容易出现的错误

    现如今,java已经广泛应用各种软件开发领域.基于面向对象的设计,java屏蔽了诸如C,C++等语言的一些复杂性,提供了垃圾回收机制,平台无关的虚拟机技术,Java创造了一种前所未有的开发方式.所以, ...