tomcat/config/server.xml中Host标签Context节点的问题

项目里quartz定时器总是被执行2次,通过打印发现原来项目被加载了两次,所以项目下的Listener被重复加载了

server.xml是这样的

appBase是指定虚拟主机的目录,可以指定绝对目录,也可以指定相对于的相对目录.如果没有此项,默认为/webapps。 

appBase的两个作用:

1. 这个目录下面的子目录将自动被部署为应用。
2. 这个目录下面的.war文件将被自动解压缩并部署为应用

docBase是指定Web应用的文件路径.可以给定绝对路径,也可以给定相对于Host的appBase属性的相对路径. 如果Web应用采用开放目录结构,那就指定Web应用的根目录;如果Web应用是个WAR文件,那就指定WAR文件的路径。

path是访问docBase所在项目的访问路径,如果path为“”值,则浏览器地址栏输入tomcat所在的IP:端口,就可访问到docBase所在的项目。

 docBase是你文件夹的名字(也就是项目名),path是你的访问路径,appBase+path拼接来访问

出现上述问题的原因是tomcat加载完appBase=”webapps”之后又去加载docBase(不清楚先加载哪个),因此造成加载两次项目的问题。

解决方法一:将Host下的Context注释掉。推荐这种方法

  

  网上的说法如下:

               

 

缺点是,IP端口后面需要加上项目名,才可以访问到项目

解决方法二:appBase为空或者为随意设置的一个空文件夹(可能需要新建该文件夹)

缺点是,如果部署的是war包,war包将不会被自动解压。

解决方法三:appBase为空

 

缺点是,如果部署的是war包,war包将不会被自动解压。

解决方法四:Context中的path不为空也不为“/”,path的值为“/”+项目名(不知道为什么这样不会重复加载)

缺点和方法一一样。

 

会出现重复加载的情况:

第一种:appBase=“webapps”,path=“”

第二种:appBase="webapps",path="/"

 

 

 综上,推荐方法一,将Context部分注释掉

 

 参考文献:

http://blog.csdn.net/tuntun1120/article/details/64126278

http://blog.csdn.net/u012554102/article/details/50409452

http://www.iteye.com/problems/94122

http://nkliuliu.iteye.com/blog/816335

posted on 2017-10-16 20:34  草莓王子  阅读(5467)  评论(0编辑  收藏  举报