今天一位網友讓polaris幫忙解決一些jqGrid的問題。在polaris部署運行其工程時,卻拋出Struts2 Error filterStart異常,也就是根本連tomcat都啓動不了。java
因爲polaris在初學Struts2的時候就遇到過該問題,以後也陸陸續續遇到過很多次,今天又遇到了此問題,並且按之前的解決方法該問題依然 存在。固然最後把該問題仍是解決了。這個問題相信不少人都遇到過,各類狀況可能也不同,因而polaris在此對該問題作一個總結,一來做爲之後查閱, 二來也能夠給遇到此問題的人一個參考。web
2010-9-26 20:28:25 org.apache.catalina.core.StandardContext filterStart
嚴重: Exception starting filter struts2
java.lang.NullPointerException
at com.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading(FileManager.java:209)
at com.opensymphony.xwork2.util.FileManager.fileNeedsReloading(FileManager.java:60)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.needsReload(XmlConfigurationProvider.java:325)
……
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
2010-9-26 20:28:25 org.apache.catalina.core.StandardContext start
嚴重: Error filterStart
2010-9-26 20:28:25 org.apache.catalina.core.StandardContext start
嚴重: Context [/jqgridTest] startup failed due to previous errors
2010-9-26 20:28:25 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap
嚴重: A web application created a ThreadLocal with key of type [null] (value [com.opensymphony.xwork2.inject.ContainerImpl$10@1f7e273]) and a value of type [java.lang.Object[]] (value [[Ljava.lang.Object;@1342572]) but failed to remove it when the web application was stopped. To prevent a memory leak, the ThreadLocal has been forcibly removed.
2010-9-26 20:28:25 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap
嚴重: A web application created a ThreadLocal with key of type [null] (value [com.opensymphony.xwork2.inject.ContainerImpl$10@869e8f]) and a value of type [java.lang.Object[]] (value [[Ljava.lang.Object;@13ccea]) but failed to remove it when the web application was stopped. To prevent a memory leak, the ThreadLocal has been forcibly removed.
2010-9-26 20:28:25 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap
嚴重: A web application created a ThreadLocal with key of type [null] (value [com.sun.faces.config.ConfigureListener$1@1f23ca4]) and a value of type [null] (value [null]) but failed to remove it when the web application was stopped. To prevent a memory leak, the ThreadLocal has been forcibly removed.apache
polaris注:中間有省略,異常可能不徹底同樣,但大概就是這個樣子。tomcat
初學Struts2的時候,很容易遇到該問題。這個時候,首先查看導入的JAR包是否正確,通常是少導入了什麼JAR包。記得當初在學Struts2的時候,polaris就遇到導入JAR包的問題,可參看polaris早時剛學Struts2時在百度空間上寫的文章《解決struts2 中Error filterStart 問題》。網絡
進入公司後,遇到了相似的問題。其實這個問題可能跟Struts2不要緊,不過仍是在此提一下。大概的問題是:程序編譯出問題,或者經過 Eclipse將程序部署到Tomcat後,啓動Tomcat報錯。當時遇到此問題感受非常奇怪,由於在同事電腦上一切都正常。後來才發現,原來這是經過 SVN致使的:因爲每一個人的classpath路徑不同(Eclipse中有一個文件.classpath),第一次經過將工程上傳到SVN後,會上傳 該文件(不上傳也會有此問題),這樣其餘人從SVN上下載該工程時,classpath和本身機子上的不同,致使找不到jar包,天然就會編譯出問題, 或者部署出問題。解決方法是將全部的JAR包從新導入一次。如圖:
將這些jar包所有刪除,而後點擊add jars,在當前工程的lib目錄下將全部的jar導入進來。記得有時候還可能須要從新設置JDK,由於JDK各我的的名稱可能不同,如jdk1.6, jdk1.6.0.3之類的,這樣也會致使編譯出錯。app
遇到此問題另一個要想到的問題是配置文件是否有問題。首先固然是web.xml文件,要確保Struts2過濾器配置無誤;而後是struts.xml配置文件。ide
今天polaris遇到的問題就是struts.xml引發的問題。該網友他部署的時候是沒有問題的,他在該配置文件中啓用了devMode模式。 而後,我將其禁用掉,發現問題解決。然而,雖然解決了問題,卻有疑問:爲啥網友的機子上不會有問題?這個時候想到了「空格」問題:polaris的 Tomcat安裝在Program Files目錄中。經過與網友一確認,他的Tomcat安裝目錄沒有空格。this
如下來源於網絡:devMode模式是開發模式,開啓它則默認開啓了i18n.reload、configuration.xml.reload。 這個錯誤是因爲configuration.xml.reload設置爲true倒致使的,網上的資料沒有說明緣由及解決辦法,有人說這是2.16版本的 BUG,tomcat的安裝路徑包含空格,你可使用更高級的版本或將Tomcat安裝到沒有空格的路徑中來避免這個錯誤。spa
以上是對Struts2 Error filterStart異常的一個總結。若是您遇到該問題,而以上方法無法解決,能夠留言或聯繫polaris,或者您對該問題有其餘的解決方法也可留言告之,謝謝。orm
本文初稿完成於2010/9/26 23:02