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

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/%E7%B1%BB/6824577

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

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

容器:

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

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

相关文章:

  • Node.js与Webpack
  • 前端面试专栏-算法篇:17. 排序算法
  • Spring SseEmitter 系统详细讲解
  • XILINX FPGA如何做时序分析和时序优化?
  • 手机内存融合是什么意思
  • Redis—哨兵模式
  • C++之路:类基础、构造析构、拷贝构造函数
  • 算法学习笔记:5.后缀数组——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • MySQL 学习 之 你还在用 TIMESTAMP 吗?
  • Functionize 结合了 AI 与云平台的现代化自动化测试工具
  • MySQL 8.0 OCP 1Z0-908 题目解析(16)
  • curl for android
  • 高通QCS8550部署Yolov10模型与性能测试
  • ADC笔试面试题型和详细解析下
  • 蒙特卡洛方法:随机抽样的艺术与科学
  • c++ 的标准库 --- std::
  • {{ }}和v-on:click
  • 重学React(二):添加交互
  • 前端单元测试覆盖率工具有哪些,分别有什么优缺点
  • 鸿蒙操作系统核心特性解析:从分布式架构到高效开发的全景技术图谱
  • 深度学习-逻辑回归
  • 异步Websocket构建聊天室
  • 认识kubernetes kubeadm安装k8s
  • 触发器设计美国VPS:优化数据库性能的关键策略
  • 基于连接感知的实时困倦分类图神经网络
  • 云计算中的tap口、bond口、qr口:它们究竟有何玄机?
  • 配置diffusion policy并测试和训练 pushT demo模型
  • 一天两道力扣(1)
  • 【进阶篇-消息队列】——Kafka如何实现事务的
  • Element 的 Message 多个显示时,只显示一个的封装办法