tomcat的整体结构


可能我们已经很久没有注意过tomcat了,它就像是生活中的锅碗瓢盆,
我们经常用到,却又总是忽略它的存在,不妨花些时间,去了解一下。

简介

tomcat是一个servlet容器,接收请求、发送响应。

tomcat负责载入我们的servlet,调用init方法来初始化servlet;
对于一个request请求,创建一个ServletRequest实例和一个ServletResponse实例,
调用service方法时,将这两个实例作为参数传入;
关闭servlet时,调用servlet的destroy方法并将其卸载。

tomcat支持的应用层协议和IO模型

支持的应用层协议:

http/1.1:绝大多数web应用采用的访问协议;
ajp:用于和其它web服务器集成,例如Apache http server;
http/2.0:下一代http协议,自tomcat8.5开始支持。

支持的IO模型:

IO:标准IO,jdk1.4之前的api;
nio:non-blocking IO是jdk1.4之后提供的一套API,可以替代原来的标准IO,
支持面向缓冲区的、基于通道的IO操作,
可以更高效地进行IO操作;
具体可以看:Java NIO详解
aio/nio2:异步IO,作为nio的增强出现在jdk1.7中;
APR:Apache服务器的支持库。

tomcat6之前默认使用标准IO,tomcat7之后默认使用nio。

对协议和IO模型的支持由connector实现。

文件目录

tomcat的主要目录,以apache-tomcat-8.5.73为例。

目录内容
bintomcat的命令。
conftomcat的配置文件。
libtomcat运行依赖的jar。
logs运行过程产生的日志文件。
temp运行过程产生的日志文件。
webapps需要部署的应用。
work运行时产生的编译文件。

在这里插入图片描述

功能组件

tomcat有两个心脏,分别是负责接收和响应外部请求的connector和负责处理请求的container。

一个或多个connector和一个container组成一个service,一个tomcat可以包含多个service,
server服务器就是tomcat。

在这里插入图片描述

connector

任务是监听网络端口,接收浏览器发过来的tcp连接请求,
创建一个Request和Response对象分别用于和请求端交换数据,
然后会产生一个线程来处理这个请求并把产生的Request和Response对象作为参数传给处理这个请求的线程,处理这个请求是Container要做的事了。

connector最重要的功能就是接收请求然后分配线程让container处理,多线程处理是connector设计的核心。

connector框架是coyote,主要包含以下几个组件。

在这里插入图片描述

ProtocolHandler

协议处理器,
封装了对不同协议和请求方式的处理。

endpoint

处理接收和响应的逻辑,
内部由acceptor监听请求,handler调用processor处理获得的socket,
asyncTimeout检查请求超时。

processor

processor将socket字节流转换为TomcatRequest交给adapter处理。

adapter

adapter将TomcatRequest转换为ServletRequest传递给container。

container

container的框架是Catalina卡特琳娜,主要包含以下几个组件。

在这里插入图片描述

一个container对应一个engine;
engine:引擎,一个engine可以管理多个host;
host:站点,一个host可以部署多个context;
context:web应用,包含多个wrapper;
wrapper:servlet封装器,容器的最底层。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值