org.apache.catalina.core.StandardHost 。它的主要职责就是管理和部署子容器Context,比如,Host启动前,预先创建好部署web应用的目录;Host启动时,部署web应用;Host运行过程中,周期性检查web应用是否需要自动部署,这些监听工作都是在HostConfig中做的 。
如下是Host的一些常用配置:

文章插图
4.1 Host部署web应用Host部署web应用(Context)的三种方式:
- Context描述文件部署,默认是%CATALINA_BASE%/conf/[EngineName]/[HostName]/目录下,可以有多个Context配置,后缀必须为.xml 。可以通过xmlBase指定Context配置文件存放目录 。
- WAR包部署,即将web应用打包成一个.war部署,默认放在%CATALINA_BASE%/webapps目录下,可以通过appBase指定一个绝对路径 。
- 目录部署,默认也是放在%CATALINA_HOME%/webapps目录下 。
%CATALINA_BASE%/conf/context.xml 。
五、Web应用ContextContext是对Web应用的抽象,相对其他容器有很多组件,且结构上复杂很多 。默认标准实现是
org.apache.catalina.core.StandardContext,其主要的职责有:
- Wrapper管理,Context下有很多Wrapper,Wrapper是对Servlet的包装抽象,是最小的容器 。
- 错误页面ErrorPage管理,在web.xml里可以配置请求处理过程中发生异常重定向的页面路由 。
- 会话Session管理 。
- Jar包扫描和加载,一个Context有一个自定义类加载,扫描和加载/WEB-INF/lib下的jar包 。
- 热加载,定期检查/WEB-INF/lib和/WEB-INF/classes目录下的.jar和.class文件是否更新,更新了就重新加载 。热加载过程较消耗资源,仅适用于开发环境,不可用于生产环境 。
- ServletContainerInitializer的初始化 。
- 除了生命周期监听器外,还有很多其他监听器 。
- 实例管理 。
- 静态资源缓存管理 。

文章插图
5.1 Resources配置Resources是对静态资源的抽象,可以设置缓存以提高响应性能 。默认标准实现是
org.apache.catalina.webresources.StandardRoot 。

文章插图
StandardRoot中有五种WebResourceSet:preResources、mainResources、classResources、jarResources、postResources,支持的配置如下:

文章插图
六、Servlet包装器WrapperWrapper相对于Engine、Host、Context是最小的容器,其父容器必须是Context,没有其他子容器 。默认标准实现是
org.apache.catalina.core.StandardWrapper 。一般情况一个Servlet对应一个Wrapper,这就是为什么Servlet不是线程安全的了,Servlet以单例的实现存在,多个线程访问肯定不是线程安全的,虽然有Servlet对象池的选择,但是Tomcat10.0.6已经不建议这样做 。
七、要点总结本篇只对server.xml常用的配置进行解释,并通过配置文件节点关系,大概梳理了Tomcat整体架构 。
Tomcat是一个非常优秀的开源项目,值得揉碎了仔细研究的细节实在太多,比如:
- 线程池定制化改造;
- 连接Connector的设计以及如何连接到容器Engine的;
- Mapper组件如何解析映射URI;
- 一个请求的处理和响应过程;
- 生命周期框架的设计;
- 自定义类加载器加载机制,如何做到隔离和共享,如何打破双亲委派;
- 热部署,热加载的实现细节;
- 如何解析server.xml配置;
- 部署web应用的细节;
- 容器之间如何做到有序连接,Pipeline和Valve的实现细节;
- Servlet如何实现双向过滤;
- 各种监听器
- 等等
作者:徐同学呀
原文链接:
https://blog.csdn.net/weixin_36586120/article/details/118281370
推荐阅读
- 吊打tomcat的高性能web服务器undertow
- Tomcat中如何开启https
- Tomcat、Jetty和Glassfish性能测试
- 最全Tomcat入门指南
- 上篇 一套亿级用户的IM架构技术干货:整体架构、服务拆分等
- 超实用的tomcat启动脚本实现
- 热加载和热部署,没听过?看看 Tomcat 是怎么实现的
- docker下拉取tomcat镜像以及配置,亲测可用
- centos7中利用logrotate工具切割tomcat日志
- 输入法会窥探隐私吗 多款输入法被指收集用户上传内容
