XML
可扩展 三个字表面上的意思是XML允许自定义格式。但这不代表你可以随便写。
在XML基本语法规范的基础上,你使用的那些第三方应用程序、框架会通过XML约束的方式强制规定配置文件中可以写什么和怎么写
XML基本语法这个知识点的定位是:我们不需要从零开始,从头到尾的一行一行编写XML文档,而是在第三方应用程序、框架已提供的配置文件的基础上修改。要改成什么样取决于你的需求,而怎么改取决XML基本语法和具体的XML约束。
1.1 常见配置文件类型
properties文件,例如druid连接池就是使用properties文件作为配置文件
XML文件,例如Tomcat就是使用XML文件作为配置文件
YAML文件,例如SpringBoot就是使用YAML作为配置文件
json文件,通常用来做文件传输,也可以用来做前端或者移动端的配置文件
1.11语法规范
-
由键值对组成
-
键和值之间的符号是等号
-
每一行都必须顶格写,前面不能有空格之类的其他符号
1.1.2 xml配置文件
示例
XML
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student>
<name>张三</name>
<age>18</age>
</student>
<student>
<name>李四</name>
<age>20</age>
</student>
</students>
XML的基本语法
- XML的基本语法和HTML的基本语法简直如出一辙。其实这不是偶然的,XML基本语法+HTML约束=HTML语法。在逻辑上HTML确实是XML的子集。
- XML文档声明 这部分基本上就是固定格式,要注意的是文档声明一定要从第一行第一列开始写
XML<?xml version="1.0" encoding="UTF-8"?>
根标签
- 根标签有且只能有一个。
标签关闭
双标签:开始标签和结束标签必须成对出现。
单标签:单标签在标签内关闭。
标签嵌套
- 可以嵌套,但是不能交叉嵌套。
注释不能嵌套
标签名、属性名建议使用小写字母
属性
属性必须有值
属性值必须加引号,单双都行
xml作为配置文件,可以更好地存储一些信息
xml文件第一行一定是
<?xml version="1.0" encoding="字符集"?>
根标签只能有一个
xml是有约束的,分为dtd约束和schema约束,dtd约束简单不细致,schema约束复杂细致。
XML<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
XML
<?xml version="1.0" encoding="UTF-8"?>
<!--
XML文档声明 这部分基本上就是固定格式,要注意的是文档声明一定要从第一行第一列开始写
<?xml version="1.0" encoding="UTF-8"?>
根标签
根标签有且只能有一个。
标签关闭
双标签:开始标签和结束标签必须成对出现。
单标签:单标签在标签内关闭。
标签嵌套
可以嵌套,但是不能交叉嵌套。
注释不能嵌套
标签名、属性名建议使用小写字母
属性
属性必须有值
属性值必须加引号,单双都行
将来我们主要就是根据XML约束中的规定来编写XML配置文件,而且会在我们编写XML的时候根据约束来提示我们编写, 而XML约束主要包括DTD和Schema两种。
DTD
Schema
Schema约束要求我们一个XML文档中,所有标签,所有属性都必须在约束中有明确的定义。
-->
<jdbc>
<dev id="001">
<username>root</username>
<password>123456</password>
<driver>com.mysql.cj.jdbc.Driver</driver>
<url>jdbc:mysql://localhost:3306/atguigu</url>
</dev>
<test id="002">
<username>root</username>
<password>123456</password>
<driver>com.mysql.cj.jdbc.Driver</driver>
<url>jdbc:mysql://localhost:3306/atguigu</url>
</test>
<formal id="003">
<username>root</username>
<password>123456</password>
<driver>com.mysql.cj.jdbc.Driver</driver>
<url>jdbc:mysql://localhost:3306/atguigu</url>
</formal>
</jdbc>
1.2 DOM4J进行XML解析
1.2.1 DOM4J的使用步骤
导入jar包 dom4j.jar
创建解析器对象(SAXReader)
解析xml 获得Document对象
获取根节点RootElement
获取根节点下的子节点
1.2.2 DOM4J的API介绍
1.创建SAXReader对象
XML
SAXReader saxReader = new SAXReader();
- 解析XML获取Document对象: 需要传入要解析的XML文件的字节输入流
XML
Document document = reader.read(inputStream);
- 获取文档的根标签
XML
Element rootElement = documen.getRootElement()
- 获取标签的子标签
XML
//获取所有子标签
List<Element> sonElementList = rootElement.elements();
//获取指定标签名的子标签
List<Element> sonElementList = rootElement.elements("标签名");
- 获取标签体内的文本
XML
String text = element.getText();
- 获取标签的某个属性的值
XML
String value = element.attributeValue("属性名");
二 Tomcat10
2.1 WEB服务器
Web服务器通常由硬件和软件共同构成。
硬件:电脑,提供服务供其它客户电脑访问
软件:电脑上安装的服务器软件,安装后能提供服务给网络中的其他计算机,将本地文件映射成一个虚拟的url地址供网络中的其他人访问。
2.2 Tomcat目录及测试
bin:该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat10.exe、tomcat10w.exe,前者是在控制台下启动Tomcat,后者是弹出GUI窗口启动Tomcat;如果是解压版,那么会有startup.bat和shutdown.bat文件,startup.bat用来启动Tomcat,但需要先配置JAVA_HOME环境变量才能启动,shutdawn.bat用来停止Tomcat;
conf:这是一个非常非常重要的目录,这个目录下有四个最为重要的文件:
server.xml:配置整个服务器信息。例如修改端口号。默认HTTP请求的端口号是:8080
tomcat-users.xml:存储tomcat用户的文件,这里保存的是tomcat的用户名及密码,以及用户的角色信息。可以按着该文件中的注释信息添加tomcat用户,然后就可以在Tomcat主页中进入Tomcat Manager页面了;
XML<tomcat-users xmlns="http://tomcat.apache.org/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd" version="1.0"> <role rolename="admin-gui"/> <role rolename="admin-script"/> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <user username="admin" password="admin" roles="admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status" /> </tomcat-users>
web.xml:部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。这些MIME类型是客户端与服务器之间说明文档类型的,如用户请求一个html网页,那么服务器还会告诉客户端浏览器响应的文档是text/html类型的,这就是一个MIME类型。客户端浏览器通过这个MIME类型就知道如何处理它了。当然是在浏览器中显示这个html文件了。但如果服务器响应的是一个exe文件,那么浏览器就不可能显示它,而是应该弹出下载窗口才对。MIME就是用来说明文档的内容是什么类型的!
context.xml:对所有应用的统一配置,通常我们不会去配置它。
lib:Tomcat的类库,里面是一大堆jar文件。如果需要添加Tomcat依赖的jar文件,可以把它放到这个目录中,当然也可以把应用依赖的jar文件放到这个目录中,这个目录中的jar所有项目都可以共享之,但这样你的应用放到其他Tomcat下时就不能再共享这个目录下的jar包了,所以建议只把Tomcat需要的jar包放到这个目录下;
logs:这个目录中都是日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也会记录在日志文件中。
temp:存放Tomcat的临时文件,这个目录下的东西可以在停止Tomcat后删除!
webapps:存放web项目的目录,其中每个文件夹都是一个项目 ;如果这个目录下已经存在了目录,那么都是tomcat自带的项目。其中ROOT是一个特殊的项目,在地址栏中访问:http://127.0.0.1:8080,没有给出项目目录时,对应的就是ROOT项目.http://localhost:8080/examples,进入示例项目。其中examples"就是项目名,即文件夹的名字。
work:运行时生成的文件,最终运行的文件都在这里。通过webapps中的项目生成的!可以把这个目录下的内容删除,再次运行时会生再次生成work目录。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个目录下。
LICENSE:许可证。
NOTICE:说明文件。
2.3 WEB项目的标准结构
app 本应用根目录
static 非必要目录,约定俗成的名字,一般在此处放静态资源 ( css js img)
WEB-INF 必要目录,必须叫WEB-INF,受保护的资源目录,浏览器通过url不可以直接访问的目录
classes 必要目录,src下源代码,配置文件,编译后会在该目录下,web项目中如果没有源码,则该目录不会出现
lib 必要目录,项目依赖的jar编译后会出现在该目录下,web项目要是没有依赖任何jar,则该目录不会出现
web.xml 必要文件,web项目的基本配置文件. 较新的版本中可以没有该文件,但是学习过程中还是需要该文件
index.html 非必要文件,index.html/index.htm/index.jsp为默认的欢迎页
三 HTTP协议
3.1 HTTP简介
HTTP 超文本传输协议 (HTTP-Hyper Text transfer protocol),是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过十几年的使用与发展,得到不断地完善和扩展。它是一种详细规定了浏览器和万维网服务器之间互相通信的规则 ,通过因特网传送万维网文档的数据传送协议。客户端与服务端通信时传输的内容我们称之为报文 。HTTP协议就是规定报文的格式。 HTTP就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。实际我们要学习的就是这两种报文**。客户端发送给服务器的称为"请求报文** ",服务器发送给客户端的称为"响应报文"。
交互的方式和数据的格式
HTTP提供了客户端和服务端的交互的方式和数据的格式
交互的方式
请求:客户端向服务端发送
响应:服务端向客户端返回
数据的格式
请求时发送的数据称为请求报文
响应时返回的数据称为响应报文
报文
报文是有规定的格式:
- 报文首部:
- 行
- 头
- 报文主体
请求报文的格式对应称为请求行、请求头、请求体
响应报文的格式对应称为响应行、响应头、响应体
HTTP长链接和短链接
HTTP是一种应用层协议,规定的是报文的格式,但是不规定传输。
TCP是一种传输层协议,是面向连接的协议。而想要确定传输的实体,就要通过IP协议。
IP是一种网络层协议。
TCP连接的步骤为:创建连接(三次握手)--->关闭连接(四次挥手)
短链接即为在客户端向服务端发送请求时,每有一个资源需要向服务端发送连接,都进行一遍三次握手四次挥手,如果有n个资源需要向服务器端发送连接,就进行了n遍三次握手四次挥手
长连接即为在客户端向服务端发送请求时,先三次握手建立连接,获取到所有资源后才四次握手关闭连接,减少了TCP连接的次数
HTTP1.1时,增加了缓存机制,即一个资源获取到后会先缓存下来,如此重复获取此资源时,不用再重复请求。节省了带宽并使得响应速度也更快
3.2 请求和响应报文
3.2.1 报文的格式
主体上分为报文首部和报文主体,中间空行隔开
报文部首可以继续细分为 "行" 和 "头"
3.2.2 请求报文
客户端发给服务端的报文
-
请求报文格式
-
请求首行(请求行); GET/POST 资源路径?参数 HTTP/1.1
-
请求头信息(请求头);
-
空行;
-
请求体;POST请求才有请求体
-
浏览器 f12 网络下查看请求数据包
form表单发送GET请求特点
1、由于请求参数在请求首行中已经携带了,所以没有请求体,也没有请求空行
2、请求参数拼接在url地址中,地址栏可见[url?name1=value1&name2=value2],不安全
3、由于参数在地址栏中携带,所以由大小限制[地址栏数据大小一般限制为4k],只能携带纯文本
4、get请求参数只能上传文本数据 5、没有请求体。所以封装和解析都快,效率高, 浏览器默认提交的请求都是get请求比如:地址栏输入回车,超链接,表单默认的提交方式
查看GET请求行,请求头,请求体
请求行组成部分
请求方式 GET
访问服务器的资源路径?参数1=值1&参数2=值2 ... ...
协议及版本 HTTP/1.1
XMLGET /05_web_tomcat/login_success.html?username=admin&password=123213 HTTP/1.1
请求头
XML
-主机虚拟地址
Host: localhost:8080
-长连接
Connection: keep-alive
-请求协议的自动升级[http的请求,服务器却是https的,浏览器自动会将请求协议升级为https的]
Upgrade-Insecure-Requests: 1
- 用户系统信息
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36
- 浏览器支持的文件类型
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
- 当前页面的上一个页面的路径[当前页面通过哪个页面跳转过来的]: 可以通过此路径跳转回上一个页面, 广告计费,防止盗链
Referer: http://localhost:8080/05_web_tomcat/login.html
- 浏览器支持的压缩格式
Accept-Encoding: gzip, deflate, br
- 浏览器支持的语言
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
请求空行
-
请求体
- GET请求数据不放在请求体
form表单发送post请求特点
1、POST请求有请求体,而GET请求没有请求体。
2、post请求数据在请求体中携带,请求体数据大小没有限制,可以用来上传所有内容[文件、文本] 3、只能使用post请求上传文件
4、post请求报文多了和请求体相关的配置[请求头]
5、地址栏参数不可见,相对安全
6、post效率比get低
POST请求要求将form标签的method的属性设置为post
查看post的请求行 请求头 请求体
请求行组成部分
请求方式 POST
访问服务器的资源路径?参数1=值1&参数2=值2 ... ...
协议及版本 HTTP/1.1
XMLPOST /05_web_tomcat/login_success.html HTTP/1.1
请求空行
请求体:浏览器提交给服务器的数据
XMLusername=admin&password=1232131
3.2.3 响应报文
响应报文格式
响应首行(响应行); 协议/版本 状态码 状态码描述
响应头信息(响应头);
空行;
响应体;
响应行组成部分
协议及版本 HTTP/1.1
响应状态码 200
状态描述 OK (缺省)
XML
HTTP/1.1 200 OK
说明:响应协议为HTTP1.1,响应状态码为200,表示请求成功;
响应头
XMLServer: Apache-Coyote/1.1 服务器的版本信息 Accept-Ranges: bytes ETag: W/"157-1534126125811" Last-Modified: Mon, 13 Aug 2018 02:08:45 GMT Content-Type: text/html 响应体数据的类型[浏览器根据类型解析响应体数据] Content-Length: 157 响应体内容的字节数 Date: Mon, 13 Aug 2018 02:47:57 GMT 响应的时间,这可能会有8小时的时区差
响应体
html<!--需要浏览器解析使用的内容[如果响应的是html页面,最终响应体内容会被浏览器显示到页面中]--> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> 恭喜你,登录成功了... </body> </html>
响应状态码:响应码对浏览器来说很重要,它告诉浏览器响应的结果。比较有代表性的响应码如下:
200: 请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
302: 重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location指定新请求的URL地址;
304: 使用了本地缓存
404: 请求的资源没有找到,说明客户端错误的请求了不存在的资源;
405: 请求的方式不允许
500: 请求资源找到了,但服务器内部出现了错误;
更多的响应状态码
状态码 | 状态码英文描述 | 中文含义 |
---|---|---|
1** | ||
100 | Continue | 继续。客户端应继续其请求 |
101 | Switching Protocols | 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
2** | ||
200 | OK | 请求成功。一般用于GET与POST请求 |
201 | Created | 已创建。成功请求并创建了新的资源 |
202 | Accepted | 已接受。已经接受请求,但未处理完成 |
203 | Non-Authoritative Information | 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 |
204 | No Content | 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
205 | Reset Content | 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 |
206 | Partial Content | 部分内容。服务器成功处理了部分GET请求 |
3** | ||
300 | Multiple Choices | 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 |
301 | Moved Permanently | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | Found | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
303 | See Other | 查看其它地址。与301类似。使用GET和POST请求查看 |
304 | Not Modified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
305 | Use Proxy | 使用代理。所请求的资源必须通过代理访问 |
306 | Unused | 已经被废弃的HTTP状态码 |
307 | Temporary Redirect | 临时重定向。与302类似。使用GET请求重定向 |
4** | ||
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
401 | Unauthorized | 请求要求用户的身份认证 |
402 | Payment Required | 保留,将来使用 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
405 | Method Not Allowed | 客户端请求中的方法被禁止 |
406 | Not Acceptable | 服务器无法根据客户端请求的内容特性完成请求 |
407 | Proxy Authentication Required | 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权 |
408 | Request Time-out | 服务器等待客户端发送的请求时间过长,超时 |
409 | Conflict | 服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突 |
410 | Gone | 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置 |
411 | Length Required | 服务器无法处理客户端发送的不带Content-Length的请求信息 |
412 | Precondition Failed | 客户端请求信息的先决条件错误 |
413 | Request Entity Too Large | 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 |
414 | Request-URI Too Large | 请求的URI过长(URI通常为网址),服务器无法处理 |
415 | Unsupported Media Type | 服务器无法处理请求附带的媒体格式 |
416 | Requested range not satisfiable | 客户端请求的范围无效 |
417 | Expectation Failed | 服务器无法满足Expect的请求头信息 |
5** | ||
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
501 | Not Implemented | 服务器不支持请求的功能,无法完成请求 |
502 | Bad Gateway | 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 |
503 | Service Unavailable | 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
504 | Gateway Time-out | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
505 | HTTP Version not supported | 服务器不支持请求的HTTP协议的版本,无法完成处理 |