码迷,mamicode.com
首页 > 其他好文 > 详细

tomcat 项目启动两次的的解决

时间:2018-11-03 15:19:46      阅读:1013      评论:0      收藏:0      [点我收藏+]

标签:net   流程   调用   技术   很多   dep   conf   src   分享   

由于我没用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
---------------------

 

tomcat 项目启动两次的的解决

标签:net   流程   调用   技术   很多   dep   conf   src   分享   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!