XML & Tomcat
1、XML 简介
1.1 什么是 XML?
xml 是可扩展的标记性语言
1.2 XML 的作用?
①用来保存数据,而且这些数据具有自我描述性
②它可以用来作为项目或者模块的配置文件
③还可以作为网络传输数据的格式(不过现在用 JSON 为主)
2、XML 语法
- 文档声明
- 元素(标签)
- xml 属性
- xml 注释
- 文本区域(CDATA 区)
2.1 文档声明
我们先创建一个简单的 XML 文件,用来描述图书信息
①xml 声明:
<?xml version="1.0" encoding="UTF-8"?>
注:这个<?xml
要连在一起写,否则会有报错
②图书有 id 属性,表示唯一标识,包含有书名、作者和价格等信息
<?xml version="1.0" encoding="UTF-8"?>
<!-- xml声明 version是版本的意思 encoding是编码 -->
<books> <!-- 这是xml注释 -->
<book> <!-- book 标签描述 一本图书 id属性 描述的是 图书的编号 -->
<name>Java编程思想</name> <!-- name标签描述的是 图书的名称 -->
<author>张三</author> <!-- author标签描述的是 图书的作者 -->
<price>9,9</price> <!-- price标签描述的是 图书的价格 -->
</book>
<book> <!-- book 标签描述 一本图书 id属性 描述的是 图书的编号 -->
<name>Java从入门到放弃</name> <!-- name标签描述的是 图书的名称 -->
<author>李四</author> <!-- author标签描述的是 图书的作者 -->
<price>19,9</price> <!-- price标签描述的是 图书的价格 -->
</book>
<book> <!-- book 标签描述 一本图书 id属性 描述的是 图书的编号 -->
<name>Java核心技术</name> <!-- name标签描述的是 图书的名称 -->
<author>王五</author> <!-- author标签描述的是 图书的作者 -->
<price>29,9</price> <!-- price标签描述的是 图书的价格 -->
</book>
</books>
在浏览器中也可以查看

2.2 XML 注释
html 和 xml 的注释一样:
<!-- 注释内容 -->
2.3 元素(标签)
咱们先回忆一下:
html标签:
- ①格式:
<标签名>封装的数据</标签名>
- ②单标签:
<标签名/>
<br/> 换行
<hr/> 水平线
- ③双标签:
<标签名>封装的数据</标签名>
- ④标签名大小写不敏感
- ⑤标签有属性,有基本属性和事件属性
- ⑥标签要闭合(不闭合,html 中不报错,但我们要养成良好的书写习惯,闭合)
(1)什么是 xml 元素?

元素是指从开始标签到结束标签的内容
例如:<title>java编程思想</title>
元素 我们可以简单的理解为是 标签
Element 翻译为 元素
(2)XML 命名规则
①名称可以包含字母、数字以及其他的字符
<book id="SN213412341"> <!-- 描述一本书 -->
<author>班导</author> <!-- 描述书的作者信息 -->
<name>java 编程思想</name> <!-- 书名 -->
<price>9.9</price> <!-- 价格 -->
</book>
②名称不能以数字或标点符号开始

③名称不能以字符 “xml”(或者 XML、Xml)开始 (它是可以的)

④名称不能包含空格

(3)xml中的元素(标签)也分成 单标签 和 双标签
- 单标签:
- 格式:
<标签名 属性 = "值" 属性 = ”值“ ....../>
- 格式:
- 双标签:
- 格式:
< 标签名 属性=”值” 属性=”值” ......>文本数据或子标签</标签名>
- 格式:
2.4 XML 属性
xml 的标签属性和 html 的标签属性是非常类似的,属性可以提供元素的额外信息
在标签上可以书写属性:一个标签上可以书写多个属性,每个属性的值都必须使用 引号 引起来

2.5 语法规则
(1)所有 XML 元素都必须有关闭标签(也就是闭合)

(2)XML 标签对大小写敏感

(3)XML 必须正确地嵌套

(4)XML 文档必须有根元素
根元素就是顶级元素
没有父标签的元素,叫顶级元素
根元素是没有父标签的顶级元素,而且是唯一 一个才行

(5)XML 的属性值须加引号

(6)XML 中的特殊字符

(7)文本区域(CDATA 区)
CDATA语法可以告诉xml解析器,我 CDATA 里的文本内容,只是纯文本,不需要 xml 语法解析
CDATA格式:<![CDATA[ 这里可以把你输入的字符原样显示,不会解析 xml ]]>

3、 XML 解析技术介绍
xml:可扩展的标记性语言
不管是 html 文件还是 xml 文件,它们都是标记性文档,都可以使用 w3c 组织制定的 dom 技术来解析

