今日目标
编写xml存放任意内容
通过dtd写xml
通过Schema写xml
通过dom4j解析xml
会使用反射对类、方法、构造进行相应操作
第一章 模拟servlet执行
1.1案例说明
通过浏览器发送请求-》服务器解析请求参数-》服务器处理请求-》结果返回到浏览器
1.2相关技术
为了灵活实现的不同路径(/hello)执行不同资源(HelloMyservlet)我们需要使用xml进行配置;为了限定xml的内容,我们需要用xml约束;为了获得xml的内容,我们需要dom4j进行解析
1.2.1xml
1.2.1.1什么是xml
Xml全称是ExtensibleMarkup Language,意思是可扩展的标记原因。Xml的语法上和html比较相似,但xml的标签可以由用户自己定义。
1.2.1.2常见应用
用于做配置文件
1.2.1.3 Xml的语法
文档声明
<?xml version=”1.0”encoding=”utf-8”?>
1. 必须<?xml version=”” ?>
2. 文档声明必须从文档的0行0列开始
3. 文档声明只有三个属性:
a) Version:指定xml的版本 必选
b) Encoding:制定文档的编码 可选
元素elemet
<servlet>
1. 元素是xml的重要一部分
2. 普通元素的结构开始标签。元素体,结束标签组成
3. 元素体:可以是元素,也可以是文本
4. 空元素:空元素只有开始标签,没有结束标签,但元素必须自己闭合,
5. 元素命名:
a) 区分大小写
b) 不能使用空格,不能使用冒号
c) 不建议以xml开头
6. 格式良好的xml文档,必须只有一个根元素。
属性
1. 属性的定义格式:属性名=属性值
2. 一个元素可以有0-n个属性
3. 属性名不能用空格、冒号等特殊祖父,且必须以字母开头
注释
与HTML相同,<!-- -->
转义字符
CDATA区
<![CDATA[
//任意内容
]]>
1.2.2 DTD约束
常见的xml约束有:DTD、Schema
1.2.2.1 什么是DTD
DTD(Document Type Definition),文档类型定义,用来约束XML文档。
1.2.2.2DTD的要求
看懂DTD文档编写相应的XML(常见的有web.xml struts.xml …)
1.2.3 Schema约束
1.2.4 Xml的解析
解析方式有三种:
Dom解析:扫描整个xml文档,生成一个树形的数据结构对象。耗内存。
Sax 解析:逐行扫描解析,不好不太好修改xml
PULL解析:类似与SAX解析
解析器:
常见的解析开发包:
1. JASP:sum公司的
2. JDom:dom4j兄弟
3. Jsop:
4. Dom4j:前身是JDom
1.2.4.1 Dom4j的使用
1.导包
2.三个对象:
3.举例
//得到解析器
SAXReaderreader = new SAXReader();
Documentdoc;
//得到document对象
doc =reader.read("src/cn/itcast/web/servlet/web.xml");
//得到根元素
ElementrootElement = doc.getRootElement();
//得到根元素的子元素集合中标签名为“servlet”所有元素
List<Element>serList = rootElement.elements("servlet");
//遍历“servlet”元素集合
for(Element serv : serList) {
//得到名为“servlet-name”元素集合
List<Element>classnameElements = serv.elements("servlet-class");
//遍历“servlet-name”元素集合
for(Element classnameElement : classnameElements) {
//得到”servlet-name”元素的文本值
Stringclassname = classnameElement.getText();
Classclazz = Class.forName(classname);
Objectobj = clazz.newInstance();
if(obj instanceof IMyServlet) {
IMyServletmyservlet = (IMyServlet) obj;
myservlet.init();
myservlet.service();
myservlet.destory();
}else {
thrownew ClassCastException(classname);
}
}