struts2中web.xml文件错误导致的SEVERE: Exception starting filter struts2

经过代码比较,主要是与成功代码的比较,最终确认了问题。

不过通过这样的问题解决,也学习到了一些新的知识。

问题:SEVERE: Exception starting filter struts2
Java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

...........

这个错误是tomcat服务器启动的时候发生的,说明tomcat启动的时候会读web.xml并加载过滤器。

解决过程是这样的:我使用struts2+hibernate框架,运行程序时一直都说There is no Action mapped for namespace / and action name sh.问题,但的确是正确配置struts.xml了。当时并没有考虑从web.xml来考虑,一直认为配置是正确的。也没有从tomcat启动信息中去查问题。

在无意中发现了tomcat报错SEVERE: Exception starting filter struts2。于是还认真学习了一下filter原理,类加载器,查看了控制台tomcat启动信息以及信息中的各个参数的含义等,就是想从底层来考虑这个问题。

百度了一下:1.可能是jar包出错。但是我有一个正常程序运行该jar包不会出错,应该不是该问题。2.可能是构建路径问题。我把jar包都放在WEB-INFO/bin目录下,应该没问题。.classpath文件中的<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>就是说程序运行时会将WEB-INF/bin目录下jar包导入,另一种方法就是手动将User library中的jar包添加到项目发布时自动加载的目录下:选中项目,右键项目选择Properties->Deployment Assembly->new:将建立的User library加入到项目中,相应的.classpath文件也会改变。

以上两种都没有解决。但是在测试第二种方案时,考虑了把别的struts2项目关闭或在tomcat服务器中删除,因为担心别的项目是不是配置出错。

最后运行了一个正确的struts2项目,并使tomcat服务器中只运行该项目(右键tomcat服务器-->添加和删除),运行正常。这时将该项目web.xml与错误项目的web.xml比较,发现了问题:

正确:org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

错误:org.apache.struts2.dispacher.ng.filter.StrutsPrepareAndExecuteFilter

就是一个dispatcher的拼写错误,晕!搞了我几天,终于搞好了。

总结:struts2错误先1.看tomcat启动信息。2.看web.xml和struts.xml是否正确。3.看bin目录下的jar包是否正确。4.添加一些测试代码,删除一些代码并看运行结果。5.与运行正确的项目进行比较。6.从底层去思考问题。解决问题的过程也是提高的过程,当然少不了坚持。

猜你喜欢

转载自yzl495.iteye.com/blog/2382301