Tomcat架构分析

一、前言

       tomcat我们很早便接触了,它作为应用服务器存在着,应用服务器与web服务器的区别是,他除了可以解析协议,包括http协议外,还可以处理业务逻辑暴露给应用程序。
       通常提到tomcat容器会说他是一个容器,小编的理解是,我们开发中打成的war包(既web应用程序)可以通过扔到tomcat的webapp下面,当tomcat的容器起来了,我们的项目就可以访问了。他们tomcat是如何启动的呢,小编近期简单的了解了一下,望不吝赐教~


二、Tomcat顶层结构

       图片来源于网络,是我见过较能体现tomcat结构的图了
在这里插入图片描述
       大概展示了tomcat的结构,可以简单介绍一下各个模块:

  •        Server:服务器,一个tomcat即为一个服务器
  •        Service:Server中的一个逻辑功能层,一个Server可以包含多个service
  •        Connector:连接器,连接客户端请求,是Service的核心组件之一
  •        Container:其中包含了Engine一组虚拟主机集合,还有host,context。
  •        

三、server.xml

       刚看到这个图的时候确实有些蒙圈,不知所云,又回头看了server.xml之后发现这些东西竟然这么熟悉,在配置文件中,我相信大家都配过。

<Server port="8005" shutdown="SHUTDOWN">
    <Service name="Catalina">
        <Executor ...... />
        <Connector ...... />
        <Connector ...... />
        <Engine name="Catalina" ... >
            <Host name="localhost" ... >
                <Context ... />
            </Host>
        </Engine>
    </Service>
</Server>

3.1 Server

       tomcat的顶层容器,代表整个tomcat服务,一个tomcat只有一个Server,Server中包含至少一个Service组件,用于提供具体的服务,在配置文件中的 Server port=“8005” shutdown=“SHUTDOWN” 很容易体现,当我们执行shutdown命令时,整个tomcat服务就关闭了,在tomcat中其对应的标准实现为:org.apache.catalina.core.StandardServer

3.2 Service

       官方对他的解释是:由一个或一组连接器组成的服务,共享一个容器来处理他的传入请求。我们可以这样理解:接收客户端请求,解析请求,完成相关业务逻辑,将处理的结果返回给客户端。
       如果将请求监听和请求处理放在一起,扩展性必然会变差,tomcat的设计采用的是请求监听和请求处理分开为两个模块,分别是Connector和Container,Connector负责处理请求监听,Container负责处理请求处理。在tomcat中其对应的标准实现为:org.apache.catalina.core.StandardService

3.3 Connector

       Connector是连接器,用于接受请求,将请求封装成Request和Response,然后交给Engine处理,处理完后交给Connector返回给客户端。
       一个Connector会监听一个独立的端口号来处理来自客户端的请求,server.xml中会有两个connector:

<Connector port="8081" protocol="HTTP/1.1"   connectionTimeout="20000"  redirectPort="8443" />,
它监听端口8080,这个端口值可以修改,connectionTimeout定义了连接超时时间,单位是毫秒,redirectPort 定义了ssl的重定向接口,根据上述配置,Connector会将ssl请求转发到8443端口。

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />,
 AJP表示Apache Jserv Protocol,它将处理Tomcat和Apache http服务器之间的交互,此连接器用于处理我们将Tomcat和Apache http服务器结合使用的情况,如在同一台物理Server上部署一个Apache http服务器和多台Tomcat服务器,通过Apache服务器来处理静态资源以及负载均衡时,针对不同的Tomcat实例需要AJP监听不同的端口。

3.4 Container

       小编认为,tomcat中的Container是精神领袖一样的存在,我们之前提到的Engine,host ,context都是继承了BaseContainer。官方对于Container的定义是:容器是可以处理来自客户端的请求,并且对请求做出响应。Container的层次结构如下:


四、Tomcat的启动流程

       tomcat的启动入口很清楚,下面的图说明了组件间的加载顺序及调用关系,以BootStrap为入口,通过main主入口即可进入:
在这里插入图片描述


五、总结

       通过了解tomcat自己get到两点:1.容器的思想,在使用组件时,如果组件都装在一个容器中,使用起来很方便;2.每个组件都有自己的生命周期,我们是通过一个lifecyle来管理的,这样可以做到专事专办。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值