Server
- Connector负责Socket到Request的转换。
- Container负责管理Servlet
- Server由tomcat中Catalina来管理
- tomcat的启动类是Bootstrap(main方法),相当于一个CatalinaAdaptor,具体执行还是调用Catalina。
Engine(Container)
Container一共有4个子接口
- Engine:管理多个站点,一个service一个Engine
- Host:配置host添加站点(host配置中的name代表域名)
- Context:一个应用程序
- Wrapper:一个wrapper封装一个Servlet
tomcat配置中 host和Context的关系
Engine包含Host,Host包含Context
- appBase:这个目录下面的子目录将自动被部署为应用,且war文件将被自动解压缩并部署为应用,默认为tomcat下webapps目录。
- context名字默认为host.appBase下文件夹名字,可以设置
覆盖appBase (可以设置Context path=””,url就可以不用写context了)。 - <Context path=”访问uri名称” docBase=”资源路径” debug=”0″ reloadable=”true” />
- context名字默认为host.appBase下文件夹名字,可以设置
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下项目被启动两次为问题 - 赵羴 - 博客园
解决方法:
- 【常用】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
- basic valve负责调用下层容器的 Pipeline 里的第一个 Valve。