JAVA基础之XML相关
个人理解:
知晓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相关的更多相关文章
- java基础之XML
目录 java基础之XML 1. XML解析概述 2. DOM4J介绍 2.1 常用包 2.2 内置元素 2.2 Element类 2.3 Attribute类 2.4 常用操作 3. 代码演示 3. ...
- JAVA基础知识xml,date
虽然说看文档最好是看官方原来的文档,但是呢,下面是我看别的人的总结,算做抛砖引玉吧,如果有不对的,我会在后期给更正或者自己来写一篇 1,JAVA中对xml的操作,包括schema,dtd等相关知识:标 ...
- 【Java基础】String 相关知识点总结
String 相关知识点总结 字符串的不可变性 概述 String 被声明为 final,因此它不可继承 在 Java8 中,String 内部使用 char 数组存储数据 public final ...
- java基础74 XML解析中的SAX解析相关知识点(网页知识)
1.SAX解析工具 SAX解析工具:是Sun公司提供的,内置JDK中.org.xml.sax.* 点击查看: DOM解析相关知识:以及DOM和SAX解析的原理(区别) 2.SAX解析的 ...
- java基础71 XML解析中的【DOM和SAX解析工具】相关知识点(网页知识)
本文知识点(目录):本文下面的“实例及附录”全是DOM解析的相关内容 1.xml解析的含义 2.XML的解析方式 3.xml的解析工具 4.XML的解析原理 5.实例 6 ...
- java基础篇---XML解析(一)
XML是可扩展标记语言 在XML文件中由于更多的是描述信息的内容,所以在得到一个xml文档后应该利用程序安装其中元素的定义名称去除对应的内容,这样的操作称为XML解析. 在XML解析中W3C定义SAX ...
- java基础篇---XML解析(二)
XML解析之最流行的方式:DOM4J dom4j是使用java语言编写的,用于读,写,操作XML的一套组件 dom4j是一个开源的java组件,可从http://sourceforge.net/pro ...
- Java基础--面向对象以及相关知识
一. 面向对象特征与原则 1.三大特征:封装.继承.多态. (1)封装:将客观的事物封装成抽象的类,封装代码逻辑,并通过访问控制符来控制访问的方式,从而保护程序(使用反射时,可以获取对象的私有方法和成 ...
- Java基础 - Date的相关使用(获取系统当前时间)
前言: 在日常Java开发中,常常会使用到Date的相关操作,如:获取当前系统时间.获取当前时间戳.时间戳按指定格式转换成时间等.以前用到的时候,大部分是去网上找,但事后又很快忘记.现为方便自己今后查 ...
随机推荐
- 创建批处理文件.bat文件(删除指定文件夹下的文件及文件夹并循环)
1.针对仅仅是删除文件夹下的文件的操作:使用del命令,单纯的删除文件操作,如下:del /f /s /q C:\Users\dell\AppData\Local\Temp\*.* 2.删除文件夹操作 ...
- jmeter元件作用及执行顺序
jmeter是一个开源的性能测试工具,它可以通过鼠标拖拽来随意改变元件之间的顺序以及元件的父子关系,那么随着它们的顺序和所在的域不同,它们在执行的时候,也会有很多不同. jmeter的test pla ...
- Proxy Server源码及分析(TCP Proxy源码 Socket实现端口映射)
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/u014530704/article/de ...
- 动态BGP与静态BGP
在阿里云上选择ECS的时候,发现有动态BGP和静态BGP区分,静态的要便宜些,搜了下区别如下: 静态BGP路由是指由网络运营商手动配置的路由信息.当网络的拓扑结构或链路的状态发生变化时,运营商需要手动 ...
- How to disable the JSP validation in Eclipse helios?
java - How to disable the JSP validation in Eclipse helios? - Stack Overflowhttps://stackoverflow.co ...
- openresty开发系列38--通过Lua+Redis 实现动态封禁IP
openresty开发系列38--通过Lua+Redis 实现动态封禁IP 一)需求背景为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单.对于黑名单之内的 IP ,拒绝 ...
- 决策树分析、EMV(期望货币值)
名称:决策树分析.EMV(期望货币值) 定义:它利用了概率论的原理,并且利用一种树形图作为分析工具.其基本原理是用决策点代表决策问题,用方案分枝代表可供选择的方案,用概率分枝代表方案可能出现的各种结果 ...
- 一起学习log4cxx
目前成熟的日志系统有很多,比如log4cxx,log4cpp等,今天一起来学习log4cxx吧,之所以学习这个,首先,这个日志库比较成熟,一直由apach基金在维护,而log4cpp缺乏维护.再者,这 ...
- Nginx - 代理后端通过域名访问
目录- 前言- Nginx 根据域名反向代理- Nginx proxy_pass 关于 '/' 的作用 1. 前言 接到一个需求,通过nginx 代理互联网上某一个页面,刚开始的时候觉得很简单的,直接 ...
- Linux开机报错,提示根目录有错误,无法通过检测进入系统
报错信息如下: VolGroup-lv_root contains a file system with errors, check forced. 修复方法:(因为我的是虚拟机,可以随意做备份,所以 ...