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

相关推荐
Yeats_Liao6 分钟前
Java 软件测试(三):Mockito打桩与静态方法模拟解析
java·开发语言
JAVA学习通6 分钟前
RabbitMQ---面试题
java·开发语言
艾菜籽12 分钟前
UDP套接字的使用
java·开发语言·网络
七夜zippoe44 分钟前
缓存三大劫攻防战:穿透、击穿、雪崩的Java实战防御体系(三)
java·开发语言·缓存
lllsure1 小时前
【Docker】镜像
java·spring cloud·docker
一个帅气昵称啊1 小时前
Docker命令大全:从基础到高级实战指南
docker·容器·eureka·架构·.net
zhysunny1 小时前
51.不可变基础设施:云原生时代的「乐高城堡」建造法
java·云原生
无名客01 小时前
SQL语句执行时间太慢,有什么优化措施?以及衍生的相关问题
java·数据库·sql·sql语句优化
风槐啊1 小时前
邪修实战系列(3)
java·ide·spring boot·spring·tomcat
咋吃都不胖lyh1 小时前
SQL数据分析原代码--创建表与简单查询
java·数据库·sql