個人解決最快的方法是:給每個工程的web.xml中加入一個
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>web1.root</param-value>
</context-param>
保證
<param-value>web1.root</param-value> 不同。
<param-value>web2.root</param-value>
最近有個項目需要在tomcat部署多個項目:(個人解決方案)
第一種:
在host中加:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="/xfpm222" docBase="D:\running\Xfpm2" debug="0" reloadable="true">
<Resource name="jdbc/Oraclexfpm222" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="50" maxWait="-1" username="xfpm2"
password="xfpm2" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@162.8.156.40:1521:orcl"/>
</Context>
</Host>
報錯1:
java.lang.IllegalStateException: Web app root system property already set to dif
ferent value: 'webapp.root' = [D:\running\Xfpm2\] instead of [C:\Program Files\T
omcat 5.5\webapps\Xfpm2\] - Choose unique values for the 'webAppRootKey' context
-param in your web.xml files!
at org.springframework.web.util.WebUtils.setWebAppRootSystemProperty(Web
Utils.java:132)
at org.springframework.web.util.Log4jWebConfigurer.initLogging(Log4jWebC
onfigurer.java:118)
......
解決1:
是兩個項目的設置重復了,導致出錯,但我發現web.xml里並沒有配置webAppRootKey項,然后查閱網上資料
,原來是因為如果沒有web.xm 內沒有設置webAppRootKey項,是為默認設置
public static void setWebAppRootSystemProperty(ServletContext servletContext) throws IllegalStateException {
String param = servletContext.getInitParameter(WEB_APP_ROOT_KEY_PARAM);
String key = (param != null ? param : DEFAULT_WEB_APP_ROOT_KEY);
String oldValue = System .getProperty(key);
if (oldValue != null ) {
throw new IllegalStateException ("WARNING: Web app root system property already set: " + key + " = " +
oldValue + " - Choose unique webAppRootKey values in your web.xml files!" );
}
String root = servletContext.getRealPath("/" );
if (root == null ) {
throw new IllegalStateException ("Cannot set web app root system property when WAR file is not
expanded");
}
System .setProperty(key, root);
servletContext.log("Set web app root system property: " + key + " = " + root);
}
從代碼看出,該方法其實就是把該web application的根目錄的絕對文件路徑作為屬性保存在 System的屬性列表中。該屬性的名字,由web.xml文件中的名為"webAppRootKey"的參數值指出。
如果不在web.xml中定義 webAppRootKey參數,那么屬性名就是缺省的"webapp.root".在我們的petclinic項目中已經定義了 webAppRootKey參數,其值為"petclinic.root",因此,屬性的名字
就是"petclinic.root".
最后將webAppRootKey項配置好,錯誤解決。
以上解釋懂一點,但是自己解決方法:在web.xml中加:
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>web1.root</param-value>
</context-param>
另一個項目中加:
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>web2.root</param-value>
</context-param>
報錯2:
Caught exception while loading file struts-default.xml - [unknown location]
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loa
dConfigurationFiles(XmlConfigurationProvider.java:795)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loa
dDocuments(XmlConfigurationProvider.java:132)
......
解決2:可能是出現包之間的沖突,可以把沖突的包放在tomcat的common中(xerces-2.6.2.jar)
報錯3:
java.lang.NullPointerException
at jimmystudio.util.table.TableParser.getPageCount(Unknown Source)
at jimmystudio.util.table.TableParser.getPage(Unknown Source)
at jimmystudio.util.table.TableUtils.init(Unknown Source)
at org.apache.jsp.util.table.table_jsp._jspService(table_jsp.java:57)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper
.java:332)
解決3:這是同一數據庫,出現找不到數據(不知道是頁面緩存的問題,還是數據庫連接的問題)
如果數據用同一數據庫可能出現報錯!!
解決另外建立數據庫、用戶名和密碼,分開連接。