XML_Tomcat_HTTP

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的使用步骤

  1. 导入jar包 dom4j.jar

  2. 创建解析器对象(SAXReader)

  3. 解析xml 获得Document对象

  4. 获取根节点RootElement

  5. 获取根节点下的子节点

DOM4J的API介绍

1.创建SAXReader对象

java 复制代码
SAXReader saxReader = new SAXReader();
  1. 解析XML获取Document对象: 需要传入要解析的XML文件的字节输入流
java 复制代码
// 通过类加载器获得指向字节码根路径下的指定文件的输入流
InputStream resourceAsStream = TestDom4j.class.getClassLoader().getResourceAsStream("jdbc.xml");
// 通过输入流获得配置文件,解析成一个dom对象
Document document = saxReader.read(resourceAsStream);
  1. 获取文档的根标签
java 复制代码
Element rootElement = documen.getRootElement()
  1. 获取标签的子标签
java 复制代码
//获取所有子标签
List<Element> sonElementList = rootElement.elements();

//获取指定标签名的子标签
List<Element> sonElementList = rootElement.elements("标签名");
  1. 获取标签体内的文本
java 复制代码
String text = element.getText();
  1. 获取标签的某个属性的值
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:服务端有问题

相关推荐
minji...4 小时前
Linux 网络基础之传输层TCP(六)TCP报头格式,TCP可靠性,序号/确认序号,窗口大,标志位,初识三次握手四次挥手
linux·运维·服务器·网络·网络协议·tcp/ip·http
Arman_1 天前
02 rusty-cat 实战:MeowClient 配置、任务参数、进度回调与暂停恢复
http·https·rust·tokio·文件分片上传·文件分片下载
largecode1 天前
企业名称能在来电显示吗?号码显示公司名服务打通多终端展示
android·xml·ios·iphone·xcode·webview·phonegap
wangjialelele1 天前
HTTP Cookie 和 Session
http·cookie·session
艾莉丝努力练剑1 天前
【Linux网络】Linux 网络编程:HTTP(一)协议初识
linux·运维·服务器·网络·tcp/ip·计算机网络·http
Arman_1 天前
01 Rust 大文件断点上传下载入门:用 rusty-cat 让上传下载更可靠
http·https·rust·tokio·大量阅读·文件分片上传下载
月落归舟1 天前
深入理解Cookie与Session:解决HTTP无状态的核心方案
网络·网络协议·http
菜_小_白2 天前
tcpdump
linux·网络·测试工具·http·tcpdump
Simon523142 天前
HTTP、Cookie、Session知识小计
网络·网络协议·http