Tomcat项目结构及架构分析

22 篇文章 0 订阅
4 篇文章 2 订阅

一、前期准备

1.1 概述

Apache Tomcat自1999年第一个版本发布至今,已经成为一款成熟的轻量级的Java应用服务器,它深受Java研发人员喜爱。虽然它已经更新到10.x的版本,但是大部分人依然使用jdk8和9.0.x因此本文基于tomcat-9.0.x(官网下载地址为:https://tomcat.apache.org/download-90.cgi)从使用和实现的原理探究其经久不衰的奥秘。

1.2 版本差异

引自Apache Tomcat官网

http://tomcat.apache.org/whichversion.html

二、基本概念

2.1 Tomcat目录和文件

目录及文件说明
binTomcat的启动、停止等批处理脚本和Shell脚本
bin/startup.batWindows下启动Tomcat
bin/startup.shLinux下启动Tomcat
bin/shutdown.batWindows下停止Tomcat
bin/shutdown.shLinux下停止Tomcat
confTomcat的相关配置文件
conf/Catalina各个虚拟机的Context配置
conf/context.xml定义所有Web应用共享的Context配置,如果应用指定了context.xml则该配置被覆盖
conf/catalina.propertiesTomcat环境变量配置,主要包含一些自定义类加载器的加载路径
conf/catalina.policy当Tomcat在安全模式下运行时,默认采用此配置作为安全策略
conf/logging.propertiesTomcat的日志配置文件,定义了日志级别和日志路径
conf/server.xmlTomcat核心配置文件,用于配置链接器,监听端口,处理请求的虚拟主机等
conf/tomcat-users.xmlManager模块中使用该文件中的用户进行安全认证
conf/web.xml公共的web描述文件
lib服务器依赖的jar包
logs默认的日志存放路径
webapps默认的Web应用部署目录
workJSP代码生成和编译的临时目录

2.1.1 Tomcat启动

  • 脚本启动

# linux 系统下启动tomcatbin/startup.sh# windows 系统下启动tomcatbin/startup.bat
  • IDE集成启动

  • 嵌入式启动

@SpringBootApplicationpublic class SpringBootStarter {      public static void main(String[] args) {        SpringApplication.run(BootStarter.class,args);    }}
  • Debug启动

     1.在catalina.sh文件中加入以下的配置,并启动Tomcat          

CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.1.2-agentlib:jdwp=transport=dt_socket,address=15833,suspend=n,server=y"export CATALINA_OPTS

    2.在IDEA中配置 Tomcat Server Remote设置jmx端口为1099,Transport Socket端口为15833即可远程调试。

2.2 Tomcat项目源码目录结构

2.2.1 源码模块层次图

Tomcat本质上是一款Servlet容器,因此Catalina是Tomcat的核心,其他模块均为Catalina提供支撑。通过Coyote模块提供链接通信,Jasper模块提供JSP引擎,Naming提供JNDI服务,Juli提供日志服务。

2.2.2 Tomcat组件说明

组件名称说明
Server表示整个Servlet容器,Tomcat运行环境中只有唯一一个Server实例。
ServiceService可以包含多个Connector,这些Connector共享同一个Container来处理请求。在一个Tomcat实例内可以包含任意多个Service实例,它们彼此独立。
Connector链接器,用于监听并转化Socket请求,同时将读取的Socket请求交由Container处理,支持不同的协议以及不同的I/O实现方式。
ContainerContainer表示能够执行客户端请求并返回响应的一类对象。Tomcat中存在不同级别的容器:Engine,Host,Context,Wrapper。
EngineEngine表示整个Servlet引擎。在Tomcat中Engine为最高层级的容器对象。尽管Engine不是直接处理请求的容器,却是获取目标容器的入口。
HostHost作为一类容器,表示Servlet引擎(Engine)中的虚拟机,与一个服务器的网络名有关,如域名等。客户端可以使用这个网络名连接服务器,这个名称必须要在DNS服务器上注册。
ContextContext作为一类容器,用于表示ServletContext,在Servlet规范中,一个ServletContext即表示一个独立的Web应用。
Wrapper​Wrapper作为一类容器,用于表示Web应用中定义的Servlet。
Executor共享线程池

各组件之间的关系图

三、小结

初步了解Tomcat的一些文件目录的作用,以及源码的模块功能以及一些关键的组件和组件之间的关系。知道了Tomcat是什么,如何使用,后续我们会结合源码深入分析Tomcat各组件的功能。

下一章我们来具体分析分析Tomcat启动和关闭流程(源码)。


​作者更多文章

Redis系列

Redis(一):单线程为何还能这么快

Redis(二):内存模型及回收算法

Redis(三):持久化_IT巅峰技术专栏

ElasticSearch系列

Elasticsearch(一):概述_IT巅峰技术专栏-CSDN博客

Elasticsearch(二):核心_IT巅峰技术专栏-CSDN博客

Elasticsearch(三):实战_IT巅峰技术专栏-CSDN博客

RocketMQ系列

Elasticsearch(一):概述_IT巅峰技术专栏-CSDN博客

关注IT巅峰技术,私信作者,获取以下2021全球架构师峰会PDF资料。

图片

图片

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值