Tomcat是Apache软件基金会的一个顶级项目,由Apache、Sun和其它一些公司及个人共同开发,是目前比较流行的Web服务器之一。Tomcat是一个开源的、小型的轻量级应用服务器,具有占用系统资源少、扩展性好、功能丰富等优点。虽然Tomcat是一个轻量级容器,但是其本身实现还比较复杂,包含很多模块,本文会对Tomcat的基本结构和各个模块进行简单介绍。

Servlet容器概念

Servlet容器也叫做Servlet引擎,是Web服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于 MIME的请求,格式化基于MIME的响应。Servlet没有main方法,不能独立运行,它必须被部署到Servlet容器中,由容器来实例化和调用 Servlet的方法(如doGet()和doPost()),Servlet容器在Servlet的生命周期内包容和管理Servlet。在JSP技术 推出后,管理和运行Servlet/JSP的容器也称为Web容器。

以下为Servlet接口的定义:

public interface Servlet {
void init(ServletConfig var1) throws ServletException; ServletConfig getServletConfig(); void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException; String getServletInfo(); void destroy();
}

Tomcat结构概览

Tomcat是一个成熟的Web服务器,设计和开发都比较优雅,功能结构也是模块化的。Servlet容器应该有三个基本任务:创建Request对象、创建Response对象和Servlet处理请求响应,基于这三个任务Tomcat划分出两个核心模块:连接器和容器。为了优雅的进行容器的生命周期管理,Tomcat又添加了服务器组件模块。各个模块之间的关联关系如下图所示:

![Tomcat容器概览]

服务器组件Server

Server提供了Tomcat的生命周期管理的逻辑,它使用了一种优雅的方式来启动/关闭整个系统,不需要再对连接器和容器分别启动/关闭。

当服务器组件启动的时候,它会启动其中的所有的组件(连接器和容器),然后就开始无限期的等待关闭命令。如果需要关闭系统,可以向指定端口发送一条关闭命令,服务器组件在收到关闭命令后,会关闭其中所有的组件。

服务组件Service

服务器组件使用了服务组件Serivce来包含其它的组件,服务组件主要包含两部分:连接器和容器,这两部分也是Tomcat容器的核心组件。

连接器Connector

Connector的主要职责就是负责接收客户端连接和客户端请求的处理加工。每个Connector都将指定一个端口进行监听,分别负责对请求报文的解析和响应报文组装,解析过程生成Request对象,而组装过程涉及Response对象。

如果将Tomcat整体比作一个巨大的城堡,那么Connector组件就是城堡的城门,每个人要进入城门就必须通过城门,它为人们进出城堡提供了通道。同时,一个城堡还可能有两个或者多个城门,每个城门代表了不同的通道(不同的网络协议)。

容器Container

我们知道Tomcat是Servlet容器的一种实现,servlet又是什么呢?Servlet是javax.servlet 包中定义的接口。它声明了 Servlet 生命周期的三个基本方法:init()、service() 和 destroy()。它们由每个 Servlet Class(在 SDK 中定义或自定义)实现,并由服务器在特定时机调用。

Tomcat容器中的Container的主要功能就是处理连接器Connector解析的到的Request,调用对应的servlet方法,将响应写入Response中。此外Tomcat还对容器添加了管道和域的概念,用于对请求进行预处理。Tomcat中的容器分为四大类,按照包含关系依次为:Engin容器、Host容器、Context容器和Wrapper容器。

生命周期

Tomcat容器的启停实现逻辑,启停操作是如何从Server传播到各个子容器和组件中的。以及Spring容器如何对Tomcat容器实现优雅关闭:等待Tomcat容器中的请求处理完成之后再关闭容器。

总结

本文简要介绍了Tomcat容器中的各个关键组件及其功能,在我的后续博客中会对这些组件一一进行详细介绍。

本文最先发布至微信公众号,版权所有,禁止转载!

