深入分析Tomcat启动时重复加载项目的原因及解决办法
来源:互联网 发布:天文软件stellarium 编辑:程序博客网 时间:2024/06/08 14:43
其实很多人都写过类似问题的解决方案,一般都是把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
例如下面的配置:
<Host name="www.xxx.com" appBase="mywebapps" autoDeploy="true" unpackWARs="true"> <Alias>www.xxx.cn</Alias> <Alias>www.xxx.com.cn</Alias> <Context docBase="web-sys" path="" name="/web-sys"/> </Host>
注意:在server.xml里有默认的Host(localhost)的配置,这个配置里会加载Tomcat的一些默认项目。如果想保留这个配置,又想为自己的项目配置域名,那么就必须新增一个host,并且appBase不能设置为:webapps(可以新建一个同级目录的文件夹用来存放项目,例如上面配置的appBase="mywebapps")。
阅读全文
1 0
- 深入分析Tomcat启动时重复加载项目的原因及解决办法
- tomcat--项目启动两次的原因分析
- tomcat启动非常慢原因深入分析
- 解决Tomcat启动时项目重复加载问题
- TOMCAT 的安装及启动失败时的几个原因、解决办法!
- tomcat的配置及无法启动的原因分析
- Tomcat启动时项目重复加载,导致资源初始化两次的问题
- Tomcat启动时项目重复加载,导致资源初始化两次的问题
- eclipse中tomcat启动时项目重复加载,导致资源初始化两次的问题
- Tomcat启动时项目重复加载,导致资源初始化两次的问题
- 启动Tomcat时的常见问题及解决办法
- Tomcat内存溢出的原因及解决办法
- ubuntu启动时出现install problem的原因及解决办法
- tomcat无法正常启动的原因分析
- tomcat无法正常启动的原因分析
- tomcat配置多域名站点启动时项目重复加载多次
- Tomcat的SEVERE: Remote Host / SocketException: Connection reset原因分析及解决办法
- tomcat启动时,tomcat的lib里的jar包没有加载上的一个原因
- 计算机网络课设
- 构建具有用户身份认证的 React + Flux 应用程序
- Ajax请求简单封装
- 1249:人见人爱A+B
- 将结构体按位写入文件
- 深入分析Tomcat启动时重复加载项目的原因及解决办法
- 设置Ajax为同步请求
- 最大连续子数组和与最大连续子矩阵和
- Android状态栏渐变色的实现
- openstack常用检查命令杂烩
- Android项目重构-架构篇
- Mysql学习整理(五)
- SSM项目中,普通类中调用Service
- 使用朴素贝叶斯分类器对新闻文本数据进行类别预测