先來看一下,讓人迷惑的異常截圖,以便再次加深迷惑的感受。
感受之后,就要找原因了,這樣迷惑下去不是辦法。
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時,一定要注意這個文件的位置結構就不會有這個問題了。