1.Xml概念
可扩展标记语言(Extensible Markup Language) 可以用简单标记(元素、标签)的描述数据。 |
2.XML优势和作用
优势: 跨平台、可扩展性、可读性、简单、内容和形式分离。 作用: 配置文件、存储数据、数据交换 |
3. XML文件组成
3.1 xml 头信息:声明版本和编码
<?xml version="1.0" encoding="UTF-8" standalone=”no”?> Standalone:用于指定XML文档是否依赖于外部的DTD 值:yes / no Yes:自包含的,不依赖于外部的定义,意味着XML包含了所有必要的信息,不需要引入外部的DTD文件 No:不是自包含,依赖于外部的定义 |
3.2 xml 标签元素
<标签名 属性名=”值”> 内容 </标签名> xml标签名可以自定义 |
4.格式良好xml遵循的规则
1. Xml声明必须放在第一行。 2.根元素标签有且只能有一个。 3.标签必须成对出现。 4.严格区分大小写。 5.属性值必须用””引起来 6.标签必须正确嵌套 |
示例: 编写一个存储学生信息的students.xml
<?xml version="1.0" encoding="UTF-8" ?> <students> <student sno="1001"> <name>小博</name> <age>18</age> <sex>男</sex> </student> <student sno="1002"> <name>马总</name> <age>28</age> <sex>女</sex> </student> </students> |
注意:students.xml只是一个格式良好xml,但不是一个有效xml.
有效:xml只能存放student有关的一些标签。--->添加约束
5.有效xml文件
1. 格式良好 2. 使用DTD 或 XSD 添加语义约束。 |
6.DTD 文档类型定义 (document type definition或Schema)
作用:给xml添加约束,保证xml格式正确性和xml文件的有效性。
6.1. 内部DTD语法
<!DOCTYPE 根元素[ //元素中包含子元素 +:1~n(至少一次) ?:0~1(最多一次) *:0~n(多次) <!ELEMENT 元素(子元素+?*,子元素...)> //元素中包含属性 ,CDATA:字符串类型 #REQUIRED:必须的 <!ATTLIST 元素 属性名 CDATA #REQUIRED> //元素中包含内容 <!ELEMENT 元素(元素名) (#PCDATA)> ]> |
6.2. 外部DTD语法
(1). 创建dtd文件,编写约束
//元素中包含子元素 <!ELEMENT 元素(子元素+?*,子元素...)> //子元素中包含子元素 <!ELEMNET 子元素 (元素名,.....)||(EMPTY)> //不包含内容(文本值) 【提示:如果标签中没有内容(文本值),用(EMPTY)】 //元素中包含属性 ,CDATA:字符串类型 #REQUIRED:必须的 <!ATTLIST 元素 属性名 CDATA #REQUIRED> //元素中包含内容 <!ELEMENT 元素(元素名) (#PCDATA)> |
(2). DTD文件引入到xml中 system:本机
<!DOCTYPE 根元素 SYSTEM ‘xxx.DTD’> |
7.XML解析=======》获取xml文件中的内容 (4种)
前两种属于基础方法,是官方提供的平台无关的解析方式
后两种属于扩展方法,是在基础方法上扩展出来的,只适用Java平台
8.DOM4J方式解析XML文件的步骤
1. 引入dom4j.jar包
dom4j-1.6.1.jar |
2. 创建解析器SaxReader的对象
SAXReader sr=new SAXReader(); |
3. 读取xml文件,解析成DOM树(Document对象)
Document doc=sr.read("students.xml"); //解析的xml文件名 |
4. (1).获取根元素(Element对象)
Element root=doc.getRootElement(); (2).获取所有的子对象(包含属性、文本) List<Element> list=root.elements(); |
5. 元素常用的方法
方法名 | 描述 |
getName() | 获取元素的名称 |
elements() | 获取所有的子元素 |
element(String name) | 获取指定的子元素 |
attributeValue(String name) | 获取元素指定的属性值 |
elementText(String name) | 获取子元素的文本值 等价于element.getText() |
addElement() | 添加子元素 |
addAttribute() | 添加属性 |
addText() | 添加文本 |
提示:
创建空的Document对象
Document doc = DocumentHelper.createDocument();
Element root = doc.addElement("members");// 创建根节点
- 修改xml文件,重新把Document对象写到xml中
OutputFormat format=OutputFormat.createPrettyPrint(); //规范格式,缩进 XMLWriter xw=new XMLWriter(new FileOutputStream("students.xml"),format ); 先创建XML输出流,再创建文件字节输出流的对象,指定写入的xml文件,并追加规范格式 xw.write(doc); //写入到Dom树 xw.close(); //关闭流 |
模拟tomcat容器底层Servlet的实现
步骤:
1.编写一个Servlet的类,写处理请求的Service()方法(servlet接口和实现类)
2.编写web.xml ,配置servlet
3. 写一个核心方法,读取解析web.xml文件(获取配置的访问路径[url]和servlet所在的全限定名[name]),存储到Map集合中 Map<请求路径,Servlet对象>。从控制台输入一个访问路径,通过Map集合的put方法找到web.xml中配置的Servlet对象,创建所有的Servlet对象,调用servlet处理请求service的方法
(1).web.xml的配置和dtd约束
外部DTD约束
(2).核心方法
(3).请求成功