当前位置: 首页 > news >正文

Tomcat部署与HTTP协议详解

1. 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页面了;

<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时有错误,那么异常也会记录在日志文件中。

t emp

存放Tomcat的临时文件,这个目录下的东西可以在停止Tomcat后删除!

 webapps

存放web项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是tomcat自带的项目。其中ROOT是一个特殊的项目,在地址栏中访问:http://127.0.0.1:8080,没有给出项目目录时,对应的就是ROOT项目.http://localhost:8080/examples,进入示例项目。其中examples"就是项目名,即文件夹的名字。

wo rk

 运行时生成的文件,最终运行的文件都在这里。通过webapps中的项目生成的!可以把这个目录下的内容删除,再次运行时会生再次生成work目录。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个目录下。

 LICENSE:许可证。

 NOTICE:说明文件。

二者有可能不一致!!!

2.1 WEB项目的标准结构

一个标准的可以用于发布的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为默认的欢迎页

可以部署到tomcat/webapps中的标准app目录结构

resources文件夹和src文件夹下的内容发布之后都会存放在classes文件夹下

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配置文件的形式实现项目部署的

2. HTTP

HTTP/1.0

1996  年,HTTP/1.0 发布。该规范是显著扩大,并且支持三种请求方法:GET,Head,和POST。

HTTP /1.0 相对于 HTTP/0.9 的改进如下:

  • 每个请求都附加了 HTTP 版本。

  • 在响应开始时发送状态代码。

  • 请求和响应都包含 HTTP 报文头。

  • 内容类型能够传输 HTML 文件以外的文档。

HTTP/1.1

 HTTP 的第一个标准化版本 HTTP/1.1 ( RFC 2068 ) 于 1997 年初发布,支持七种请求方法:OPTIONS,GET,HEAD,POST,PUT,DELETE,和TRACE

 HTTP/1.1 是 HTTP 1.0 的增强:

  • 虚拟主机允许从单个 IP 地址提供多个域。

  • 持久连接和流水线连接允许 Web 浏览器通过单个持久连接发送多个请求。

  • 缓存支持节省了带宽并使响应速度更快。

  • HTTP/1.1 在接下来的 15 年左右将非常稳定。

  • 在此期间,出现了 HTTPS(安全超文本传输协议)。它是使用 SSL/TLS 进行安全加密通信的 HTTP 的安全版本

 浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。

对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。

浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。 

2.1 报文的格式

主体上分为报文首部和报文主体,中间空行隔开

  

2.1.1 报文报首

报文部首可以继续细分为 "行" 和 "头"

  

2.2 请求报文

客户端发给服务端的报文

2.2.1 GET请求

 请求报文格式

  • 请求首行(请求行); GET/POST 资源路径?参数 HTTP/1.1

  • 请求头信息(请求标头);

  • 请求空行

 请求行

  • 请求方式 GET

  • 访问服务器的资源路径?参数1=值1&参数2=值2 ... ...

  • 协议及版本 HTTP/1.1

GET /05_web_tomcat/login_success.html?username=admin&password=123213 HTTP/1.1

请求标头

<!--请求行-->
GET /web01/register.html HTTP/1.1<!--请求头-->
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
Host: localhost:8080
If-Modified-Since: Sun, 17 Aug 2025 09:47:52 GMT
If-None-Match: W/"4730-1755424072479"
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36
sec-ch-ua: "Not;A=Brand";v="99", "Google Chrome";v="139", "Chromium";v="139"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
-主机虚拟地址
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

2.2.2 form表单发送GET请求

1、由于请求参数在请求首行中已经携带了,所以没有请求体,也没有请求空行

2、请求参数拼接在url地址中,地址栏可见[url?name1=value1\&name2=value2],不安全

3、由于参数在地址栏中携带,所以由大小限制[地址栏数据大小一般限制为4k],只能携带纯文本

4、get请求参数只能上传文本数据

5、没有请求体。所以封装和解析都快,效率高, 浏览器默认提交的请求都是get请求比如:地址栏输入回车,超链接,表单默认的提交方式

