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.從底層去思考問題。解決問題的過程也是提高的過程,當然少不了堅持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章