先来看一下,让人迷惑的异常截图,以便再次加深迷惑的感受。
感受之后,就要找原因了,这样迷惑下去不是办法。
1. 为什么会出现这个错误?
很明显,错误已经明确的提示到没有找到这类。也就是说,这个类不存在。
开什么玩笑?一直用的好好的怎么就突然不存在了?这不科学啊!
2. 这个类为什么不存在?
问题已经定向到了错误范围,那就从struts2 这个jar包开始吧,经过排查发现确实没有这个类,如图:
那就奇怪了,以前用的都好好的,今天突然就没有了?不信邪,继续分析。。。。
排查pom文件 ,与之前正常项目对比了一下,发现一处不同,之前用的struts2是2.3版本的,而今天高兴将它换成了2.5的,如图:
也许问题就在这,翻越大量的关于官方版本变动的表述,最后确认到:
2.4 以后的struts2过滤类文件 StrutsPrepareAndExecuteFilter.class 的结构已经做了调整,没有ng 这个包了,
因此,配置文件中这句代码才会导致异常,因为系统启动时找不到它。
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
所以,将配置文件换成这段代码就可以了。
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
最后总结:
因为struts2版本在2.4开始做了结构调整导致的,所以配置struts2时,一定要注意这个文件的位置结构就不会有这个问题了。
解决关于 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 异常的原因