Struts2 Error filterStart 异常
1、ErrorfilterStart异常的详细堆栈信息
2010-9-2620:28:25org.apache.catalina.core.StandardContextfilterStart
严重:Exceptionstartingfilterstruts2
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.catalina.startup.Bootstrap.start(Bootstrap.java:289)
atorg.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
2010-9-2620:28:25org.apache.catalina.core.StandardContextstart
严重:ErrorfilterStart
2010-9-2620:28:25org.apache.catalina.core.StandardContextstart
严重:Context[/jqgridTest]startupfailedduetopreviouserrors
2010-9-2620:28:25org.apache.catalina.loader.WebappClassLoaderclearThreadLocalMap
严重:AwebapplicationcreatedaThreadLocalwithkeyoftype[null](value[com.opensymphony.xwork2.inject.ContainerImpl$10@1f7e273])andavalueoftype[java.lang.Object[]](value[[Ljava.lang.Object;@1342572])butfailedtoremoveitwhenthewebapplicationwasstopped.Topreventamemoryleak,theThreadLocalhasbeenforciblyremoved.
2010-9-2620:28:25org.apache.catalina.loader.WebappClassLoaderclearThreadLocalMap
严重:AwebapplicationcreatedaThreadLocalwithkeyoftype[null](value[com.opensymphony.xwork2.inject.ContainerImpl$10@869e8f])andavalueoftype[java.lang.Object[]](value[[Ljava.lang.Object;@13ccea])butfailedtoremoveitwhenthewebapplicationwasstopped.Topreventamemoryleak,theThreadLocalhasbeenforciblyremoved.
2010-9-2620:28:25org.apache.catalina.loader.WebappClassLoaderclearThreadLocalMap
严重:AwebapplicationcreatedaThreadLocalwithkeyoftype[null](value[com.sun.faces.config.ConfigureListener$1@1f23ca4])andavalueoftype[null](value[null])butfailedtoremoveitwhenthewebapplicationwasstopped.Topreventamemoryleak,theThreadLocalhasbeenforciblyremoved.
polaris注:中间有省略,异常可能不完全一样,但大概就是这个样子。
2、解决方法总结
2.1解决方法一
初学Struts2的时候,很容易遇到该问题。这个时候,首先查看导入的JAR包是否正确,一般是少导入了什么JAR包。记得当初在学Struts2的时候,polaris就遇到导入JAR包的问题,可参看polaris早时刚学Struts2时在百度空间上写的文章《解决struts2中ErrorfilterStart问题》。
2.2解决方法二
进入公司后,遇到了类似的问题。其实这个问题可能跟Struts2没关系,不过还是在此提一下。大概的问题是:程序编译出问题,或者通过Eclipse将程序部署到Tomcat后,启动Tomcat报错。当时遇到此问题感觉很是奇怪,因为在同事电脑上一切都正常。后来才发现,原来这是通过SVN导致的:由于每个人的classpath路径不一样(Eclipse中有一个文件.classpath),第一次通过将工程上传到SVN后,会上传该文件(不上传也会有此问题),这样其他人从SVN上下载该工程时,classpath和自己机子上的不一样,导致找不到jar包,自然就会编译出问题,或者部署出问题。解决方法是将所有的JAR包重新导入一次。如图:
Struts2|北极星为您引航
将这些jar包全部删除,然后点击addjars,在当前工程的lib目录下将所有的jar导入进来。记得有时候还可能需要重新设置JDK,因为JDK各个人的名称可能不一样,如jdk1.6,jdk1.6.0.3之类的,这样也会导致编译出错。
2.3解决方法三
遇到此问题另外一个要想到的问题是配置文件是否有问题。首先当然是web.xml文件,要确保Struts2过滤器配置无误;然后是struts.xml配置文件。
今天polaris遇到的问题就是struts.xml引起的问题。该网友他部署的时候是没有问题的,他在该配置文件中启用了devMode模式。然后,我将其禁用掉,发现问题解决。然而,虽然解决了问题,却有疑问:为啥网友的机子上不会有问题?这个时候想到了“空格”问题:polaris的Tomcat安装在ProgramFiles目录中。通过与网友一确认,他的Tomcat安装目录没有空格。
以下来源于网络:devMode模式是开发模式,开启它则默认开启了i18n.reload、configuration.xml.reload。这个错误是由于configuration.xml.reload设置为true倒导致的,网上的资料没有说明原因及解决办法,有人说这是2.16版本的BUG,tomcat的安装路径包含空格,你可以使用更高级的版本或将Tomcat安装到没有空格的路径中来避免这个错误。