新闻资讯  快讯  焦点  财经  政策  社会
互 联 网   电商  金融  数据  计算  技巧
生活百科  科技  职场  健康  法律  汽车
手机百科  知识  软件  修理  测评  微信
软件技术  应用  系统  图像  视频  经验
硬件技术  知识  技术  测评  选购  维修
网络技术  硬件  软件  设置  安全  技术
程序开发  语言  移动  数据  开源  百科
安全防护  资讯  黑客  木马  病毒  移动
站长技术  搜索  SEO  推广  媒体  移动
财经百科  股票  知识  理财  财务  金融
教育考试  育儿  小学  高考  考研  留学
您当前的位置:首页 > IT百科 > 站长技术 > 服务器

Tomcat顶层架构

时间:2020-03-17 15:53:56  来源:  作者:

一、Tomcat顶层架构

先上一张Tomcat的顶层结构图(图A),如下:

Tomcat顶层架构

 

Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。

Service主要包含两个部分:Connector和Container。从上图中可以看出 Tomcat 的心脏就是这两个组件,他们的作用如下:

1、Connector用于处理连接相关的事情,并提供Socket与Request和Response相关的转化;

2、Container用于封装和管理Servlet,以及具体处理Request请求;

一个Tomcat中只有一个Server,一个Server可以包含多个Service,一个Service只有一个Container,但是可以有多个Connectors,这是因为一个服务可以有多个连接,如同时提供Http和Https链接,也可以提供向相同协议不同端口的连接,示意图如下(Engine、Host、Context下边会说到):

多个 Connector 和一个 Container 就形成了一个 Service,有了 Service 就可以对外提供服务了,但是 Service 还要一个生存的环境,必须要有人能够给她生命、掌握其生死大权,那就非 Server 莫属了!所以整个 Tomcat 的生命周期由 Server 控制。

Tomcat顶层架构

 

另外,上述的包含关系或者说是父子关系,都可以在tomcat的conf目录下的server.xml配置文件中看出,下图是删除了注释内容之后的一个完整的server.xml配置文件(Tomcat版本为8.0)

详细的配置文件文件内容可以到Tomcat官网查看:http://tomcat.Apache.org/tomcat-8.0-doc/index.html

上边的配置文件,还可以通过下边的一张结构图更清楚的理解:

Tomcat顶层架构

 

Server标签设置的端口号为8005,shutdown=”SHUTDOWN” ,表示在8005端口监听“SHUTDOWN”命令,如果接收到了就会关闭Tomcat。一个Server有一个Service,当然还可以进行配置,一个Service有多个,Service左边的内容都属于Container的,Service下边是Connector。

二、Tomcat顶层架构小结:

(1)Tomcat中只有一个Server,一个Server可以有多个Service,一个Service可以有多个Connector和一个Container;

(2) Server掌管着整个Tomcat的生死大权;

(4)Service 是对外提供服务的;

(5)Connector用于接受请求并将请求封装成Request和Response来具体处理;

(6)Container用于封装和管理Servlet,以及具体处理request请求;

知道了整个Tomcat顶层的分层架构和各个组件之间的关系以及作用,对于绝大多数的开发人员来说Server和Service对我们来说确实很远,而我们开发中绝大部分进行配置的内容是属于Connector和Container的,所以接下来介绍一下Connector和Container。

三、Connector和Container的微妙关系

由上述内容我们大致可以知道一个请求发送到Tomcat之后,首先经过Service然后会交给我们的Connector,Connector用于接收请求并将接收的请求封装为Request和Response来具体处理,Request和Response封装完之后再交由Container进行处理,Container处理完请求之后再返回给Connector,最后在由Connector通过Socket将处理的结果返回给客户端,这样整个请求的就处理完了!

Connector最底层使用的是Socket来进行连接的,Request和Response是按照HTTP协议来封装的,所以Connector同时需要实现TCP/IP协议和HTTP协议!

Tomcat既然处理请求,那么肯定需要先接收到这个请求,接收请求这个东西我们首先就需要看一下Connector!

