8分钟讲完 Tomcat架构及工作原理

https://www.bilibili.com/video/BV1J3411k7Xc/?spm_id_from=333.337.search-card.all.click&vd_source=36145f3620bdf21c0f1a843352e603fb

JavaWeb开发必看!Tomcat架构及工作原理(8分钟)

分阐明了Tomcat的工作原理。

一、Tomcat的核心架构

00:16

Tomcat的目录结构

(1)bin

在bin目录下存放的是可执行的二进制文件------jar格式文件和批处理文件。

其中startup.bat用来启动服务器,shutdown.bat用来停止服务器。

学习批处理文件的网站:

1.https://www.yiibai.com/batch_script/batch_script_files.html

2.https://blog.csdn.net/helaisun/article/details/93218241

(2)conf

00:38

conf目录下存放的是配置文件,其中"++server.xml++"存放了一些服务器的关键配置信息。

(3)lib

00:47

lib目录存放jar包。

(4)webapps

00:50

webapps目录下存放了一台主机的网络内容。

(5)logs

logs目录存放日志文件。

(6)temp

temp目录存放临时文件。

【特别注意】

这里说的主机指的是一台Tomcat管理的虚拟主机,而并非是一台物理上发电脑。

通常,我们在浏览器地址栏中输入地址的第一部分就是虚拟主机的名字。

在这个意义上,域名就是虚拟主机的名字,每一个虚拟主机的内容都存放于自己的文件夹。

01:28

问题引入

视频中的电脑的Tomcat管理了两台虚拟主机

一台虚拟主机的名字叫localhost,对应的文件夹是Webapps,另一台虚拟主机的名字叫CaptainJack,对应的文件夹是wptwebapps。

【问题】一台电脑只有一个IP,都用8080端口,为什么能挂两个网站?

二、Tomcat核心框架及其工作原理

查看conf文件夹下的server.xml

02:13

【代码】

<?xml version="1.0" encoding="UTF-8"?>

Server

这是一个树形目录,Server根节点只会实例化一次。

02:30

Server容器下可以包含多个service节点,但通常只有一个,它的名字叫Catalina。

02:35

service类在Server容器中充当组件,它的作用就是对外提供服务。

02:40

Service内部包含一组连接器(Connector)和一个引擎(Engine),连接器负责通信,引擎负责处理请求。

02:52

注册连接器时,需要指定监听端口(port="8090"),以及所采用的通信协议(protocol="HTTP/1.1")。

02:56

每个连接器监听一个端口:

->采用HTTP协议的连接器的监听端口是80端口

->采用HTTPS协议的监听端口是443端口

【问】为什么要用协议传输信息?

->保证信息的完整性和避免语义产生二义性。

03:08

连接器的功能

1)监听网络接口

2)接收网络请求

3)读取请求中的网络字节流

4)将请求字节流转换成response对象

5)调用Servlet容器(指的是Engine),获取response对象

6)将response对象转换成响应字节流

7)将响应字节流发给浏览器

03:46

引擎

引擎也是一个容器,里面包含一个或多个host对象,即虚拟主机。

04:00

问题引入

在配置文件中应该指定虚拟主机的主机名(name="localhost"),以及它的内容所存放的文件夹(appBase="localhost"),视频中的电脑注册了两台虚拟主机。

04:29

【问】如何使浏览器访问主机名时访问本机的IP地址?

在++C:\Windows\System32\drivers\etc++ 下的hosts文件的末尾增添"++IP地址 域名++"的条目,就可以在本地进行该域名解析。

了解更多:https://www.cnblogs.com/mybilibili/p/10536783.html

【注】这时,浏览器可以通过相同的IP地址和相同的端口号访问到两个不同的虚拟主机。

【问】为什么一台电脑能部署多个网站?

05:06

通过网络抓包可以发现,浏览器发出的HTTP请求消息里面包含有要访问的主机名(在响应头中)。

请求消息中的主机名被连接器给识别出来,并且放到了Request对象里面。

引擎通过Request对象里面的目标主机名,将Request对象派发给相应的主机来处理,因此一台电脑能部署多个网站。

05:35

host

一台虚拟主机中通常挂着多个应用,一个应用对应着一个context对象。

05:42

Context

在配置文件(server.xml)中,需要将应用设为主机的子节点。

配置应用节点context的时候,有两个关键参数:

1)docBase(物理地址)

2)path(URL地址)

例如:

06:27

Wrapper

通常一个应用又包含多个不同的Servlet,每个Servlet可以有一个或多个实例。

同一个Servlet的所有实例被放在容器wrapper中进行管理。

【注】Engine host Context Wrapper都是容器

总结

通过这些容器,电脑上的Servlet被进行了详细的分类管理。

连接器给出的request(请求对象)里面,包含了他要访问的servlet的详细路径,具体地说就是主机名、应用名(路径)和servlet名(路径),因此各级容器收到了对象之后,就能够把它正确的派发给下一级容器,最后达到目标servlet对象。

这个request对象的层层转发过程,本质上是函数的层层调用过程。

调用完成之后,连接器将得到一个response对象,连接器将response对象转换为字节流返回给浏览器,这就是Tomcat的核心架构和工作原理。

【问】什么是类、组件、容器?

类:

https://baike.baidu.com/item/类/6824577

组件:具有高内聚,低耦合的特性

https://blog.csdn.net/touzani/article/details/1619472

容器:

https://www.cnblogs.com/qcloud1001/p/9273549.html

相关推荐
m0_564264181 分钟前
IDEA DEBUG调试时如何获取 MyBatis-Plus 动态拼接的 SQL?
java·数据库·spring boot·sql·mybatis·debug·mybatis-plus
崎岖Qiu28 分钟前
【设计模式笔记06】:单一职责原则
java·笔记·设计模式·单一职责原则
Hello.Reader33 分钟前
Flink ExecutionConfig 实战并行度、序列化、对象重用与全局参数
java·大数据·flink
码界奇点1 小时前
Apache IoTDB 架构特性与 PrometheusGrafana 监控体系部署实践
架构·apache·grafana·prometheus·iotdb
꒰ঌ 安卓开发໒꒱1 小时前
RabbitMQ面试全解析:从核心概念到高可用架构
面试·架构·rabbitmq
熊小猿1 小时前
在 Spring Boot 项目中使用分页插件的两种常见方式
java·spring boot·后端
paopaokaka_luck2 小时前
基于SpringBoot+Vue的助农扶贫平台(AI问答、WebSocket实时聊天、快递物流API、协同过滤算法、Echarts图形化分析、分享链接到微博)
java·vue.js·spring boot·后端·websocket·spring
老华带你飞2 小时前
机器人信息|基于Springboot的机器人门户展示系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·机器人·论文·毕设·机器人门户展示系统
notion20252 小时前
Adobe Lightroom Classic下载与安装教程(附安装包) 2025最新版详细图文安装教程
java·数据库·其他·adobe
JZC_xiaozhong2 小时前
异构系统集成提速:重构企业数据流转架构
大数据·重构·架构·数据分析·etl工程师·数据集成与应用集成·异构数据整合