困擾我近10多天的問題,讓我在架構功力修煉上幾乎停滞不前,今天問題被KO,小小的高興下。
純潔的web.xml檔案
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我的日志localhost.2012-08-24.log檔案
2012-8-24 10:10:15org.apache.catalina.core.ApplicationContext log
資訊: ContextListener: contextInitialized()
2012-8-24 10:10:15 org.apache.catalina.core.ApplicationContextlog
資訊: SessionListener: contextInitialized()
2012-8-24 10:10:16org.apache.catalina.core.StandardContext filterStart
嚴重: Exception starting filter struts2
java.lang.NullPointerException
atcom.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading(FileManager.java:209)
atcom.opensymphony.xwork2.util.FileManager.fileNeedsReloading(FileManager.java:60)
atcom.opensymphony.xwork2.config.providers.XmlConfigurationProvider.needsReload(XmlConfigurationProvider.java:325)
atorg.apache.struts2.config.StrutsXmlConfigurationProvider.needsReload(StrutsXmlConfigurationProvider.java:168)
atcom.opensymphony.xwork2.config.ConfigurationManager.conditionalReload(ConfigurationManager.java:220)
atcom.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:61)
atorg.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:774)
atorg.apache.struts2.dispatcher.ng.InitOperations.initStaticContentLoader(InitOperations.java:77)
atorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:49)
atorg.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295)
atorg.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
atorg.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
atorg.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4072)
atorg.apache.catalina.core.StandardContext.start(StandardContext.java:4726)
atorg.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
atorg.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
atorg.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
atorg.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079)
atorg.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)
atorg.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)
atorg.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
atorg.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
atorg.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
atorg.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
atorg.apache.catalina.core.StandardHost.start(StandardHost.java:840)
atorg.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
atorg.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
atorg.apache.catalina.core.StandardService.start(StandardService.java:525)
atorg.apache.catalina.core.StandardServer.start(StandardServer.java:754)
atorg.apache.catalina.startup.Catalina.start(Catalina.java:595)
atsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
atsun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
atsun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
atjava.lang.reflect.Method.invoke(Unknown Source)
atorg.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
atorg.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Tomcat背景報錯:
嚴重: Error filterStart
2012-8-24 10:10:16org.apache.catalina.core.StandardContext start
嚴重: Context [/Struts2_0400_Path] startupfailed due to previous errors
2012-8-24 10:10:16org.apache.catalina.loader.WebappClassLoader clearThreadLocal
Map
嚴重: The web application [/Struts2_0400_Path]created a ThreadLocal with key of
type[com.opensymphony.xwork2.inject.ContainerImpl$10] (value [com.opensymphony
[email protected]]) and a value of type[java.lang.Object[
]] (value [[Ljava.lang.Object;@10e1513])but failed to remove it when the web ap
plication was stopped. This is very likely tocreate a memory leak.
2012-8-24 10:10:16org.apache.catalina.loader.WebappClassLoader clearThreadLocal
Map
嚴重: The web application [/Struts2_0400_Path]created a ThreadLocal with key of
type[com.opensymphony.xwork2.inject.ContainerImpl$10] (value [com.opensymphony
[email protected]]) anda value of type [java.lang.Object[]
] (value [[Ljava.lang.Object;@b31a7c])but failed to remove it when the web appl
ication was stopped. This is very likely tocreate a memory leak.
2012-8-24 10:10:17org.apache.coyote.http11.Http11AprProtocol start
資訊: Starting Coyote HTTP/1.1 on http-80
2012-8-24 10:10:17org.apache.coyote.ajp.AjpAprProtocol start
資訊: Starting Coyote AJP/1.3 on ajp-8009
2012-8-24 10:10:17org.apache.catalina.startup.Catalina start
資訊: Server startup in 2835 ms
解決方案:
1、你把核心的filter改成<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> 試試看看是否能夠正常啟動
2、恩,問題解決了,是因為我用的struts2.3.1版本,缺少一個jar包common-lang,導入就好 了,不過糾結一整天算是找到了一個方法,就是在tomcat控制台看不到結果的時候,去tomcat/logs檔案夾下看日志檔案,結果發現
java.lang.NoClassDefFoundError:org/apache/commons/lang/StringUtils
StringUtils 在common-lang包中
3、
估計是包引用的事情
在apache網站下載下傳下來的包可能有問題
你找個能運作的例子,把你現在對應的lib下的包換下
4、
tomcat6.0+jdk1.6下 項目中要放一下jar包
struts2-core-2.2.1.
ar xwork-core-2.2.1.jar
ognl-3.0.jar
javassist-3.7.ga.jar
freemarker-2.3.16.jar
commons-io-1.3.2.jar
commons-fileupload-1.2.1.jar
commons-logging-1.0.4.jar
其它解決方案:
1、試着把tomat/server/lib目錄下的commons-digester.jar,commons-beanutils.jar拷貝到common/lib/目錄 --經測試不行,tomcat5.5對應目錄下根本沒有對應的包。
2、有個文章說tomcat裡的bug,沒有實作javax.servlet.Filter的Filter會報這樣的錯誤,看來tomcat在啟動就初始化Filter執行個體,但是在filter中又沒有看到那段代碼沒有實作Filter,或者有代碼在啟動時沒有執行個體化。--沒發現問題。
****************************************
問題解決了,将web.xml檔案中filter配置删除重新寫了一遍,然後将tomcat\common\lib\下的servlet-api.jar拷貝到tomcat\server\lib下,重新啟動後就好了,也不知道與這個包有沒有關系!
摘錄總結下:
1、如果以後出現tomcat 嚴重: Error filterStart 錯誤,一般原因為:1、xml配置失誤 2、filter中某段代碼未執行個體化(這個情況是出現最多的,要仔細檢查) 3、試着把tomat/server/lib目錄下的commons-digester.jar,commons-beanutils.jar拷貝到common/lib/目錄,有些包在部署是沒有被包含
開源中國論壇的終曲解答:
這是tomcat6.0之後的記憶體檢查機制,理論上換5.5重新部署應該沒問題的,或者試試在server.xml裡注釋掉下面這句
<ListenerclassName="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
嘗試方案三:
D:\ProgramFiles\Tomcat6有空格
重裝Tomcat、MyEclipse,消除安裝路徑空格問題:
D:\ProgramFiles\Tomcat6
親,上次關于struts2的tomcat背景報錯問題(http://topic.csdn.net/u/20120824/10/b04b46a5-eb73-4c31-b999-f1242f26f3a8.html)已解決:一怒之下,重新裝MyEclipse/Tomcat6,發現……竟然可以了。估計是tomcat安裝路徑有空格問題、或者:連結:http://www.oschina.net/question/726248_67707
問題解決後,重新部署、通路
通路路徑:http://localhost/Struts2_0100_Introduction
Struts Problem Report
Struts has detected an unhandled exception:
Messages: | · There is no Action mapped for namespace / and action name . |
解決:
通路路徑、NameSpace、Action命名/路徑問題:
通路路徑:http://localhost/Struts2_0100_Introduction/hell正确通路
至此,Game Over!!!