四、Connector架构分析

Connector用于接受请求并将请求封装成Request和Response,然后交给Container进行处理,Container处理完之后在交给Connector返回给客户端。

因此,我们可以把Connector分为四个方面进行理解:

(1)Connector如何接受请求的?

(2)如何将请求封装成Request和Response的?

(3)封装完之后的Request和Response如何交给Container进行处理的?

(4)Container处理完之后如何交给Connector并返回给客户端的?

首先看一下Connector的结构图(图B),如下所示:

Connector就是使用ProtocolHandler来处理请求的,不同的ProtocolHandler代表不同的连接类型,比如:Http11Protocol使用的是普通Socket来连接的,Http11NioProtocol使用的是NIOSocket来连接的。

其中ProtocolHandler由包含了三个部件:Endpoint、Processor、Adapter。

(1)Endpoint用来处理底层Socket的网络连接,Processor用于将Endpoint接收到的Socket封装成Request,Adapter用于将Request交给Container进行具体的处理。

(2)Endpoint由于是处理底层的Socket网络连接,因此Endpoint是用来实现TCP/IP协议的,而Processor用来实现HTTP协议的,Adapter将请求适配到Servlet容器进行具体的处理。

(3)Endpoint的抽象实现AbstractEndpoint里面定义的Acceptor和AsyncTimeout两个内部类和一个Handler接口。Acceptor用于监听请求,AsyncTimeout用于检查异步Request的超时,Handler用于处理接收到的Socket,在内部调用Processor进行处理。

至此,我们应该很轻松的回答(1)(2)(3)的问题了,但是(4)还是不知道,那么我们就来看一下Container是如何进行处理的以及处理完之后是如何将处理完的结果返回给Connector的?

五、Container架构分析

Container用于封装和管理Servlet,以及具体处理Request请求,在Connector内部包含了4个子容器,结构图如下(图C):

4个子容器的作用分别是:

(1)Engine:引擎,用来管理多个站点,一个Service最多只能有一个Engine;

(2)Host:代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点;

(3)Context:代表一个应用程序,对应着平时开发的一套程序,或者一个WEB-INF目录以及下面的web.xml文件;

(4)WrApper:每一Wrapper封装着一个Servlet;

下面找一个Tomcat的文件目录对照一下,如下图所示:

Context和Host的区别是Context表示一个应用,我们的Tomcat中默认的配置下webapps下的每一个文件夹目录都是一个Context,其中ROOT目录中存放着主应用,其他目录存放着子应用,而整个webapps就是一个Host站点。

我们访问应用Context的时候,如果是ROOT下的则直接使用域名就可以访问,例如:www.ledouit.com,如果是Host(webapps)下的其他应用,则可以使用www.ledouit.com/docs进行访问,当然默认指定的根应用(ROOT)是可以进行设定的,只不过Host站点下默认的主营用是ROOT目录下的。

看到这里我们知道Container是什么,但是还是不知道Container是如何进行处理的以及处理完之后是如何将处理完的结果返回给Connector的?别急!下边就开始探讨一下Container是如何进行处理的!

六、Container如何处理请求的

Container处理请求是使用Pipeline-Valve管道来处理的!(Valve是阀门之意)

Pipeline-Valve是责任链模式,责任链模式是指在一个请求处理的过程中有很多处理者依次对请求进行处理,每个处理者负责做自己相应的处理,处理完之后将处理后的请求返回,再让下一个处理着继续处理。

但是!Pipeline-Valve使用的责任链模式和普通的责任链模式有些不同!区别主要有以下两点:

(1)每个Pipeline都有特定的Valve,而且是在管道的最后一个执行,这个Valve叫做BaseValve,BaseValve是不可删除的;

(2)在上层容器的管道的BaseValve中会调用下层容器的管道。

我们知道Container包含四个子容器,而这四个子容器对应的BaseValve分别在:StandardEngineValve、StandardHostValve、StandardContextValve、StandardWrapperValve。

