学习Tomcat(一)之容器概览
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(一)之容器概览的更多相关文章
- tomcat(5)servlet容器
[0]README 0.0)本文部分文字描写叙述转自:"深入剖析tomcat",旨在学习 tomcat(5)servlet容器 的基础知识. 0.1)intro to servle ...
- JSP学习 —— 开篇:JSP,servlet容器,Tomcat,servlet容器之间的关系
JSP(JAVA SERVER PAGE)的缩写,其本身就是servlet的简化,是一种动态网页标准,其特点是在HTML代码中嵌入JAVA代码,JSP标签或用户标签来生成网页.至于它为什么会出现,主要 ...
- 烂泥:学习tomcat之通过shell批量管理多个tomcat
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 公司的业务是使用tomcat做web容器,为了更有效的利用服务器的性能,我们一般部署多个 ...
- Tomcat学习—Tomcat的简介和目录以及配置文件介绍(Windows环境)
tomcat学习(8) 版权声明:本文为博主原创文章,未经博主允许不得转载. 今天学习TOMCAT,主要学习的是Tomcat的目录结构,配置文件! 1:Tomcat简介 Tomcat 服务器是一个免费 ...
- How tomcat works(深入剖析tomcat)servlet容器
How tomcat works (5)servlet容器阅读笔记 第四章阅读了tomcat默认连接器的实现,当时connector中的使用的容器是自定义的容器,也是非常之简单奥,一个人就干完了所有的 ...
- 学习Tomcat(六)之类加载器
通过前面的文章我们知道,Tomcat的请求最终都会交给用户配置的servlet实例来处理.Servlet类是配置在配置文件中的,这就需要类加载器对Servlet类进行加载.Tomcat容器自定义了类加 ...
- 标准模板库(STL)学习探究之vector容器
标准模板库(STL)学习探究之vector容器 C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...
- Tomcat就是个容器,一种软件
1.tomcat就是一个容器而已,一个软件,运行在java虚拟机. 2.tomcat是一种能接收http协议的软件,java程序猿自己也可以写出http解析的服务器啊. 3.tomcat支持servl ...
- Go学习笔记06-内建容器
Go学习笔记06-内建容器 Go语言 数组 *切片(Slice) #F44336 Slice的操作 Map map示例 字符处理 数组 定义数组: //这样定义数组编译器自动初始化每个元素为0 va ...
随机推荐
- Oracle数据泵导入的时候创建索引是否会使用并行?
一.疑问,Oracle数据泵导入的时候创建索引是否会使用并行? 某客户需要使用数据泵进行迁移,客户咨询导入的时间能不能加快一点. 那么如何加快导入的速度呢? 多加一些并行,那么创建索引内部的索引并行度 ...
- C++ //this 指针的使用 //1 解决名称冲突 //2 返回对象本身 用 *this
1 //this 指针的使用 2 //1 解决名称冲突 3 //2 返回对象本身 用 *this 4 5 #include <iostream> 6 #include <string ...
- 指向结构的指针 struct结构名称 *结构指针变量名
//指向结构的指针 struct结构名称 *结构指针变量名 //(*结构指针变量名).成员变量名//结构指针变量->成员变量名 1 #include<stdio.h> 2 #incl ...
- Alibaba-技术专区-Dubbo3总体技术体系介绍及技术指南(目录)
Dubbo3开题简介 如开篇所述,Dubbo 提供了构建云原生微服务业务的一站式解决方案,可以使用 Dubbo 快速定义并发布微服务组 件,同时基于 Dubbo 开箱即用的丰富特性及超强的扩展能力,构 ...
- Jpa-操作mongodb
pom <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr ...
- css生成彩色阴影
通常用css生成单色或者同色系的的阴影(box-shadow),其实可以通过巧妙的利用 filter: blur 模糊滤镜,可以生成渐变色或者说是颜色丰富的阴影效果,如图: 原理: 利用伪元素,生成一 ...
- C#基础知识---获取调用者信息
一.概述 C#5.0提供了一种新功能,可以利用特性和可选参数获得调用者的信息.这些特性信息包括CallerLineNumber.CallerFilePath和CallerMemberName. 二.D ...
- 处理URLs
问题 你有一个包含相对URLs路径的HTML文档,需要将这些相对路径转换成绝对路径的URLs. 方法 在你解析文档时确保有指定base URI,然后 使用 abs: 属性前缀来取得包含base URI ...
- 栈(Stack)
特点: 栈最大的特点就是后进先出(LIFO).对于栈中的数据来说,所有操作都是在栈的顶部完成的,只可以查看栈顶部的元素,只能够向栈的顶部压入数据,也只能从栈的顶部弹出数据. 实现: 利用一个单链表来实 ...
- new和delete关键字
new关键字创建出来的对象位于什么地方?很明显嘛,new关键字创建出来的对象一定位于堆空间,这种说法一定正确吗?本篇博客帮你揭开其神秘的面纱. 被忽略的事实new/delete的本质是C++预定义的操 ...