Tomcat核心组件及应用架构

5 篇文章 0 订阅

笔者在周末的时候看了下tomcat的源码,再结合了一些查询到的资料,总结了一下Tomcat的组成和架构,这里记录下。


一、Tomcat是什么?主要是用来做什么的?

Tomcat 就是一个 Servlet 容器。为了方便使用,它也具有 HTTP 服务器 的功能,因此 Tomcat 就是一个“HTTP 服务器 + Servlet 容器”,我们也叫 它们 Web 容器。

Tomcat所做的事情主要有:开启监听端口监听用户的请求,解析用户发来的http请求然后访问到你指定的应用系统,然后你返回的页面经过Tomcat返回给用户。

二、Tomcat的核心组件

Tomcat的核心组件主要六个,分别是:

  • Server(服务器):Server的主要任务就是提供一个接口让客户端能够访问到这个Service集合,同时维护它所包含的所有的Service的生命周期,包括如何初始化、如何结束服务、如何找到客户端要访问的Service。(一个Server元素中可以有一个或多个Service元素
  • Service(服务):Service的作用是在Connector和Engine外面包了一层,把它们组装在一起,对外提供服务。(一个Service可以包含多个Connector,但是只能包含一个Engine);
  • Connector(连接器):Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine;
  • Engine(引擎):Engine组件从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传递给客户端(Engine组件在Service组件中有且只有一个;defaultHost属性必须与Engine中的一个Host组件的name属性值匹配);
  • Host(虚拟机):Host虚拟主机的作用是运行多个Web应用(一个Context代表一个Web应用),并负责安装、展开、启动和结束每个Web应用(Host是Engine的子容器,Engine组件中可以内嵌1个或多个Host组件,每个Host组件代表Engine中的一个虚拟主机;Host组件至少有一个,且其中一个的name必须与Engine组件的defaultHost属性相匹配);
  • Context(应用上下文):Context代表在特定虚拟主机上运行的一个Web应用(一个host 下可以配置多个Context ,每个Context 都有其独立的 classPath。相互隔离,以免造成ClassPath 冲突Context是Host的子容器,每个Host中可以定义任意多的Context元素);

它们之间的关系如下图:
在这里插入图片描述

三、Tomcat的应用架构

Tomcat的应用架构在它的配置文件:server.xml表现的非常清晰。

server.xml:

<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Context path="/" docBase="D:\Program Files \app1.war" reloadable="true"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

Tomcat其实就分为两大部分,一部分是连接器
(Connnector)处理对外连接,另一部分是容器(Container)管理对内的Servelet。

关系总结:
Server元素在最顶层,代表整个Tomcat容器;一个Server元素中可以有一个或多个Service元素。Service在Connector和Engine外面包了一层,把它们组装在一起,对外提供服务。一个Service可以包含多个Connector,但是只能包含一个Engine;Connector接收请求,Engine处理请求。
Engine、Host和Context都是容器,且 Engine包含Host,Host包含Context。每个Host组件代表Engine中的一个虚拟主机;每个Context组件代表在特定Host上运行的一个Web应用。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

缘丶沐逸尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值