二阶段问题总结
1.servlet:每次都要继承,重写doget,dopost方法 。类太多,工具简陋
2.dao:固定格式代码太繁琐(我们要关注的其实只有sql语句和参数),拼接sql语句比较麻烦
3.导包:管理包太麻烦
4.版本控制工具
5.便捷的权限管理工具
一、XML
1.定义
xml全称可扩展标记语言(eXtensible Markup Language), 她也是一种标记语言, 类似于html,但是它比html的语法要严格的多, 而且配有检查文件来检查语法格式, 同时, xml的标签是可以扩展的, 也就是说我们可以自定义标签和格式
通过学习我们知道, html是用来表示显示效果的, 不同的标签和属性代表着不同的样式, 但是xml不是, 这里要记清楚, xml设计出来就是为了传输数据的, 所以, xml的格式非常严谨
2.特点
可扩展
自定义
语法严格
传输数据
3.版本
xml 1.0 常用
xml 1.1 不向下兼容
二、XML的语法
1.选择XML做配置文件的原因
语法严格,稍有不对就报错
规则可自定义
2.文档声明
<?xml version="1.0"?> 必须在第一行第一列
vserion :版本
encoding : 编码 常用utf-8
standalone yes/no 独立/不独立 (默认是yes) 如果no,可以引入外部文件
3.元素
指出现在文档中的标签,分为开始和结束
如果标签中有内容,就必须有结束标签,如果没有内容,可以内部闭合
可以嵌套使用,但是不能相互嵌套
只能有一个根节点
命名规范:
区分大小写
不能以数字开头
元素中不能包含空格和冒号
4.属性
写在标签内的, 一种key-value的格式 , value必须用双引号和单引号包裹
元素中的属性不允许重复
命名规范和元素的命名规范相同
5.注释
格式
<!-- 注释内容-->
不能嵌套
6.特殊字符
特殊字符和html类似, 因为xml本身使用了一些字符, 所以这些已经被使用的字符本身是具有特殊含义的, 并且是可以被xml本身解析的, 所有如果我们想使用的话就必须要使用其他的组合字符代替
如 < : <
7.CADATA区
格式
< ! [ CDATA [ 文本内容 ] ] >
CDATA中的内容会当作普通文本内容进行处理
8.PI(处理指令)(了解)
一些具有特殊功能的指令, 可以对标签或者标签的内容进行解析
9.演示
三、约束
约束限制着当前xml页面中的规则,哪些能用哪些不能用都在约束中限制死了
要想写一个框架的配置文件,第一步要在页面中引入这个框架的配置文件的约束
分类
dtd约束
schema约束
四、DTD约束
1.定义
一种常用的定义xml元素规则的语法格式
简单易懂
2.元素定义
< ! ELEMENT 标签名 ( )> 用来定义标签
( # PCDATA ) 简单标签,内部包含的是字符串等简单内容
EMPTY 表示空的 ,内部闭合
ANY 表示任意
子元素
子元素直接的关系
" , " 表示and
" | " 表示or
子元素出现的次数
" + " 表示出现1次或多次
" * " 表示出现0次或多次
" ? " 表示出现0次或1次
3.属性定义
< ! ATTLIST 元素名称 属性名称 属性类型 属性约束 ... >
属性类型
CDATA 文本
枚举 ( 值1 | 值2 )
ID 不能重复,不能只有数字,不能以数字开头
属性约束
" #REQUIRED " 必须的
" #IMPLIED " 属性是可选的
" #FIXED " 固定值
默认值 直接写
4.实体定义(了解)
<!ENTITY 别名 "值">
&实体名; 引入实体
只有内部引入才能使用,比较鸡肋,基本不用
5.引用形式
xml文件内编写
内部
< ! DOCTYPE students[
]>
引入本地文件
引入网络约束
< ! DOCTYPE 根节点 PUBLIC "DTD文件的名称" "DTD文件的地址">
五. schema约束
1.定义
schema也是一种用于定义和描述xml文档结构内容的模式语言, 主要是为了克服DTD的局限性而出现的
2.特点
符合xml的语法
DOM或者SAX解析更容易解析schema的文档
schema文档对名称空间支持的非常好
支持更多的数据类型 并支持用户自定义新的数据类型
chema定义约束的能力更强大,可以对XML实例文档作出细致的语义限制
schema使用一套预先规定的xml元素创建, 更有逻辑性
3.语法
扩展名是 .xsd
引入W3C的名称空间在根节点上
xmlns="http://www.w3.org/2001/XMLSchema"
定义元素
使用提供的<element>标签来定义元素
用name属性来定义元素的名称
简单元素
使用type属性来确定简单元素
复杂元素
<complexType> 标示复杂元素
<sequence> 表示按顺序出现
<all> 表示随机的,1次,唯一的一次
<choice> 表示选一个
属性
minOccurs 表示最小出现次数
maxOccurs 表示最大出现次数
unbounded 表示上不封顶
一旦一个元素要定属性,那么这个元素就变成了复杂元素
4.引入
首先schema约束文件必须要有名称空间, 随意写(推荐使用uri),尽量保持唯一
确定elementFormDefault的值
qualified 质量好的
unqualified 质量不好的
在目标xml文件的跟节点上引入W3C的名称空间
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
通过xmlns引入我们自己约束的名称空间 xmlns="http://com.qianfeng/my"
通过xsi:schemaLocation属性引入约束的地址,必须先指明是哪个名称空间的地址
xsi:schemaLocation="http://www.example.org/my my.xsd" (说明约束对应的文件地址)
引入本地文件
5.演示
约束文件
引入
六. XML解析 SAX DOM
1.定义
对xml文件的内容结构进行分析包装,返回我们java可以操作的对象
2.分类
SAX解析
基于时间驱动和事件处理器, 边读边解析
优点: 不会产生内存溢出问题, 速度比较快
缺点: 不能做增删改
现在的sax解析框架做出了一些优化, 也可以做增删改操作, 但是其实也是在内存中生成完整的文档结构, 只是做了一些优化, 效率要高很多
DOM解析
整片读取, 然后再内容中生成树状结构
优点: 可以完整的查看文档,方便于做增删改
缺点: 如果文档过大, 容易产生内存溢出的问题
七. JAXP操作XML
1.SAX
2.DOM
常用方法
getElementsByTagName() 通过元素的名称获取元素
getElementsById() 通过元素的id获取元素
createElement() 创建一个指定名称的元素
appendChild() 添加一个子元素
演示
八. Dom4J
1.定义
原生JAXP解析使用起来及其麻烦, Dom4J是一款非常优秀的解析器框架, 包含SAX和DOM两种解析方法
使用前必须导入dom4.jar包
2.常用方法
getRootElement() 获取根元素
elements() 获取所有子元素(剔除Text节点)
addElement() 添加元素
setText() 设置元素的内容
getText() 获取元素的内容
3.SAX解析
4.DOM解析
和SAX方法基本相同
总结
1.xml
一种标记语言, 格式类似于html ,但是语法比html要严格很多很多
一种文本文件的书写格式
2.有什么用?
作为配置文件
配置文件就应该 格式清晰, 语法严格, xml刚好符合这个特点
3.是什么在检测xml的语法格式?
约束 : dtd schema
dtd : 简单易学, 约束力较弱
schema : 语法繁琐, 约束力强
4.xml引入dtd约束
内部
<!DOCTYPE 根节点 [
<!ELEMENT 元素名 (复杂/简单)>
<!ATTLIST 元素名 属性名 属性类型 必要性>
]>
本地
<!DOCTYPE 根节点 SYSTEM "约束文件地址" >
网络
<!DOCTYPE 根节点 PUBLIC "网络名称" "网络地址" >
5.xml引入schema约束
<根节点xmlns:xsi="w3c的约束"xmlns="自己约束的名称空间"
xsi:schemaLocation="自己约束的名称空间 自己约束的地址">
</根节点>
6.java代码如何使用xml文档
使用解析器解析文档 : JAXP DOM4J
解析方式 SAX DOM
7.SAX 和 DOM 解析
SAX : 只能读取 速度快 内存占用率低
DOM : 可以增删改查, 速度慢, 内存占用率高
8.DOM4J
dom4j说自己的sax解析也能增删改查,而且效率高 , 我们信了