学习Tomcat(一)之容器概览的更多相关文章

  1. tomcat(5)servlet容器

    [0]README 0.0)本文部分文字描写叙述转自:"深入剖析tomcat",旨在学习 tomcat(5)servlet容器 的基础知识. 0.1)intro to servle ...

  2. JSP学习 —— 开篇:JSP,servlet容器,Tomcat,servlet容器之间的关系

    JSP(JAVA SERVER PAGE)的缩写,其本身就是servlet的简化,是一种动态网页标准,其特点是在HTML代码中嵌入JAVA代码,JSP标签或用户标签来生成网页.至于它为什么会出现,主要 ...

  3. 烂泥:学习tomcat之通过shell批量管理多个tomcat

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 公司的业务是使用tomcat做web容器,为了更有效的利用服务器的性能,我们一般部署多个 ...

  4. Tomcat学习—Tomcat的简介和目录以及配置文件介绍(Windows环境)

    tomcat学习(8) 版权声明:本文为博主原创文章,未经博主允许不得转载. 今天学习TOMCAT,主要学习的是Tomcat的目录结构,配置文件! 1:Tomcat简介 Tomcat 服务器是一个免费 ...

  5. How tomcat works(深入剖析tomcat)servlet容器

    How tomcat works (5)servlet容器阅读笔记 第四章阅读了tomcat默认连接器的实现,当时connector中的使用的容器是自定义的容器,也是非常之简单奥,一个人就干完了所有的 ...

  6. 学习Tomcat(六)之类加载器

    通过前面的文章我们知道,Tomcat的请求最终都会交给用户配置的servlet实例来处理.Servlet类是配置在配置文件中的,这就需要类加载器对Servlet类进行加载.Tomcat容器自定义了类加 ...

  7. 标准模板库(STL)学习探究之vector容器

    标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...

  8. Tomcat就是个容器,一种软件

    1.tomcat就是一个容器而已,一个软件,运行在java虚拟机. 2.tomcat是一种能接收http协议的软件,java程序猿自己也可以写出http解析的服务器啊. 3.tomcat支持servl ...

  9. Go学习笔记06-内建容器

    Go学习笔记06-内建容器 Go语言 数组 *切片(Slice) #F44336 Slice的操作 Map map示例 字符处理 数组 定义数组: //这样定义数组编译器自动初始化每个元素为0  va ...

随机推荐

  1. 自学linux——4.Linux的自有服务(基础篇)

    linux自有服务(内置) 一.运行级别(模式) 在Linux中存在一个进程:init,进程id是1. 查看进程:#ps -ef|grep init 对应的配置文件:inittab(运行级别配置文件位 ...

  2. C语言运算符(杂项运算符 ↦ sizeof & 三元)

    实列 1 #include <stdio.h> 2 3 int main() 4 { 5 int a = 4; 6 short b; 7 double c; 8 int* ptr; 9 1 ...

  3. 阿里面试Redis常考问题

    一提到Redis缓存,我们不得不了解的三个问题就是:缓存雪崩.缓存击穿和缓存穿透.这三个问题一旦发生,会导致大量的请求直接请求到数据库层.如果并发压力大,就会导致数据库崩溃.那p0级的故障是没跑了. ...

  4. 开源中国【面经】Java后台开发

    2021.04.09 直接正文: 开场自我介绍,说一下自己 有没有实习经历?(毕业实习) 毕业实习学了什么?(前端) 有什么大项目吗?(除了课设就是毕设) 能说一下毕设的情况吗?(做了大概,没有开始登 ...

  5. windows中抓取hash小结(下)

    书接上回,windows中抓取hash小结(上) 指路链接 https://www.cnblogs.com/lcxblogs/p/13957899.html 继续 0x03 从ntds.dit中抓取 ...

  6. [1.1W字] 复习: CSS 9个背景属性&6种渐变函数, 学会可以手写实现AI中强大的"任意渐变"! #Archives009

    Title/ CSS Background&Gradient完全指南 #Archives009 序: 关于 background 属性, 了解点CSS的人总会知道个大概. 但是你肯定多半还有点 ...

  7. 【spring 注解驱动开发】spring对象的生命周期

    尚学堂spring 注解驱动开发学习笔记之 - 生命周期 生命周期 1.生命周期-@Bean指定初始化和销毁方法 2.生命周期-InitializingBean和DisposableBean 3.生命 ...

  8. C# 中的CTS, CLS, CLR 的理解

  9. Contos6.5卸载自带JDK

    1.查看CentOS6.5自带的JDK是否已经安装#Java -version2.查看JDK的信息#rpm -qa|grep java3.卸载JDK#rpm -e --nodeps tzdata-ja ...

  10. ScheduledExecutorService中scheduleAtFixedRate方法与scheduleWithFixedDelay方法的区别

    ScheduledExecutorService中scheduleAtFixedRate方法与scheduleWithFixedDelay方法的区别 ScheduledThreadPoolExecut ...