Choose unique values for the 'webAppRootKey' context-param in your web.xml files!

1.問題描述

tomcat中部署有兩個項目,一個ROOT.war,一個oauth.war。啟動tomcat后訪問oauth項目報404,但是ROOT項目可以正常訪問。

2.查找原因

查看日志,找到問題所在:

九月 29, 2016 6:07:51 下午 org.apache.catalina.core.StandardContext listenerStart
嚴重: Exception sending context initialized event to listener instance of class org.springframework.web.util.Log4jConfigListener
java.lang.IllegalStateException: Web app root system property already set to different value: 'webapp.root' = [/opt/apache-tomcat-7.0.67/webapps/ROOT/] instead of [/opt/apache-tomcat-7.0.67/webapps/oauth/] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!

3.解釋原理

如果web.xml中有如下配置:

<context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>webapp.root</param-value>
</context-param>

<listener>  
    <listener-class>org.springframework.web.util.WebAppRootListener</listener-class>  
</listener> 

Spring通過org.springframework.web.util.WebAppRootListener 這個監(jiān)聽器將運行路徑放到系統(tǒng)變量里。

System.setProperty(key, root); //key="webapp.root" , value=該項目的物理路徑,如:"/usr/local/tomcat6/webapps/appname"

在web.xml中如果不顯式的配置參數(shù)webAppRootKey,默認值為webapp.root,在項目中可以通過以下代碼,來動態(tài)獲項目的運行路徑。

System.getProperty("webapp.root")

而部署在同一個容器中的項目,要配置不同的webAppRootKey,否則在啟動容器時,就會發(fā)生沖突,報2中的錯誤。

另外,如果在web.xml中配置 org.springframework.web.util.Log4jConfigListener這個監(jiān)聽器,它也包含了WebAppRootListener的功能。所以當在同一容器中部署多個項目時,要顯式的聲明不同的webAppRootKey,如下:

<context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>webapp.root</param-value>
</context-param>

<context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>oauth.root</param-value>
</context-param>

這樣可以在log4j.properties中配置log文件的存儲路徑:

log4j.appender.file.File=${oauth.root}/WEB-INF/logs/oauth.log

4.參考鏈接

  1. web.xml中webAppRootKey
  2. WebApproot in Spring
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容