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