当前位置: 首页 > 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.dtcms.com/a/341198.html

相关文章:

  • 佳维视工业一体机在公共交通系统配套中的应用
  • 疯狂星期四文案网第45天运营日记
  • LTspice仿真电路:(三十五)LED恒流驱动仿真(LT3497)
  • burpsuite+captcha-killer插件识别图片验证码进行爆破
  • AiPy 文档自动化处理实践:从 docx 到结构化 db 的高效转换方案
  • 华为仓颉语言的class(类)初步
  • ES Modules +案例分析
  • 【C++】动态导入Windows系统API的简单方法
  • Docker复杂安装--最详细的MySQL主从复制与Redis集群安装、主从复制、主从扩容主从缩容实战版
  • 03-dockerfile
  • 8月7日国赛全真模拟!2025“华数杯”数学建模竞赛,常用模型及算法总结
  • 网络连接的核心机制
  • Python 数据可视化:Matplotlib 与 Seaborn 实战
  • [TryHackMe](知识学习)Hacking with PowerShell
  • 浅显易懂——Redis、SpringDataRedis
  • 充值系统开源版,支持对接码支付,支持三级分销
  • 深入解析 Containerd 的工作原理
  • K8S-Ingress资源对象
  • 【C2000常见问题】当板子处于强电噪声环境下,或带重载时C2000芯片的PWM发波会出现异常,导致炸管。
  • StarRocks学习4-查询优化与性能调优
  • 使用 FastAPI 的 WebSockets 和 Elasticsearch 来构建实时应用
  • 永磁同步电机谐波抑制算法(13)——传统预测控制与传统谐波抑制的碰撞
  • 【学习笔记】大话设计模式——一些心得及各设计模式思想记录
  • 372. 超级次方
  • 力扣hot100:最大子数组和的两种高效方法:前缀和与Kadane算法(53)
  • 【数据结构】递归与非递归:归并排序全解析
  • CreateRef和useRef
  • 继续记事本项目
  • 三轴云台之闭环反馈技术
  • MySQL数据库安全配置核心指南