XML
- XML:eXtendsible markup language 可扩展的标记语言。
- 用途:
- 保存数据
- 用来做配置文件
- 数据传输载体
- 文档声明
简单声明, version : 解析这个xml的时候,使用什么版本的解析器解析
<?xml version="1.0" ?>
encoding : 解析xml中的文字的时候,使用什么编码来翻译
<?xml version="1.0" encoding="gbk" ?>
standalone : no - 该文档会依赖关联其他文档 , yes-- 这是一个独立的文档
<?xml version="1.0" encoding="gbk" standalone="no" ?>
- 编码问题:文档声明中的字符编码意为解析xml中的文字的时候,使用什么编码来翻译,所以要正常显示中文,存文件和解析文件的编码应该一致。比如,电脑默认编码是
GBK
存储,所以encoding
也要是GBK 或 gb2312
。建议使用utf-8
- 书写规范
- 元素定义(标签):其实就是里面的标签, <> 括起来的都叫元素 。 成对出现
- 文档声明下来的第一个元素叫做根元素 (根标签)
- 标签里面可以嵌套标签
- 可以写空标签
- 标签可以自定义
- 注释 与html的注释一样。
- 非法字符
< &
使用实体< &
<?xml version="1.0" encoding="utf-8" ?>
<stus>
<stu id="1">
<name>zhangsan</name>
<age>24</age>
</stu>
<stu id="2">
<name>lisi</name>
<age>25</age>
</stu>
</stus>
- 解析 XML:获取元素里面的字符数据或者属性数据。
- 如果某段字符串里面有过多的字符, 并且里面包含了类似标签或者关键字的这种文字,不想让xml的解析器去解析。 那么可以使用CDATA来包装。 不过这个CDATA 一般比较少看到。 通常在服务器给客户端返回数据的时候。
<des><![CDATA[<a href="http://www.baidu.com">我爱黑马训练营</a>]]></des>
-
解析方式
a. DOM
b. SAX
parse_type.png
针对以上两种解析方式, 给出的解决方案有哪些?
- 如果某段字符串里面有过多的字符, 并且里面包含了类似标签或者关键字的这种文字,不想让xml的解析器去解析。 那么可以使用CDATA来包装。 不过这个CDATA 一般比较少看到。 通常在服务器给客户端返回数据的时候。
jaxp sun公司。 比较繁琐
jdom
dom4j 使用比较广泛
- dom4j的使用
- 导入 jar 包
- 创建SaxReader对象
- 指定解析的xml
- 获取根元素。
- 根据根元素获取子元素或者下面的子孙元素
public class MainTest {
public static void main(String[] args) {
try{
// 1. 创建sax读取对象
SAXReader saxReader = new SAXReader();
// 2. 指定解析的xml源
Document document = saxReader.read(new File("src/com/xml/stus.xml"));
//3. 得到元素
Element rootElement = document.getRootElement();
List<Element> elements = rootElement.elements();
//遍历所有的stu元素
for (Element element:elements) {
String name = element.element("name").getText();
String age = element.element("age").getText();
System.out.println(name + age);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
- Xpath的使用:xpath其实是xml的路径语言,支持我们在解析xml的时候,能够快速的定位到具体的某一个元素。
- 引入 jar 包
- 在查找指定节点的时候,根据XPath语法规则来查找
- 后续的代码与以前的解析代码一样。
- XML约束
- DTD:语法自成一派, 早就出现的。 可读性比较差。
1. 引入网络上的DTD
<!-- 引入dtd 来约束这个xml -->
<!-- 文档类型 根标签名字 网络上的dtd dtd的名称 dtd的路径
<!DOCTYPE stus PUBLIC "//UNKNOWN/" "unknown.dtd"> -->
1. 引入本地的DTD
<!-- 引入本地的DTD : 根标签名字 引入本地的DTD dtd的位置 -->
<!-- <!DOCTYPE stus SYSTEM "stus.dtd"> -->
2. 直接在XML里面嵌入DTD的约束规则
<!-- xml文档里面直接嵌入DTD的约束法则 -->
<!DOCTYPE stus [
<!ELEMENT stus (stu)>
<!ELEMENT stu (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
<stus>
<stu>
<name>张三</name>
<age>18</age>
</stu>
</stus>
- DTD语法
<!ELEMENT stus (stu)> : stus 下面有一个元素 stu , 但是只有一个
<!ELEMENT stu (name , age)> stu下面有两个元素 name ,age 顺序必须name-age
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ATTLIST stu id CDATA #IMPLIED> stu有一个属性 文本类型, 该属性可有可无
元素的个数:
+ 一个或多个
* 零个或多个
? 零个或一个
属性的类型定义
CDATA : 属性是普通文字
ID : 属性的值必须唯一
- Schema:其实就是一个xml , 使用xml的语法规则, xml解析器解析起来比较方便 , 是为了替代DTD 。但是Schema 约束文本内容比DTD的内容还要多。 所以目前也没有真正意义上的替代DTD
Schema文档
约束文档:
<!-- xmlns : xml namespace : 名称空间 / 命名空间
targetNamespace : 目标名称空间 。 下面定义的那些元素都与这个名称空间绑定上。
elementFormDefault : 元素的格式化情况。 -->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.itheima.com/teacher"
elementFormDefault="qualified">
<element name="teachers">
<complexType>
<!-- maxOccurs:出现次数 -->
<sequence maxOccurs="unbounded">
<!-- 这是一个复杂元素 -->
<element name="teacher">
<complexType>
<sequence>
<!-- 以下两个是简单元素 -->
<element name="name" type="string"></element>
<element name="age" type="int"></element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
- 在xml中引入Schema文档
实例文档:
<?xml version="1.0" encoding="UTF-8"?>
<!-- xmlns:xsi : 这里必须是这样的写法,也就是这个值已经固定了。
xmlns : 这里是名称空间,也固定了,写的是schema里面的顶部目标名称空间
xsi:schemaLocation : 有两段: 前半段是名称空间,也是目标空间的值 , 后面是约束文档的路径。
-->
<teachers
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.itheima.com/teacher"
xsi:schemaLocation="http://www.itheima.com/teacher teacher.xsd"
>
<teacher>
<name>zhangsan</name>
<age>19</age>
</teacher>
<teacher>
<name>lisi</name>
<age>29</age>
</teacher>
<teacher>
<name>lisi</name>
<age>29</age>
</teacher>
</teachers>
- 名称空间的作用一个xml如果想指定它的约束规则, 假设使用的是DTD ,那么这个xml只能指定一个DTD , 不能指定多个DTD 。 但是如果一个xml的约束是定义在schema里面,并且是多个schema,那么是可以的。简单的说: 一个xml 可以引用多个schema约束。 但是只能引用一个DTD约束。
名称空间的作用就是在 写元素的时候,可以指定该元素使用的是哪一套约束规则。 如果不只有一套规则,那么都可以这么写
<name>张三</name>
<!-- aa 和 bb 表示两种不同的Schema约束规则-->
<aa:name></aa:name>
<bb:name></bb:name>
tomcat
- 程序架构
- C/S(client/server) 有一部分代码写在客户端, 用户体验比较好。但是服务器更新,客户端也要随着更新。 占用资源大。
- B/S(browser/server) 客户端只要有浏览器就可以了。占用资源小, 不用更新。但是用户体验不佳。
- 常见服务器
Tomcat apache
WebLogic BEA
Websphere IBM
IIS 微软 - 安装Tomcat
a. 直接解压 ,然后找到bin/startup.bat,启动之后,如果能够正常看到黑窗口,表明已经成功安装,在浏览器的地址栏上输入 : http://localhost:8080 , 如果有看到内容 就表明成功了。
b. 如果双击了startup.bat, 看到一闪而过的情形,一般都是 JDK的环境变量没有配置。
- 目录结构
bin: 包含了一些jar , bat文件 。 startup.bat
conf:tomcat的配置 server.xml web.xml
lib :tomcat运行所需的jar文件
logs:运行的日志文件
temp:临时文件
webapps:发布到tomcat服务器上的项目,就存放在这个目录。
work:jsp翻译成class文件存放地
- 如何把一个项目发布到tomcat中
a. 拷贝这个文件到webapps/ROOT底下, 在浏览器里面访问
b. 通过配置文件配置虚拟路径在server.xml这个文件里面的Host节点中写入下内容<Context docBase="D:\xml02"></Context>
网友评论