Pipeline的处理流程图如下(图D):

(1)Connector在接收到请求后会首先调用最顶层容器的Pipeline来处理,这里的最顶层容器的Pipeline就是EnginePipeline(Engine的管道);

(2)在Engine的管道中依次会执行EngineValve1、EngineValve2等等,最后会执行StandardEngineValve,在StandardEngineValve中会调用Host管道,然后再依次执行Host的HostValve1、HostValve2等,最后在执行StandardHostValve,然后再依次调用Context的管道和Wrapper的管道,最后执行到StandardWrapperValve。

(3)当执行到StandardWrapperValve的时候,会在StandardWrapperValve中创建FilterChain,并调用其doFilter方法来处理请求,这个FilterChain包含着我们配置的与请求相匹配的Filter和Servlet,其doFilter方法会依次调用所有的Filter的doFilter方法和Servlet的service方法,这样请求就得到了处理!

(4)当所有的Pipeline-Valve都执行完之后,并且处理完了具体的请求,这个时候就可以将返回的结果交给Connector了,Connector在通过Socket的方式将结果返回给客户端。

总结

至此,我们已经对Tomcat的整体架构有了大致的了解,从图A、B、C、D可以看出来每一个组件的基本要素和作用。我们在脑海里应该有一个大概的轮廓了!如果你面试的时候,让你简单的聊一下Tomcat,上面的内容你能脱口而出吗?当你能够脱口而出的时候,这位面试官一定会对你刮目相看的!



