XML
XML(EXtensible Markup Language),翻译过来就是可扩展标记语言。所以很明显,XML和HTML一样都是标记语言,也就是说它们的基本语法都是标签。
可扩展 三个字表面上的意思是XML允许自定义格式[在XML基本语法规范的基础上]。
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文档声明 是固定格式,文档声明一定要从第一行第一列开始写,之前不允许声明其他内容
XML
<?xml version="1.0" encoding="UTF-8"?>
xml配置文件语法
根标签:根标签有且只能有一个。
标签关闭
双标签:开始标签和结束标签必须成对出现。
单标签:单标签在标签内关闭。
标签嵌套:可以嵌套,但是不能交叉嵌套。
注释不能嵌套
标签名、属性名建议使用小写字母
属性
属性必须有值
属性值必须加引号,单双都行
xml配置文件约束
根据XML约束中的规定来编写XML配置文件,而且会在我们编写XML的时候根据约束来提示我们编写, 而XML约束主要包括DTD和Schema两种。
DTD
Schema
Schema约束要求我们一个XML文档中,所有标签,所有属性都必须在约束中有明确的定义。
DOM4J进行XML解析
将标记型语言文档转化为树形结构的对象
DOM4J的使用步骤
-
导入jar包 dom4j.jar
-
创建解析器对象(SAXReader)
-
解析xml 获得Document对象
-
获取根节点RootElement
-
获取根节点下的子节点
DOM4J的API介绍
1.创建SAXReader对象
java
SAXReader saxReader = new SAXReader();
- 解析XML获取Document对象: 需要传入要解析的XML文件的字节输入流
java
// 通过类加载器获得指向字节码根路径下的指定文件的输入流
InputStream resourceAsStream = TestDom4j.class.getClassLoader().getResourceAsStream("jdbc.xml");
// 通过输入流获得配置文件,解析成一个dom对象
Document document = saxReader.read(resourceAsStream);
- 获取文档的根标签
java
Element rootElement = documen.getRootElement()
- 获取标签的子标签
java
//获取所有子标签
List<Element> sonElementList = rootElement.elements();
//获取指定标签名的子标签
List<Element> sonElementList = rootElement.elements("标签名");
- 获取标签体内的文本
java
String text = element.getText();
- 获取标签的某个属性的值
java
String value = element.attributeValue("属性名");
Tomcat
WEB服务器
Web服务器通常由硬件和软件共同构成。
硬件:电脑,提供服务供其它客户电脑访问
软件:电脑上安装的服务器软件,安装后能提供服务给网络中的其他计算机,将本地文件映射成一个虚拟的url地址供网络中的其他人访问。[linux操作系统-JRE-Tomcat]

