Tomact源码解析——组件介绍

一、简介

    Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器。

    简单来说Tomcat就是一个实现了HTTP协议的Server。

二、组件和体系架构简介

    Tomcat的体系结构如图所示:

    Tomcat的体系结构分为两层,一层是Tomcat管理组件,一层是Tomcat容器组件;而Connector(连接器)是沟通管理组件和容器组件的桥梁,Connector将一个请求传递至Container,容器自上而下的去处理该请求。

   Tomcat的管理组件:Server、Service

        此类组件主要是为了管理好Tomcat下级的各项组件以及内容。

   容器组件:Engine、Host、Context、Wrapper

        此类组件主要是为了分层次的去处理HTTP请求,每一层容器都有各自的职责。

   Tomcat除了最底层的Warpper组件之外,其它所有的组件都是在server.xml配置文件中通过对应的标签设置。

三、组件详情

Server

        该组件的集合代表的就是整个Tomcat(一般情况都只配置一个),主要是管理Tomcat的生命周期和管理Service。

        对应标签:Server

        子级标签:Listener、Service、GlobalNamingResources

        常用标签属性:

属性描述

port

即监听关闭的端口,设置此属性可以通过命令去关闭该Servet下的Web应用

shutdown

关闭端口的命令,最好自定义命令,默认是

SHUTDOWN

        

Service

        该组件用于管理连接器和容器,以及实现进行分组管理和设置共享线程池,一般情况下也只配置一个Service。

        对应标签:Service

        父级标签:Server

        子级标签:Listener、Executor、Connector、Engine

        常用标签属性:

属性描述

name

给该Service分组取个名

Connector

        该组件是用于监听端口并接受客户端连接和请求,是容器和Server之间的桥梁,一个协议或者一个端口配置一个<Connector>标签。

        对应标签:Connector

        父级标签:Service

        常用标签属性:

属性描述
port服务的监听端口号,即ServerSocket的端口号,HTTP默认是8080
protocol支持的访问呢协议,默认是HTTP/1.1
connectionTimeOut连接超时时间,单位是毫秒,-1则表示不设置超时时间
executor使用哪个Service下的共享线程池,填写Service下的Executor标签的name

URIEncoding

使用的编码,Tomcat7默认是ISO-8859-1,Tomcat8默认是UTF-8
redirectPort不支持SSL时,接受到一个SSL的请求,则重定向到某个端口

Engine

        该组件是容器的门面接口,用于接收Connector转发过来的请求,并放入流水线中处理。

        对应标签:Engine

        父级标签:Service

        子级标签:Host、Listener、Valve

        常用标签属性:

属性描述
name为该Engine取名

defaultHost

当找不到对应的域名Host时,使用的默认Host

Host

        该组件处理不同的域名或者不同IP访问时,根据不同的域名内容,去访问不同的Context,如一个网站配置了2个域名a和b,可以设置a域名访问一个Host下的Context,b域名访问另一个Host下的Conext。

        对应标签:Host

        父级标签:Engine

        子级标签:Context、Valve、Alias、Listener

        常用标签属性:

属性描述
name为该Host取个名
appBaseHost的基础目录,即Host下所有的Web应用的目录路径,可以是绝对路径,也可以是相对$CATALINA_BASE的路径,默认是webapps

autoDeploy

开启热部署,及定时检测war的包变化然后重新加载Context,默认是true
unpackWARs设置为true时,Tomcat会解压war包,否则以war的形式运行;设置为false时,则运行过程中无法更新war包,需要停止Tomcat,默认是true
undeployOldVersions设置为true时,Tomcat检测到存在旧的war包会删除,默是false

Context

        该组件表示一个Web应用,即一个部署的war包,该组件是其应用下所有Servlet的集合,处理当前Web应用程序的所有请求,每个Web应用之间是相互隔离的,对应web.xml文件内容。

        对应标签:Context和web.xml内容

        父级标签:Host

        子级标签:Parameter(对等于web.xml的context-param)、Vavle、ResourceLink、Resource、Listener

        常用标签属性:

