xml
eXtendsible markup language 可扩展的标记语言
xml 作用
用来保存数据.
用来做配置文件.
数据传输载体.
xml 的文档声明
简单声明: version: 解析这个 xml 的时候使用什么版本的解析器.
<? xml version="1.0" ?>
encoding: 解析 xml 中的文字的时候, 使用什么编码
<? xml version = "1.0" encoding="utf-8" ?>
standalone : no - 该文档会以来关联其他文档 yes - 这是一个独立文档
<? xml version = "1.0" encoding = "utf-8" standalone="no" ?>
元素定义(标签)
使用 <> 括起来的就是元素 大部分成对出现 如:
<zbuter>balabala</zbuter>
文档声明后的第一个元素叫根元素(根标签)
标签内可以嵌套标签.
自闭标签 (不是成对的) 如
<zbuter />
标签可以自定义.
xml 元素必须遵循一下命名规则:
名称可以包含字母数字以及其他的字符
名称不能以数字或标点符号开头.
名称不能以字符 "xml"(不区分大小写)开始
名称不能包含空格
命名尽量简单, 见名知意
简单元素 与 复杂元素
简单元素
元素里面包含了普通的文字
复杂元素
元素里面还可以嵌套其他的元素
属性的定义
定义在元素里面, <元素名称 属性名称 ="属性的值">
张三
18
李四
28
xml 注释:
与 html 的注释一样.
<!-- -->
如:
- <?xml version="1.0" encoding="UTF-8"?>
- <!--
- // 这里有两个学生
- // 一个学生, 名字叫张三, 年龄 18 岁, 学号: 10086
- // 另外一个学生叫李四 ...
- -->
xml 的注释, 不允许放置在文档的第一行. 必须在文档声明的下面.
CDATA 区
非法字符
严格地讲, 在 xml 中仅有字符 "<" 和 "&" 是非法的. 省略号, 引号和大于号是合法的, 但是把它们替换为实体引用是个好的习惯.
<<
& &
如果某段字符串里面有过多的字符, 并且里面包含了类似标签或者关键字的这种文字, 不想让 xml 的解析器去解析. 那么可以使用 CDATA 来! 包装. 不过这个 CDATA 一般比较少看到. 通常在服务器给客户端返回数据的时候.
xml 解析
其实就是获取元素里面的字符数据或者属性数据.
xml 解析方式
有很多种, 但是常用的有两种.
DOM
SAX
针对这两种解析方式的 API
一些组织或者公司, 针对以上两种解析方式, 给出的解决方案有哪些?
jaxp sun 公司. 比较繁琐
jdom
dom4j 使用比较广泛
Dom4j 基本用法
element.element("zbuter") : 返回该元素下的第一个 zbuter 元素
element.elements(); 返回该元素下的所有子元素.
创建 SaxReader 对象
指定解析的 xml
获取根元素.
根据根元素获取子元素或者下面的子孙元素
- package test;
- import java.io.File;
- import java.util.List;
- // 导包需要导入 dom4j 中的类
- import org.dom4j.Document;
- import org.dom4j.DocumentException;
- import org.dom4j.Element;
- import org.dom4j.io.SAXReader;
- public class Test {
- public static void main(String[] args) {
- // 1. 创建 SAXReader 读取对象
- SAXReader reader = new SAXReader();
- Document document = null;
- try {
- //2. 得到文档对象
- document = reader.read(new File("src/xml/stu.xml"));
- } catch (DocumentException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- //3. 获取根元素
- Element rootElement = document.getRootElement();
- // 获取根元素下面的子元素 age
- //rootElement.element("age")
- //System.out.println(rootElement.element("stu").element("age").getText());
- // 获取根元素下面的所有子元素 . stu 元素
- List<Element> elements = rootElement.elements();
- // 遍历所有的 stu 元素
- for (Element element : elements) {
- // 获取 stu 元素下面的 name 元素
- String name = element.element("name").getText();
- String age = element.element("age").getText();
- String address = element.element("address").getText();
- System.out.println("name:"+name+"\nage:"+age+"\naddress:"+address);
- }
- }
- }
Dom4j 的 Xpath 使用
dom4j 里面支持 Xpath 的写法. xpath 其实是 xml 的路径语言, 支持我们在解析 xml 的时候, 能够快速的定位到具体的某一个元素.
添加 jar 包依赖
jaxen-1.1-beta-7.jar
在查找指定节点的时候, 根据 XPath 语法规则来查找
后续的代码与以前的解析代码一样.
- // 要想使用 Xpath, 还得添加支持的 jar 获取的是第一个 只返回一个.
- //selectSingleNode 返回的是 Node 类型. 需要强制转换成 Element 类型
- Element nameElement = (Element) rootElement.selectSingleNode("//name");
- System.out.println(nameElement.getText());
- System.out.println("----------------");
- // 获取文档里面的所有 name 元素
- List<Element> list = rootElement.selectNodes("//name");
- for (Element element : list) {
- System.out.println(element.getText());
- }
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>
- DTD
语法自成一派, 早起就出现的. 可读性比较差.
引入网络上的 DTD
引入本地的 DTD
<!-- -->
直接在 xml 里面嵌入 DTD 的约束规则
- <!DOCTYPE stus [ ]>
张三
- 18
- <!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 : 属性的值必须唯一
- <!ELEMENT stu (name , age)> 按照顺序来
- <!ELEMENT stu (name | age)> 两个中只能包含一个子元素
- Schema
其实就是一个 xml , 使用 xml 的语法规则, xml 解析器解析起来比较方便 , 是为了替代 DTD .
但是 Schema 约束文本内容比 DTD 的内容还要多. 所以目前也没有真正意义上的替代 DTD
约束文档:
- <!-- 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>
- <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 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:name>
- </aa:name>
- <bb:name>
- </bb:name>
程序架构
网页游戏
C/S(client/server)
QQ 微信 LOL
优点:
有一部分代码写在客户端, 用户体验比较好.
缺点:
服务器更新, 客户端也要随着更新. 占用资源大.
B/S(browser/server)
网页游戏 , webQQ ...
优点:
客户端只要有浏览器就可以了. 占用资源小, 不用更新.
服务器
其实服务器就是一台电脑. 配置比一般的要好.
Web 服务器软件
客户端在浏览器的地址栏上输入地址 , 然后 Web 服务器软件, 接收请求, 然后响应消息.
处理客户端的请求, 返回资源 | 信息
Web 应用 需要服务器支撑. index.HTML
- Tomcat apache
- WebLogic BEA
- Websphere IBM
IIS 微软
Tomcat 安装
解压 , 然后找到 bin/startup.bat
安装
启动之后, 如果能够正常看到黑窗口, 表明已经成功安装. 为了确保万无一失, 最好在浏览器的地址栏上输入 : http://localhost:8080/ , 如果有看到内容 就表明成功了.
如果双击了 startup.bat, 看到一闪而过的情形, 一般都是 JDK 的环境变量没有配置.
Tomcat 目录介绍
bin
包含了一些 jar , bat 文件 . startup.bat
conf
?
tomcat 的配置 server.xml Web.xml
lib
tomcat 运行所需的 jar 文件
logs
运行的日志文件
temp
临时文件
webapps
发布到 tomcat 服务器上的项目, 就存放在这个目录.
work
jsp 翻译成 class 文件存放地
?
把一个项目发布到 tomcat 中
让其他的电脑访问我这台电脑上的资源 . stu.xml
localhost : 本机地址
1. 拷贝这个文件到 tomcat 中的 webapps/ROOT 底下, 在浏览器里面访问:
http://localhost:8080/stu.xml
* 在 webaps 下面新建一个文件夹 xml , 然后拷贝文件放置到这个文件夹中
- ?
- http://localhost:8080/xml/stu.xml
- http://localhost:8080 : 其实对应的是到 webapps/root
- http://localhost:8080/xml/ : 对应是 webapps/xml
使用 IP 地址访问:
http://192.168.37.48:8080/xml/stu.xml
2. 配置虚拟路径
使用 localhost:8080 打开 tomcat 首页, 在左侧找到 tomcat 的文档入口, 点击进去后, 在左侧接着找到 Context 入口, 点击进入.
http://localhost:8080/docs/config/context.HTML
在 conf/server.xml 找到 host 元素节点.
加入以下内容.
- <!-- docBase : 项目的路径地址
- path : 对应的虚拟路径 一定要以 / 打头.-->
- <Context docBase="D:\javawebtest" path="/a"></Context>
在浏览器地址栏上输入: http://localhost:8080/a/stu.xml
3. 配置虚拟路径
在 tomcat/conf/catalina/localhost/ 文件夹下新建一个 xml 文件, 名字可以自己定义. person.xml
在这个文件里面写入以下内容
- <?xml version='1.0' encoding='utf-8'?>
- <Context docBase="D:\javawebtest"></Context>
在浏览器上面访问
http://localhost:8080/zbuter/stu.xml 的名字即可
给 Eclipse 配置 Tomcat
新建一个 Dynamic Web Project 选择对应的 Tomcat 版本 完成
在下方的 server 里面 右键新建一个服务器, 选择到 apache 分类, 找到对应的 tomcat 版本, 接着一步一步配置.
配置完毕后, 在 server 里面, 右键刚才的服务器, 然后 open , 找到上面的 Server Location , 选择中间的 Use Tomcat installation...
创建 Web 工程, 在 WebContent 下定义 HTML 文件, 右键工程, run as server
浏览器窗口输入 http://localhost:8080/[ 工程名]/[文件名. 扩展名] 即可
来源: http://www.bubuko.com/infodetail-2850163.html