tomcat 项目启动两次的的解决

由于我没用eclipse 自带的tomcat ,自己安装了一个.

结果呢,项目就启动了两次

下图是tomcat 的浏览界面

configuration path 就是这个目录

选第一个没问题 ,第二个为tomcat 的安装目录这个配置是将项目发布到tomcat的webapps下。在servers试图启动Tomcat后,调用的是tomcat所在目录的执行文件,除了部署eclipse下的项目,tomcat还要加载webapps下的所有项目,所以就重复加载了。

其实很多人都写过类似问题的解决方案,一般都是把docBase的值设置为绝对路径并且保证这个绝对路径不在appBase设置的路径下面。但是没有人提到过我这个解决方案,今天分享出来,大家一起讨论。

问题发生环境:

在tomcat的默认的server.xml里面,错误的配置了Host或者Context标签

例如下面的配置就会导致Tomcat重复加载项目:web-sys

在Server.xml里配置:

<Host name="www.xxx.com" appBase="webapps" autoDeploy="true" unpackWARs="true">
<Alias>www.xxx.cn</Alias>
<Alias>www.xxx.com.cn</Alias>
<Context docBase="web-sys" path=""/>
</Host>

问题发生的原因:

根据server.xml里配置的,Tomcat首先根据Context的配置内容生成第一个StandardContext对象,加载一次项目。然后再根据Host/appBase的配置对webapps下面的项目(web-sys)生成第二个StandardContext,再加载一次项目。Tomcat针对同一项目生成两个StandardContext的原因就是因为他们的名字不同,Tomcat认为是两个Context,所以加载了两次。而他们的名字是谁决定的呢?第一个StandardContext的名字是由标签:Context的配置来决定的,而第二个StandardContext的名字是由项目名称(web-sys)决定的。

解决办法:

其实server.xml的Context标签有一个隐藏属性:name,只需要把此name设置为项目名称就可避免重复加载的问题。这个隐藏的name属性在官方文档里是找不到的。只能通过分析源码才能推测出来。分析的流程可以参考:http://blog.csdn.net/lmmzsn/article/details/77988716
---------------------

原文地址:https://www.cnblogs.com/zuochanzi/p/9900756.html

时间: 2024-11-14 13:30:56

tomcat 项目启动两次的的解决的相关文章

tomcat单独启动时闪退的解决办法,以及修改端口8080为80,

tomcat单独启动时闪退的解决办法: 点击" startup",马上就闪退了:原因一般都是没有配置%JAVA_HOME%和tomcat的环境变量造成的: 很简单: 在startup.bat那个文件下,编辑点进去之后,在最上边的echo off上面加上: SET JAVA_HOME=C:\Program Files\Java\jdk1.7.0_60 SET TOMCAT_HOME=C:\apache-tomcat-7.0.53 然后shutdown.bat里面也要加上这两句话: 然后重

tomcat项目启动报错java.lang.ClassCastException: org.apache.xerces.parsers.XML11Configuration……

周一上班启动项目,报错如图: 看到网上说的原因,有jar包冲突造成的,我这里的是: 情况:console打印信息有多次连接数据库,但该项目只需要连接一个库.再仔细看,发现有其他项目的信息,打开tomcat,发现webapps下果然有其他项目. 分析:早上来的时候,直接关闭了很多项目,但这些项目还在tomcat下部署,并没有删除,所以造成启动时产生一系列的bug. 解决:在tomcat的webapps下删除其他项目.重新部署正在使用的项目,重启,OK. 所以,有多个项目的时候,操作的时候要注意一些

springboot 在tomcat中启动两次

我开始以为眼花了,tomcat启动的时候, .   ____          _            __ _ _ /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/  ___)| |_)| | | | | || (_| |  ) ) ) )  '  |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============

详解Tomcat系列(一)-从源码分析Tomcat的启动

在整个Tomcat系列文章讲解之前, 我想说的是虽然整个Tomcat体系比较复杂, 但是Tomcat中的代码并不难读, 只要认真花点功夫, 一定能啃下来. 由于篇幅的原因, 很难把Tomcat所有的知识点都放到同一篇文章中, 我将把Tomcat系列文章分为Tomcat的启动, Tomcat中各模块的介绍和Tomcat中的设计模式三部分, 欢迎阅读与关注. 一:通过idea搭建Tomcat源码阅读环境 首先我们到Tomcat的官网(http://tomcat.apache.org/)上下载Tomc

Tomcat 默认项目配置,导致tomcat启动两次 解决

原因分析 server.xml中的配置 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="

Tomcat-在发布项目时两次重复加载的问题介绍与解决

前提: 如 1.存在某个应用:hello 2.该应用存放路径:D:\apache-tomcat-5.5.17\webapps\hello 3.Tomcat的server.xml部分配置信息如下: tomcat的server.xml配置文件中引起祸端的主角 <Context path="" reloadable="true" docBase="hello"/> ... (这么做的目的就是为了将hello应用设为根,访问IP时就直接访问该

MyEclipse中同时启动两个tomcat

开发的时候,有些时候需要同时启动两个项目.首先配置tomcat,方法如下:(转载自:http://bendan123812.iteye.com/blog/1716789) 一.把Tomcat复制一份并重新命名,我这里是E:\soft\apache-tomcat-study,然后修改conf/service.xml文件,把所有的端口号都改成别的(这一点非常重要),这样在同时启动两个tomcat的时候不会造成端口被占用的错误. 二.上图片 点击Create Launch Configuration

Spring Boot 2.0(七):Spring Boot 如何解决项目启动时初始化资源

在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资源操作. 这个神器就是 CommandLineRunner,CommandLineRunner 接口的 Component 会在所有 Spring Beans都初始化之后,SpringApplication.run()之前执行,非常适合在应用程序启动之初进行一些数据初始化的工作. 接下来我们就运用案

启动两个tomcat

因为项目的种种原因,必须启动两个tomcat测试 于是复制tomcat,改端口,报错,到日志看,发现shutdow端口也需要改 总结 server.xml改两个地方的端口 <Server port="8006" shutdown="SHUTDOWN"> <Connector port="7771" protocol="HTTP/1.1" 这是项目部署路径 <Context  path ="&q