標籤:contextloaderlistene classnotfoundexcepti contextconfiglocatio classloader
今天在進行了項目的整合的時候使用的是maven工具,當我的項目整合成功以後啟動web容器發現了報了下面的異常:
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.util.WebAppRootListener
在我的項目當中我也確實配置了下面的資訊:
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><listener><listener-class>org.springframework.web.util.WebAppRootListener</listener-class></listener>
開始以為是我的classpath的路徑配置出了問題,但是發現我的配置也沒有問題,和我項目中的目錄相符合:
<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param>
找不到“ org.springframework.web.context.ContextLoaderListener”這個類,ContextLoaderListener這個類是在spring-web.jar包下,我仔細檢查了項目jar環境,發現該jar包確實存在,而且也能找到編譯後的ContextLoaderListener.class檔案。
開始還不知為什麼,到後來在網上找了寫資料終於找到瞭解決的方法和緣由:
Java虛擬機器是根據Java ClassLoader(類載入器)決定如何載入Class。系統預設提供了3個ClassLoader Root ClassLoader,ClassPath Loader,Ext ClassLoader我們也可以編寫自己的ClassLoader,去載入特定環境下的Jar檔案。 能不能載入Jar,載入哪裡的Jar,是由ClassLoader決定的。 樓主的問題可能是 匯入的僅僅是jar包的引用,例如在eclipse中通過build path加進user lib……(類似捷徑)這種在Java Application中沒問題,但在web Application中可能會出現找不到類的異常。在WEB Application中jar包最好放在webroot或webcontent下的lib檔案夾內,特別是xml中用到的jar包。
因為我是通過eclipse的build path直接引用的jar包,沒有把jar檔案拷貝到lib目錄下。
隨後我將所需的jar包全部拷貝到WEB-INF/lib下,再重新啟動tomcat便能順利通過了。
注意:不能再build path了,因為maven會自動的引入jar,假如再添加進去了就會有jar的衝突問題。
spring-web 的jar包沒導進去
jar包郵衝突,把重複的jar包刪除
在web.xml加上<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-*.xml</param-value>
</context-param>
因為預設的讀取的是/WEB-INF下的設定檔,如果設定檔在src中要把路徑改為類路徑底下
4.把工程重新整理一下,因為工程是部署在伺服器底下的,要把加入的jar包部署到工程裡。
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener java.lang.Cl