Tomcat启动项目时启动两次
问题描述:
- Tomcat启动项目时,会二次启动,打印两遍启动日志,而且会执行两次启动方法。
问题原因
- 多数项目为了设置浏览器访问地址不需要携带项目地址,会对Tomcat进行一定的配置。
- Tomcat的server配置文件存在问题,Tomcat会扫描到两次项目,造成重复启动。
问题分析
- 打开
./Tomcat/conf/server.xml
配置文件 - 找到Host配置标签
<!-- 这是错误的的配置 --> <Host name="localhost" appBase="web" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="./tomcat/web" reloadable="false" allowLinking="true"></Context> </Host>
- Host标签的
appBase
属性表示Tomcat启动时加载web目录下的资源,Tomcat启动后,可以直接访问内部资源。比如存在文件./tomcat/web/app.apk
,Tomcat启动后,可以直接通过http://ip:host/app.apk
访问该文件 - Host标签内的Context标签的
docBase
属性表示Tomcat启动时加载目录下的项目,并作为默认项目,Tomcat启动后访问该项目不需要携带项目名称。比如此项目可以直接访问http://ip:host
,不需要访问http://ip:host/web
- 配置的错误点:
- Tomcat启动时根据Host标签的
appBase
属性,加载./tomcat/web
下的资源,扫描到了项目,此时项目第一次启动。 - 之后Tomcat根据Host内的Context标签的
docBase
属性,又重新加载了./tomcat/web
下的项目,此时项目第二次启动。
- Tomcat启动时根据Host标签的
问题解决
- 将Host标签的
appBase
和Context的docBase
设置为不同的路径。<!-- 这是正确的的配置 --> <Host name="localhost" appBase="resource" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="./tomcat/web" reloadable="false" allowLinking="true"></Context> </Host>
- 这样
./tomcat
下的resource和web目录互不影响。 - 可以直接设置
appBase
为""。