image.png

Server

Tomcat结构 - 图2

  • Connector负责Socket到Request的转换。
  • Container负责管理Servlet
  • Server由tomcat中Catalina来管理
  • tomcat的启动类是Bootstrap(main方法),相当于一个CatalinaAdaptor,具体执行还是调用Catalina。

Server默认实现是StandardServer

Engine(Container)

Container一共有4个子接口
image.png

  • Engine:管理多个站点,一个service一个Engine
  • Host:配置host添加站点(host配置中的name代表域名
  • Context:一个应用程序
  • Wrapper:一个wrapper封装一个Servlet

tomcat配置中 host和Context的关系

Engine包含Host,Host包含Context
image.png
Tomcat结构 - 图5

  • appBase:这个目录下面的子目录将自动被部署为应用,且war文件将被自动解压缩并部署为应用,默认为tomcat下webapps目录。
    • context名字默认为host.appBase下文件夹名字,可以设置覆盖appBase(可以设置Context path=””,url就可以不用写context了)。
    • <Context path=”访问uri名称” docBase=”资源路径” debug=”0″ reloadable=”true” />

Tomcat 正式环境下多个Context配置_我的博客-CSDN博客

  • deployOnStartup =”false” :tomcat启动时, 不部署webapps下的所有web应用
  • autoDeploy =”false” :避免tomcat在扫描改动时, 再次把webapps下的web应用给部署进来.

deployOnStartup为true时,Tomcat在启动时检查Web应用,且检测到的所有Web应用视作新应用;autoDeploy为true时,Tomcat在运行时定期检查新的Web应用或Web应用的更新。

【坑】tomcat部署两次问题

关于Tomcat下项目被启动两次为问题 - 赵羴 - 博客园
image.png
解决方法:

  • 【常用】appBase=””
  • autoDeploy=”false” deployOnStartup=”false”
  • 或移除<context> ```xml


``` tomcat - Setting autoDeploy and deployOnStartup will cause app be deployed twice on startup? - Stack Overflow
关于Tomcat下项目被启动两次为问题 - 赵羴 - 博客园

Pipeline & Valve

image.png

  • basic valve负责调用下层容器的 Pipeline 里的第一个 Valve。