Tags:Tomcat   点击:()  评论:()
声明:本站部分内容来自互联网,内容观点仅代表作者本人,如有任何版权侵犯请与我们联系,我们将立即删除。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
一、Tomcat顶层架构先上一张Tomcat的顶层结构图(图A),如下: Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服...【详细内容】
2020-03-17   Tomcat  点击:(5)  评论:(0)  加入收藏
tomcat中的证书配置参数如下:<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"maxThreads="150" SSLEnabled="true" scheme="https" secure="t...【详细内容】
2020-03-17   Tomcat  点击:(5)  评论:(0)  加入收藏
目录的简单介绍 bin:启动和关闭tomcat的bat文件 conf:配置文件 server.xml该文件用于配置server相关的信息,比如tomcat启动的端口号,配置主机(Host) web.xml文件配置与web应用(we...【详细内容】
2020-03-11   Tomcat  点击:(5)  评论:(0)  加入收藏
前段时间和@lufei 大哥学习了一波Linux下基于文件描述符的反序列化回显方式的思路。在自己实现的过程中发现,是通过IP和端口号的筛选,从而过滤出当前线程(也可以说是请求)的文件...【详细内容】
2020-03-11   Tomcat  点击:(9)  评论:(0)  加入收藏
前段时间和@lufei 大哥学习了一波Linux下基于文件描述符的反序列化回显方式的思路。在自己实现的过程中发现,是通过IP和端口号的筛选,从而过滤出当前线程(也可以说是请求)的文件...【详细内容】
2020-03-08   Tomcat  点击:(5)  评论:(0)  加入收藏
2月22日消息 国家信息安全漏洞共享平台(CNVD)近日发布了一份关于 Apache Tomcat 存在文件包含漏洞的安全公告,具体如下:安全公告编号:CNTA-2020-00042020 年 1 月 6 日,国家信息安...【详细内容】
2020-02-22   Tomcat  点击:(11)  评论:(0)  加入收藏
安全是系统架构中最重要的关注点之一,通常情况下,所说的安全涵盖网络安全、数据安全、操作系统安全、服务器安全以及应用系统安全等诸多方面。Tomcat 是一个免费的开放源代码 的Web应用服务器,技术先进、性能稳定。由于...【详细内容】
2020-02-19   Tomcat  点击:(16)  评论:(0)  加入收藏
Service.xmlServer.xml配置文件用于对整个容器进行相关的配置。 <Server>元素:是整个配置文件的根元素。表示整个Catalina容器。 属性:className:实现了org.apache.catalina.Se...【详细内容】
2020-02-17   Tomcat  点击:(14)  评论:(0)  加入收藏
Docker 安装 Nginxdocker pull nginx 命令安装查找 Docker Hub 上的 nginx 镜像runoob@runoob:~/nginx$ docker search nginxNAME DESCRIPTION STARS OFFICIAL AUTOMATEDngi...【详细内容】
2019-12-30   Tomcat  点击:(19)  评论:(0)  加入收藏
Tomcat安装目录:C:\tomcat\apache-tomcat-8.5.15 Jdk8安装目录:C:\jdk 配置CATALINA_HOME 环境变量,指向tomcat的家目录 配置JAVA_HOME 配置环境变量配置CLASSPATH .;%JAVA_HOM...【详细内容】
2019-12-30   Tomcat  点击:(35)  评论:(0)  加入收藏
很多情况下,我们在linux服务器上安装了tomcat或者nginx之类的软件. 当我们想用80端口的时候,如果不用root用户启动就会报错.这是因为,对于linux系统而言,1024以下的端口,普...【详细内容】
2019-12-30   Tomcat  点击:(20)  评论:(0)  加入收藏
在Nginx反向代理转发tomcat这篇文章中,对nginx进行了简单的介绍,实现了nginx代理转发的功能,以及静态、动态资源分离的实现。本篇文章接着这篇文章继续写下去的,如果有不明白的...【详细内容】
2019-12-28   Tomcat  点击:(3)  评论:(0)  加入收藏
web.xml简介web.xml是web应用的基础配置文件,但又不是必须的。web.xml主要用来配置Filter、Listener、Servlet等。我们常用的框架多数都要通过web.xml文件进行配置后才能引入...【详细内容】
2019-12-19   Tomcat  点击:(29)  评论:(0)  加入收藏
随着每天业务的增长,Tomcat 的catalina.out日志 变得越来越大,占用磁盘空间不说。要查看某个时候的日志的时候,庞大的日志让你顿时无从下手,所以日志的切割的变得刻不容缓。而且,切割后的日志,还可以定期清理掉久远的日志…...【详细内容】
2019-12-19   Tomcat  点击:(22)  评论:(0)  加入收藏
Tomcat如何配置和优化,并不是每个工程师都需要掌握的内容。但如果你想成为一个架构师,就必须要学会本文的人内容了。在conf目录下存放着Tomcat的所有配置文件,而server.xml是其...【详细内容】
2019-12-18   Tomcat  点击:(15)  评论:(0)  加入收藏
一、配置Tomcat/conf/server.xml修改配置<connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443" URIEncoding...【详细内容】
2019-12-17   Tomcat  点击:(17)  评论:(0)  加入收藏
使用Idea的时候,修改了代码,需要反复的重启Tomcat,查看效果,是不是贼烦?还记得刚上手idea的时候,瞎配置部署Tomcat,结果最后修改一个jsp都要重新启动服务器,我这金牛座程序员能忍?~这...【详细内容】
2019-12-16   Tomcat  点击:(27)  评论:(0)  加入收藏
我们都知道,get请求和post请求的一个比较显著区别就是,在使用post请求的时候,中文不会乱码,但是在使用get请求的时候,如果url后面带有中文就会乱码了。那么这个怎么解决呢? 前提:配...【详细内容】
2019-12-09   Tomcat  点击:(27)  评论:(0)  加入收藏
客户端用户点击浏览器服务连接,浏览器通过客户端底层服务通过路由传送报文,目标服务器获取解析报文,Tomcat监听程序触发处理请求一、Tomcat 软件目录结构及功能 bin: 服务相关...【详细内容】
2019-12-09   Tomcat  点击:(27)  评论:(0)  加入收藏
本文内容主要介绍了Linux下shell脚本监控Tomcat的状态并实现自动启动的步骤,文章给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧!最近公司需要在Linux下监控t...【详细内容】
2019-12-05   Tomcat  点击:(60)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条