此博客用于个人学习,来源于网上,对知识点进行一个整理。
1.XML:
eXtendsible markup language 可扩展的标记语言
作用:
1.可以用来保存数据
2.可以用来做配置文件
3.数据传输载体
2.定义XML:
其实就是一个以 xml 为后缀的文件
1.文档声明:
-version: 解析xml的解析器版本
encoding: 解析xml的编码格式
standalone: yes——该文档会关联其他文档,no——该文档是一个独立文档
<?xml version="1.0" encoding="gbk" standalone="no" ?>
2.encoding 详解:
解析 xml 的编码格式
不是指文件的文字, 而是存储这些文字对应的二进制 。 那么这些文字对应的二进制到底是多少呢? 可以根据文件使用的编码来得到,一般文件的默认保存是gbk格式。
所以要想让我们的 xml 能够正常的显示中文,有两种解决办法
-
让 encoding 也是 GBK 或者 gb2312 .
-
如果 encoding 是 utf-8 , 那么保存文件的时候也必须使用 utf-8
-
保存的时候见到的 ANSI 对应的其实是我们的本地编码 GBK。
为了通用,建议使用 UTF-8 编码保存,以及 encoding 都是 utf-8
3.元素定义(标签):
<stu>
<name>张三</name>
<age/>
</stu>
1.用<>起来的称为元素(标签),一般成对出现。
<stu></stu>
<name></name>
2.文档声明下来的第一个元素叫根元素(根标签)。
<stu></stu>
3.标签里面可以嵌套标签。
<stu><name></name></stu>
4.空标签:即是开始也是结束,配合属性使用。
<age/>
5.标签可以自定义,定义规则如下:
a.名称可以含字母、数字以及其他的字符
b.名称不能以数字或者标点符号开始
c.名称不能以字符 “xml”(或者 XML、Xml)开始
d.名称不能包含空格
e.命名尽量简单,做到见名知义
4.简单元素&复杂元素:
简单元素:里面包含着文字。
复杂元素:元素里面还可以嵌套其他的元素。
5.属性的定义:
定义在元素里面, <元素名称 属性名称=“属性的值”></元素名称>
<stus>
<stu id="10086">
<name>张三</name>
<age>18</age>
</stu>
<stu id="10087">
<name>李四</name>
<age>20</age>
</stu>
</stus>
3.注释:
与 html 的注释相似,不能放在文档第一行,必须在声明下面。
<!-- -->
如:
<?xml version="1.0" encoding="UTF-8"?>
<!--
//这里有两个学生
//一个学生,名字叫张三, 年龄18岁, 学号:10086
//另外一个学生叫李四 。。。
-->
4.CDATA 区:
非法字符:严格地讲,在 XML 中仅有字符 “<“和”&” 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。
< < 小于
> > 大于
& & 和号
' ' 省略号
" " 引号
如果某段字符中包含着标签,不想被解析器解析为文字,可以 CDATA 来包装,不过这种情况比较少见,一般是存在于数据传输的时候会出现。
<desc>![CDATA[<a href="www.baidu.com">百度一下,你就知道</a>]]</desc>
5.XML 解析:
获取元素里面的字符数据和属性数据
1.XML 解析方式:
-
DOM
document object model
将整个文档读到内存中,形成树状结构。整个文档称为 document 对象,属性为 attribute 对象,所有的元素节点对应 element 对象,文本也可以称为 text 对象,以上四种统称为 Node 节点。如果 xml 特别大,会造成内存溢出。可以对文档的内容进行增删操作。
-
SAX
simple API for XML
将文档的语句一句一句读进内存中,不会造成内存溢出,但是无法对内存进行增删操作。
2.针对于两种解析方式的 API:
jaxp sun公司,比较繁琐
jdom,dom4j 使用比较广泛
3.dom4j 的基本用法:
try {
//1.创建sax对象
SAXReader reader = new SAXReader();
//2.创建xml连接源
Document document = reader.read(new File("src/XML/stus.xml"));
//3.获取元素
Element element= document.getRootElement();
//获取根元素stu
System.out.println(element.element("stu").getName());
//获取age元素
System.out.println(element.element("stu").element("age").getName());
//获取所有stu元素
List<Element> elements = element.elements();
for(Element e : elements) {
String name = e.element("name").getText();
String age = e.element("age").getText();
String address = e.element("address").getText();
System.out.println("name=="+name+" age=="+age+" address=="+address);
}
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
基本步骤:
1.创建 saxreader 对象。
2.创建 xml 的连接源。
3.获取元素。
- element.element(“元素名”):获取一个根元素,返回值为一个 Element 对象。
- element.elements():获取所有根元素,返回值为一个 List 列表。
4.获取元素的值。
- element.element(“元素名”).getText():获取元素名的数据。
4.dom4j 中 Xpath 的使用:
Xpath 是 dom4j 的路径语言,可以快速定位需要的标签,而不是像之前的基本用法一样,一个一个套。
使用步骤:
1.导入 jar 包。
2.查找节点的代码进行修改。
3.后续代码与前面的代码相似。
try {
//1.创建sax对象
SAXReader reader = new SAXReader();
//2.创建xml连接源
Document document = reader.read(new File("src/XML/stus.xml"));
//3.获取一个name元素,返回的是第一个name元素
Element element = (Element) document.selectSingleNode("//name");
System.out.println(element.getText());
//4.获取所有name元素,返回所有的name元素
List<Element> elements = document.selectNodes("//name");
for (Element e : elements) {
System.out.println(e.getText());
}
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
5.XML 约束:
如下的文档, 属性的 ID 值是一样的。 这在生活中是不可能出现的。 并且第二个学生的姓名有好几个。 一般也很少。那么怎么规定 ID 的值唯一, 或者是元素只能出现一次,不能出现多次? 甚至是规定里面只能出现具体的元素名字。
<stus>
<stu id="10086">
<name>张三</name>
<age>18</age>
<address>深圳</address>
</stu>
<stu id="10086">
<name>李四</name>
<name>李五</name>
<name>李六</name>
<age>28</age>
<address>北京</address>
</stu>
</stus>
6.XML 的两种约束:
-
DTD
语法自成一派, 早起就出现的。 可读性比较差。
1.声明DTD文件:
<stus> <stu id = "3118002264"> <name>张三</name> <age>18</age> <address>台山</address> </stu> </stus>
由上面的 xml 文件可知,有五个元素 stus,stu,name,age,address,stu 内有属性 id。
<!ELEMENT stus (stu)> :stus包含着一个stu <!ELEMENT stu (name,age,address)> :stu包含着三个元素,分别是name,age,address,顺序不可以改变 <!ELEMENT name (#PCDATA)> :简单元素 <!ELEMENT age (#PCDATA)> <!ELEMENT address (#PCDATA)> <!ATTLIST stu id CDATA #IMPLIED> :属性id属于stu标签,是文本类型,该属性可有可无
2.导入到 xml 里面进行约束,一共有三种方式:
一,引用网络上的 dtd
<文档类型 根标签名字 网络上的dtd dtd的名称 dtd的路径><!DOCTYPE stus PUBLIC "//UNKNOWN/" "unknown.dtd">
二,导入本地的 dtd
<文档类型 跟标签 本地的dtd dtd的位置>
<!DOCTYPE stus SYSTEM "stus.dtd">
三,直接在 xml 文件里面声明
<!DOCTYPE stus [ <!ELEMENT stus (stu)> <!ELEMENT stu (name,age,address)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT address (#PCDATA)> <!ATTLIST stu id CDATA #IMPLIED> ]>
3.dtd 的一些声明规则:
1.元素的个数: + 一个或多个 * 零个或多个 ? 零个或一个 2.属性的类型定义: CDATA : 属性是普通文字 ID : 属性的值必须唯一 3.<!ELEMENT stu (name , age)> 按照顺序来 <!ELEMENT stu (name | age)> 两个中只能包含一个子元素Schema
-
Schema
其实就是一个 xml , 使用 xml 的语法规则, xml 解析器解析起来比较方便 , 是为了替代 DTD 。
但是 Schema 约束文本内容比 DTD 的内容还要多,所以目前也没有真正意义上的替代 DTD。Schema 的约束文档:
<?xml version="1.0" encoding="UTF-8"?> <!-- xmlns;(xml nameplace)xml全称空间,命名空间 targetNamespace:目标名称空间 ,下面定义的那些元素都与这个名称空间绑定上。 elementFormDefault:元素的格式化情况。 --> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/teachers" elementFormDefault="qualified"> <!-- 复杂元素 --> <element name="teachers"> <!-- 使用这两个标签可以套用,实现复杂元素的使用 --> <complexType> <!-- maxOccurs这个属性可以指定最大数量,unbounded表示无限 --> <sequence maxOccurs="unbounded"> <element name="teacher"> <complexType> <sequence> <!-- 简单元素 --> <element name="name" type="string"></element> <element name="age" type="int"></element> <element name="object" type="string"></element> </sequence> </complexType> </element> </sequence> </complexType> </element> </schema>
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.example.org/teachers" xsi:schemaLocation="http://www.example.org/teachers teachers.xsd" > <teacher> <name>张三</name> <age>20</age> <object>数学</object> </teacher> <teacher> <name>李四</name> <age>20</age> <object>数学</object> </teacher> <teacher> <name>王五</name> <age>20</age> <object>数学</object> </teacher> </teachers>
名称空间的作用:
一个 xml 如果想指定它的约束规则,假设使用的是 DTD ,那么这个 xml 只能指定一个 DTD,不能指定多个 DTD 。但是如果一个 xml 的约束是定义在 schema 里面,并且是多个 schema,那么是可以的。简单的说:一个 xml 可以引用多个 schema 约束。但是只能引用一个 DTD 约束。名称空间的作用就是在写元素的时候,可以指定该元素使用的是哪一套约束规则。默认情况下 ,如果只有一套规则,那么都可以这么写。
<name>张三</name> <aa:name></aa:name> <bb:name></bb:name>
6.程序架构:
-
C/S(client/server)
微信,QQ,LOL
优点:有一部分代码写在客户端,用户体验比较好。
缺点:服务器更新,客户端也要随着更新。占用资源大。
-
B/S(browser/server)
网页游戏 , WebQQ
优点:客户端只要有浏览器就可以了,占用资源小,不用更新。
缺点:用户体验不佳。
-
服务器
其实服务器就是一台电脑,配置比一般的要好。
-
服务器软件
客户端在浏览器的地址栏上输入地址 ,然后web服务器软件,接收请求,然后响应消息。
处理客户端的请求, 返回资源 | 信息 -
Web 应用
需要服务器支撑。
Tomcat apache
WebLogic BEA
Websphere IBMIIS 微软
7.Tomcat:
1.Tomcat 安装:
-
直接解压 ,然后找到 bin/startup.bat
-
可以安装
启动之后,如果能够正常看到黑窗口,表明已经成功安装。如果是一闪而过,可以在 startup.bat 文件编辑最下面加上一个 pause,查看错误原因。 为了确保万无一失, 最好在浏览器的地址栏上输入 : http://localhost:8080 , 如果有看到内容就表明成功了。
-
如果双击了 startup.bat, 看到一闪而过的情形,一般都是 JDK 的环境变量没有配置。
系统变量:
JAVA_HOME : JDK 的安装目录
CLASSPATH : .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(变量值前面有点号和分号,后边结尾也有分号)
用户变量:
PATH : %JAVA_HOME%\bin;(就是jdk的bin目录,记得后面有“;”号哦)
2.Tomcat 目录详解:
-
bin
包含了一些 jar , bat 文件 。例如 startup.bat
-
conf
tomcat 的配置 。例如 server.xml web.xm
-
lib
tomcat 运行所需的jar包
-
logs
运行的日志文件
-
temp
运行的临时文件
-
webapps
发布到 tomcat 服务器上的项目,就存放在这个目录。
-
work
jsp 翻译成 class 文件存放地
3.如何将项目发布到 tomcat 上:
需求: 如何能让其他的电脑访问我这台电脑上的资源 。 stu.xml
本机地址:localhoot
1.拷贝这个文件到 webapps/ROOT 底下, 在浏览器里面访问:
http://localhost:8080/stu.xml
在 webaps 下面新建一个文件夹 xml , 然后拷贝文件放置到这个文件夹中:
http://localhost:8080/xml/stu.xml
使用 IP 地址访问:
http://电脑ip:8080/xml/stu.xml
注意:
http://localhost:8080 : 其实对应的是到 webapps/root
http://localhost:8080/xml/ : 对应是 webapps/xml
2.配置虚拟路径:
使用 localhost:8080 打开 tomcat 首页, 在左侧找到 tomcat 的文档入口, 点击进去后, 在左侧接着找到 Context 入口,点击进入。
http://localhost:8080/docs/config/context.html
a.在 conf/server.xml 找到 host 元素节点。
b.加入以下内容。
<!-- docBase:项目的路径地址 如: D:\xml02\person.xml
path:对应的虚拟路径 一定要以/打头。
对应的访问方式为:http://localhost:8080/a/person.xml -->
<Context docBase="D:\xml02" path="/a"></Context>
c.在浏览器地址栏上输入: http://localhost:8080/a/person.xml
3.配置虚拟路径:(同样也是配置虚拟路径)
a.在 tomcat/conf/catalina/localhost/ 文件夹下新建一个 xml 文件,名字可以自己定义。 person.xml
b.在这个文件里面写入以下内容
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="D:\xml02"></Context>
c.在浏览器上面访问
http://localhost:8080/person/xml 的名字即可
8.给 Eclipse 配置 Tomcat:
-
在 server 里面 右键新建一个服务器, 选择到 apache 分类, 找到对应的 tomcat 版本, 接着一步一步配置即可。
-
配置完毕后, 在 server 里面, 右键刚才的服务器,然后 open , 找到上面的 Server Location , 选择中间的 Use Tomcat installation。
-
创建 web 工程, 在 WebContent 下定义 html 文件, 右键工程, run as server 。