Tomcat软件服务器
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,因为Tomcat 技术先进、性能稳定,而且免费,成为目前比较流行的Web软件应用服务器。
Tomcat目录及测试
bin:该目录下存放的是二进制可执行文件[Tomcat相关命令],startup.bat用来启动Tomcat,但需要先配置JAVA_HOME环境变量才能启动,shutdawn.bat用来停止Tomcat
conf:是一个非常重要的目录,这个目录下有四个最为重要的文件:
server.xml:配置整个服务器信息。例如修改端口号。默认HTTP请求的端口号是:8080
tomcat-users.xml:存储tomcat用户的文件,这里保存的是tomcat的用户名及密码,以及用户的角色信息。可以按着该文件中的注释信息添加tomcat用户,然后就可以在Tomcat主页中进入Tomcat Manager页面了
web.xml:部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。这些MIME类型是客户端与服务器之间说明文档类型的,如用户请求一个html网页,那么服务器还会告诉客户端浏览器响应的文档是text/html类型的,这就是一个MIME类型。客户端浏览器通过这个MIME类型就知道如何处理它了。当然是在浏览器中显示这个html文件了。但如果服务器响应的是一个exe文件,那么浏览器就不可能显示它,而是应该弹出下载窗口才对。MIME就是用来说明文档的内容是什么类型的!
context.xml:对所有应用的统一配置,通常我们不会去配置它。
lib:Tomcat的类库,里面是一大堆jar文件。如果需要添加Tomcat依赖的jar文件,可以把它放到这个目录中,也可以把应用依赖的jar文件放到这个目录中,这个目录中的jar所有项目都可以共享之,但当改变Tomcat服务器时,可能导致程序找不到
logs:这个目录中都是日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也会记录在日志文件中。
temp:存放Tomcat的临时文件,这个目录下的东西可以在停止Tomcat后删除
work:运行时生成的文件,最终运行的文件都在这里。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个目录下。
webapps:存放web项目的目录,其中每个文件夹都是一个项目。其中ROOT是一个特殊的项目,在地址栏中访问:http://127.0.0.1:8080,没有给出项目目录时,对应的就是ROOT项目.http://localhost:8080/examples[项目的上下文路径与项目的访问路径],进入示例项目。其中examples[项目的部署目录]就是项目名,即文件夹的名字。
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为默认的欢迎页
IDEA部署并运行项目的原理
idea并没有直接进将编译好的项目放入tomcat的webapps中
idea根据关联的tomcat,创建了一个tomcat副本,将项目部署到了这个副本中
idea的tomcat副本在C:\用户\当前用户\AppData\Local\JetBrains\IntelliJIdea2022.2\tomcat\中
idea的tomcat副本并不是一个完整的tomcat,副本里只是准备了和当前项目相关的配置文件而已
idea启动tomcat时,是让本地tomcat程序按照tomcat副本里的配置文件运行
idea的tomcat副本部署项目的模式是通过conf/Catalina/localhost/*.xml配置文件的形式实现项目部署的
HTTP
简介
HTTP 超文本传输协议 (HTTP-Hyper Text transfer protocol),是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
客户端与服务端通信时传输的内容我们称之为报文。HTTP协议就是规定报文的格式。规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。客户端发送给服务器的称为"请求报文",服务器发送给客户端的称为"响应报文"

HTTP/1.1:虚拟主机允许从单个 IP 地址提供多个域;持久连接和流水线连接允许 Web 浏览器通过单个持久连接发送多个请求;缓存支持[数据获取使用后暂时不删除]节省了带宽并使响应速度更快
请求和响应报文
报文的格式:主体上分为报文首部和报文主体,中间空行隔开

报文部首可以继续细分为 "行" 和 "头"[键值对]

请求报文:客户端发给服务端的报文
请求报文格式
bash
请求首行(**请求行**);GET/POST[请求方式] 资源路径?参数[资源路径] HTTP/1.1[协议及版本号]
请求头信息(**请求头**);
空行;
请求体;POST请求才有请求体
form表单发送GET请求特点:
1、由于请求参数在请求首行中已经携带了,所以没有请求体,也没有请求空行
2、请求参数拼接在url地址中,地址栏可见\[url?name1=value1\&name2=value2],不安全
3、由于参数在地址栏中携带,所以由大小限制[地址栏数据大小一般限制为4k],只能携带纯文本
4、get请求参数只能上传文本数据
5、没有请求体。所以封装和解析都快,效率高, 浏览器默认提交的请求都是get请求比如:地址栏输入回车,超链接,表单默认的提交方式
bash
GET /05_web_tomcat/login_success.html?username=admin&password=123213 HTTP/1.1
请求头
bash
-主机虚拟地址
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
form表单发送post请求特点:
1、POST请求有请求体,而GET请求没有请求体。
2、post请求数据在请求体中携带,请求体数据大小没有限制,可以用来上传所有内容\[文件、文本]
3、只能使用post请求上传文件
4、post请求报文多了和请求体相关的配置\[请求头]
5、地址栏参数不可见,相对安全
6、post效率比get低
bash
POST /05_web_tomcat/login_success.html HTTP/1.1
请求头
bash
Host: localhost:8080
Connection: keep-alive
Content-Length: 31 -请求体内容的长度
Cache-Control: max-age=0 -无缓存
Origin: http://localhost:8080
Upgrade-Insecure-Requests: 1 -协议的自动升级
Content-Type: application/x-www-form-urlencoded -请求体内容类型[服务器根据类型解析请求体参数]
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
Cookie:JSESSIONID-
响应报文:服务端发给客户端的报文
响应报文格式
bash
响应首行(**响应行**); 协议/版本 状态码 状态码描述
响应头信息(**响应头**);
空行;
响应体;
bash
HTTP/1.1 200 OK
说明:响应协议为HTTP1.1,响应状态码为200,表示请求成功;
响应头
bash
Server: 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小时的时区差
响应状态码:响应码对浏览器来说很重要,它告诉浏览器响应的结果。比较有代表性的响应码如下:
bash
200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,
服务器会发送一个响应头Location指定新请求的URL地址;
304:使用了本地缓存
404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
405:请求的方式不允许
500:请求资源找到了,但服务器内部出现了错误;
1xx:继续
2xx:成功
3xx:重定向
4xx:客户端有问题
5xx:服务端有问题