2.2.3 POST请求

请求行

  • 请求方式 POST
  • 访问服务器的资源路径?参数1=值1&参数2=值2 ... ...
  • 协议及版本 HTTP/1.1
POST /05_web_tomcat/login_success.html HTTP/1.1

请求头

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-

请求空行

请求体:浏览器提交给服务器的数据

username=admin&password=1232131

2.2.4 form表单发送post请求

1、POST请求有请求体,而GET请求没有请求体。

2、post请求数据在请求体中携带,请求体数据大小没有限制,可以用来上传所有内容[文件、文本]

3、只能使用post请求上传文件

4、post请求报文多了和请求体相关的配置[请求头]

5、地址栏参数不可见,相对安全6、post效率比get低

POST请求要求将form标签的method的属性设置为post

2.3 响应报文

响应报文格式

  • 响应首行(响应行); 协议/版本 状态码 状态码描述

  • 响应头信息(响应头);

  • 空行;

  • 响应体;

HTTP/1.1 304
ETag: W/"4730-1755424072479"
Date: Mon, 18 Aug 2025 08:07:18 GMT
Keep-Alive: timeout=20
Connection: keep-alive

响应行组成部分

  • 协议及版本 HTTP/1.1

  • 响应状态码 200

  • 状态描述 OK (缺省)

HTTP/1.1 200 OK
说明:响应协议为HTTP1.1,响应状态码为200,表示请求成功; 

响应头

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小时的时区差

响应体

<!--需要浏览器解析使用的内容[如果响应的是html页面,最终响应体内容会被浏览器显示到页面中]-->
​
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>Insert title here</title></head><body>恭喜你,登录成功了...</body>
</html>

3. 响应状态码

响应状态码:响应码对浏览器来说很重要,它告诉浏览器响应的结果。

  • 200: 请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;

  • 302: 重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location指定新请求的URL地址;

  • 304: 使用了本地缓存

  • 404: 请求的资源没有找到,说明客户端错误的请求了不存在的资源;

  • 405: 请求的方式不允许

  • 500: 请求资源找到了,但服务器内部出现了错误;


http://www.lryc.cn/news/626808.html

相关文章:

  • 凸问题-非凸问题-非凸模型
  • 第十四届“中国软件杯”大赛晋级现场总决赛名单公布
  • PyTorch API 6
  • 单片机通信协议核心关系梳理笔记(UART/USART/232/485/SPI/12C/LIN/BLE/WIFI)
  • Spring Boot 3.4.x 性能优化实战:用 Undertow 替换 Tomcat 全指南​
  • JavaScript 性能优化实战:从原理到落地的完整指南
  • 【OneAI】使用Rust构建的轻量AI网关
  • 【Axure高保真原型】拖拉拽画圆
  • JavaScript 性能优化实战(易懂版)
  • 实验8.20
  • LeetCode 刷题【47. 全排列 II】
  • 一种融合AI与OCR的施工许可证识别技术,提升工程监管效率,实现自动化、精准化处理。
  • 【解决方案】powershell自动连接夜神adb端口
  • 深入解析RAGFlow六阶段架构
  • 结合SAT-3D,运动+饮食双重养腰新方式
  • 十二,数据结构-链表
  • Linux用30秒部署Nginx+Tomcat+Mysql+Jdk1.8环境
  • 学习嵌入式的第二十二天——数据结构——双向链表
  • 为6G和超快光谱铺路,《Nature Communications》发布新型太赫兹光芯片,实现多通道信号操纵
  • AI 效应: GPT-6,“用户真正想要的是记忆”
  • 书籍推荐|《Computational Methods for Rational Drug Design》574页
  • React响应式链路
  • CAMEL-Task1-CAMEL环境配置及你的第一个Agent
  • uniapp学习【上手篇】
  • CF每日4题(1500-1700)
  • 基于单片机水质检测系统/污水监测系统/水情监测
  • HTTP的协议
  • Git Commit 提交信息标准格式
  • GIT总结一键式命令清单(顺序执行)
  • 分布式唯一 ID 生成方案