document 对象表示的是整个文档(可以是 html 文档,也可以是 xml 文档)
早期 JDK 为我们提供了两种 xml 解析技术:dom 和 Sax(都已经过时,但我们需知道这两种技术)
dom 解析技术是 W3C 组织制定的,而所有的编程语言都对这个解析技术使用了自己的语言特点进行实现,Java 对 dom 技术解析标记也做了实现。
sun 公司在 JDK5 版本对 dom 解析技术进行升级:SAX(Simple API for XML)
SAX 解析,它跟 W3C 制定的解析不太一样。它是以类似事件机制通过回调告诉用户当前正在解析的内容。它是一行一行地读取 xml 文件进行解析的,不会创建大量的 dom 对象,所以它在解析 xml 时,在内存的使用和性能上,都优于 dom 解析。
第三方的解析:
- jdom 在 dom 基础上进行了封装
- dom4j 有对 jdom 进行了封装
- pull 主要用在 Android 手机开发,跟 sax 非常类似都是事件机制解析 xml 文件
4、dom4j 解析技术(★★★重点★★★)
由于 dom4j 它不是 sun 公司(现在被 Oracle 公司收购)的技术,而属于第三方公司的技术,我们需要使用 dom4j 就需要到 dom4j 官网下载 dom4j 的 jar 包
dom4j 的 jar 包
链接:https://pan.baidu.com/s/1PmGqifvUoGDqK27-8X9Caw 提取码:tw1c
(1)dom4j 类库的使用

(2)dom4j 目录的介绍
①docs 是文档目录

②如何查 dom4j 的文档
包目录开始:dom4j-1.6.1\docs\index.html

③dom4j 快速入门
打开②中的 index.html

④lib 目录

⑤src 目录是第三方类库的源码目录

(3)dom4j 编程步骤
第一步,先加载 xml 文件创建 document 对象
第二步,通过 document 对象拿到根元素对象
第三步,通过 根元素.elements("标签名")
,可以返回一个集合,这个集合里放着所有你指定的标签名对象
第四步,找到你要修改、删除的子元素,进行相应的操作
第五步,保存到硬盘上
(4)获取 document 对象
第一步,将包添加到类路径