属性描述

path

访问后缀,即spring中的

server.servlet.context-path,设置则需要在uri开始处添加该值才能访问到Context

docBaseWeb应⽤⽬录或者war包的部署目录,可以是绝对路径,也可以是相对于Host中设置的appBase的相对路径。
cookies是否要将cookie用于缓存当前Context的会话标识,默认true
reloadable是否开启热加载(即自动检测修改的class),消耗性能,调试时可以开,生产上最好关闭,默认false

Wrapper

        该组件是一个Servlet的包装,是Tomcat最后处理请求的地方,将请求最终传递到用户自定义的Servlet中,并且管理Servlet的生命周期和过滤器。

        对应标签:web.xml中的Servlet

四、容器详情

        在上文,我们知道Tomcat中的请求最终会交给容器处理,容器组件包括Engine、Host、Context、Wrapper,既然作为容器,自然会有它们的共性,下文将会从容器的共性介绍下容器的一些特性。

生命周期机制

        Tomcat中的组件基本都实现了Lifecycle的接口,该接口定义了组件通用的生命周期,并且在Tomcat中默认实现:当父容器的生命周期方法被调用时,子组件对应的生命周期方法也会被调用,从而Tomcat能够通过管理最顶层的容器来管理所有的容器。

监听器机制 

        在组件的生命周期中,当一个生命周期被调用之后,都会发送一个对应的事件到Tomcat的监听器中,那么就可以通过监听对应组件的生命周期事件来做不同的处理。

        在Tomcat中Engine、Host、Context都有自己对应的监听器,用于监听容器的生命周期相关的事件,并进行配置的管理。

        Engine对应的监听器:EngineConfig

        Host对应的监听器:HostConfig

        Context对应的监听器:ContextConfig

        PS:在Tomcat的源码中,很多跟配置有关的实现都是在对应的监听器中。

管道机制

        容器组件Engine、Host、Context、Wrapper都配置了Pipeline(管道),当一个请求交到容器门面Engine中时,会调用Engine的Pipeline处理,Pipeline将请求通过一个个的Valve(阀)处理后,再由上至下的传递到下一个容器Pipeline中继续处理。

五、补充内容

        1.标签完整内容可以参考Tocmat官网:Apache Tomcat 8 Configuration Reference (8.5.100) - Overview

        2.本系列内容是Tomcat的高级内容,需要了解Tomcat的基础知识

        3.如果本系列文章有错误,请于评论区指出,会马上修改。

  • 22
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tomcat源码解析是对Tomcat服务器的源代码进行分析和解读的过程。通过对Tomcat源码的研究,可以深入了解Tomcat的整体架构、连接器的内部结构、容器分析以及Tomcat的启动流程等方面的内容。 Tomcat的整体架构包括配置文件server.xml的分析和连接器的内部结构。配置文件server.xml是Tomcat的主要配置文件,通过对其进行分析可以了解Tomcat的各个组件和配置项的作用。连接器是Tomcat的核心组件之一,负责处理客户端请求并将其转发给相应的容器进行处理。 Tomcat的启动流程是通过实现Lifecycle接口的各个组件来完成的。在启动过程中,Tomcat会按照一定的顺序初始化和启动各个组件,确保它们能够正常工作。具体的启动流程可以通过阅读源码中的相关方法和注释来了解。 Tomcat底层使用了Netty来实现IO相关的操作,但与Netty有所区别,因为Tomcat对部分处理进行了封装。通过对Tomcat源码的学习,可以了解Tomcat底层的实现逻辑、各个组件的配合方式以及各种设计模式的交互。 如果你对Tomcat源码解析感兴趣,可以参考提供的源码和相关文章进行深入研究。通过深入研究Tomcat源码,你可以更好地理解Tomcat的工作原理和内部机制。 #### 引用[.reference_title] - *1* [Tomcat源码分析](https://blog.csdn.net/sun_code/article/details/123554480)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [tomcat线程模型-源码解析](https://blog.csdn.net/qq_16498553/article/details/126080174)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值