需要解析的 books.xml 文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book sn="SN12341232">
<name>辟邪剑谱</name>
<price>9.9</price>
<author>班主任</author>
</book>
<book sn="SN12341231">
<name>葵花宝典</name>
<price>99.99</price>
<author>班长</author>
</book>
</books>
第二步,创建一个对应的实体类 Book:
public class Book {
private String sn;
private String name;
private Double price;
private String author;
public Book(String sn, String name, Double price, String author) {
this.sn = sn;
this.name = name;
this.price = price;
this.author = author;
}
public String getSn() {
return sn;
}
public void setSn(String sn) {
this.sn = sn;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String
toString() {
return "Book{" +
"sn='" + sn + '\'' +
", name='" + name + '\'' +
", price=" + price +
", author='" + author + '\'' +
'}';
}
}
第三步,解析获取 document 对象
@Test
public void getDocument() throws Exception {
// 1.要创建一个Document对象,我们需要先创建一个SAXReader对象
SAXReader saxReader = new SAXReader();
// 2.这个对象用于读取xml文件,然后返回一个Document对象
// read()方法的访问路径默认是从当前工程开始的
Document document = saxReader.read("src\\com\\hkw\\bookstore\\test\\dom4j\\books.xml");
// 3.打印到控制台,看看是否创建成功
System.out.println(document);
}
打印结果说明创建成功

第四步,遍历 标签 获取所有的标签中的内容(★★★重点★★★)
总共分为四个步骤:
- 第一步,通过创建 SAXReader 对象,来读取 xml 文件,获取 Document 对象
- 第二步,通过 Document 对象,拿到 XML 的根元素对象
- 第三步,通过根元素对象,获取所有的 book 标签对象
- 第四步,遍历每个 book 标签对象,然后获取到 book 标签对象内的每一个元素,再通过 getText() 方法拿到起始标签和结束标签之间的文本内容
具体代码如下:
@Test
public void readXML() throws Exception {
// 第一步,通过创建SAXReader对象,来读取xml文件,获取Document对象
// 1.要创建一个Document对象,我们需要先创建一个SAXReader对象
SAXReader saxReader = new SAXReader();
// 2.这个对象用于读取xml文件,然后返回一个Document对象
// read()方法的访问路径默认是从当前工程开始的
Document document = saxReader.read("src\\com\\hkw\\bookstore\\test\\dom4j\\books.xml");
// 第二步,通过Document对象,拿到XML的根元素对象
Element rootElement = document.getRootElement();
// 打印测试下
// Element.asXML() 将它当前元素转换为String对象
// System.out.println(rootElement.asXML());
// 第三步,通过根元素对象,获取所有的book标签对象
// Element.elements(标签名); 可以拿到当前元素下的指定的子元素的集合
List<Element> books = rootElement.elements();
// 第四步,遍历每个book标签对象,然后获取到book标签对象内的每一个元素,再通过getText()方法拿到起始标签和结束标签之间的文本内容
for (Element book:books) {
// 测试
// System.out.println(book.asXML());
// 拿到book下的sn属性的值
String sn = book.attributeValue("sn");
// 拿到book下的name元素对象
Element name = book.element("name");
// 拿到book下的price元素对象
Element price = book.element("price");
// 拿到book下的author元素对象
Element author = book.element("author");
System.out.println(new Book(sn,name.getText(),Double.parseDouble(price.getText()),author.getText()));
}
}
运行结果:

5、JavaWeb 的概念
5.1 什么是 JavaWeb?
JavaWeb 是指,所有通过 Java 语言编写可以通过浏览器访问的程序的总称,叫 JavaWeb
5.2 什么是请求?
请求是指客户端给服务器发送数据(Request)
5.3 什么是响应?
响应是指服务器给客户端回传数据(Response)
5.4 请求和响应的关系
请求和响应是成对出现,有请求就有响应

6、Web 资源的分类
Web 资源实现的技术和呈现的效果的不同,又分为静态资源和动态资源
(1)静态资源:html、css、js、txt、mp4视频、jpg图片
(2)动态资源:jsp页面、servlet程序
7、常用的 Web 服务器
(1)Tomcat
由 Apache 组织提供的一种 Web 服务器,提供对 jsp 和 Servlet 的支持,它是一种轻量级的 javaWeb 容器(服务器),也是当前应用最广的 javaWeb 服务器(免费)
(2)Jboss
是一个遵从 JavaEE 规范的、开放源代码的、纯 java 的 EJB 服务器,它支持所有的 JavaEE 规范(免费)
(3)GlassFish
有 Oracle 公司开发的一款 JavaWeb 服务器,是一款强健的商业服务器,达到产品级质量(应用很少)
(4)Resin
是 CAUCHO 公司的产品,是一个非常流行的服务器,对 servlet 和 jsp 提供了良好的支持,性能也比较优良,resin 自身采用 Java 语言开发(收费,应用比较多)
(5)WebLogin
是 Oracle 公司的产品,是目前应用最广泛的 Web 服务器,支持 JavaEE 规范,而且不断的完善以适应新的开发要求,适合大型项目(收费,用的不多,适合大公司)
8、Tomcat 服务器和 Servlet 版本的对应关系

Servlet 程序从 2.5 版本开始是现在市面上使用最多的版本(xml 配置)
到了 Servlet3.0 以后,就使用了注解版本的 Servlet
9、Tomcat 的使用
9.1 安装
下载\获取到你需要用的 Tomcat 版本对应的 zip 压缩包,解压到需要安装的目录即可
Tomcat 压缩包
链接:https://pan.baidu.com/s/1skyo_xe63WZ_HwCiY0uGAA 提取码:vsc0

解压后的文件夹

9.2 目录介绍

9.3 如何启动 Tomcat 服务器
9.3.1 第一种方式
①找到 Tomcat 目录中 bin 下的 startup.bat 文件,双击,就可以启动 Tomcat 服务器


注:如上图说明启动成功了,但是这个窗口不能关闭,关闭的话,Tomcat 服务器也会关闭
②如何测试 Tomcat 服务器启动成功了?
打开浏览器,在浏览器地址栏中输入以下地址测试(8080是 Tomcat 的默认端口号
):
http://localhost:8080
http://127.0.0.1:8080
http://真实ip:8080
如何查看本机 ip --- cmd 打开命令行模式输入 ipconfig
:
ipconfig

当出现如下界面时,说明 Tomcat 启动成功

③常见的 Tomcat 启动失败的原因:双击 startuup.bat 文件,会出现一个小黑窗口一闪而过,这个时候,失败的原因基本上都是因为没有配置好 JAVA_HOME 环境变量
如何配置 JAVA_HOME

常见的 JAVA_HOME 配置错误有以下几种情况:
- ①JAVA_HOME 必须全大写
- ②JAVA_HOME 中间必须是下划线,不能是减号
- ③JAVA_HOME 配置的路径只需要配置到 jdk 的安装目录即可,不需要带上 bin 目录
9.3.2 第二种方式
①打开命令行
②cd 到 Tomcat 的 bin 目录下
③输入启动命令
catalina run

9.4 Tomcat 的停止
①点击 Tomcat 服务器窗口的 × 关闭按钮
②把 Tomcat 服务器的窗口置为当前窗口,然后快捷键 ctrl + c
③在 Tomcat 的 bin 目录下的 shutdown.bat 文件,双击,即可关闭
9.5 如何修改 Tomcat 的端口号
MySQL 默认的端口号为 3306
Tomcat 默认的端口号为 8080
找到 Tomcat 的 conf 目录下的 server.xml 配置文件

平时上百度:http://www.baidu,com:80
HTTP 协议默认的端口号是:80(80 端口号可省略)
9.6 如何部署 Web 工程到 Tomcat 中
9.6.1 第一种部署方法
只需要把 web 工程中的目录拷贝到 Tomcat 的 webapps 目录下即可
第一步,在 Tomcat 的 webapps 下新建一个叫 book 的文件夹(工程)

第二步,把之前做的目录文件拷贝到 book 工程下


第三步,如何访问 Tomcat 下的 Web 工程
只需要在浏览器地址栏输入访问地址如下即可访问:
http://ip:port/工程名/目录下/文件名
比如:我们访问下 book 工程下的 index.html
http://localhost:8080/book/index.html

9.6.2 第二种部署方法
找到 Tomcat 下的 conf\Catalina\localhost ,创建如下配置文件

book_shop.xml 中的内容配置如下:
<!-- Context 表示一个工程上下文
path 表示工程的访问路径:/book_store
docBase 表示你的工程目录在哪里 -->
<Context path="/book_store" docBase="D:\code\javaweb\JavaWeb\book_store" />
注:配置文件名(book_shop)和 path 里的路径值需要相同
访问这个工程的路径就是如下:
http://localhost:8080/book_store
就表示访问 docBase 里的目录

9.7 手拖 html 页面到浏览器中和浏览器输入http://ip:端口号/工程名/资源名
的区别
手拖 html 页面的原理:

输入访问地址访问的原理:

9.8 ROOT 工程的访问以及默认 index.html 页面的访问
当我们在浏览器中输入访问地址如下:
第一种
http://ip:port
没有工程名的时候,默认访问的是 ROOT 工程
第二种
http://ip:port/工程名
没有资源名的时候,默认访问的是 index.html 页面
10、IDEA 整合 Tomcat 服务器
新建一个 Java Enterprise 项目,发现 Application Serverz 中没有选项可选
(1)点击 New ... > Tomcat Server

(2)Tomcat Home 选择我们本地对应的 Tomcat 安装目录,然后点击 OK

(3)此时会看到 IDEA 自动为我们选择好了刚配置的 Tomcat 版本

(4)勾选上 Web Application,点击 Next

(5)设置好工程或模块名称以及存放位置后,点击 Finish
若想要添加更多的Tomcat版本供以选择,操作菜单目录为:
File | Settings | Build, Execution, Deployment | Application Servers
(6)创建成功
(这里创建了一个 book_store 的动态 Web 工程)
并在 web 目录下手动新建了一个 lib 目录,用来存放第三方的 jar 包(需要自己配置导入进去)

(7)Web 工程的目录介绍

(8)如何为动态 Web 工程添加额外的 jar 包
①将项目需要用到的 jar 包拷贝到 lib 目录下(针对于 MySQL5)
用到的 jar 包
链接:https://pan.baidu.com/s/1V_7-1zwOo910ILzD19CI_w 提取码:245n


②打开项目的结构操作菜单界面(File > Project Structure > Project Settings > Libraries
)
添加一个自己的类库

②添加自己需要的 jar 包,点击 OK

③选择你添加的类库,给哪个模块使用

④选择 Artifacts 选项,将类库添加到打包部署中

出现如下图这样表示添加成功:

(9)如何在 IDEA 中部署工程到 Tomcat 上运行
①建议修改 web 工程对应的 Tomcat 运行实例的名称
第一步,点击 Edit Configurations...

第二步,修改 Name

②确认你的 Tomcat 实例中有你要部署运行的 Web 模块

③还可以修改你的 Tomcat 实例启动后默认的访问地址

④在 IDEA 中如何运行和停止 Tomcat 实例
启动

调试

停止

重启

⑤修改工程访问路径
主要是修改模块的上下文路径名称

⑥修改运行的端口号

⑦修改运行使用的浏览器

⑧配置资源热部署
