java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL,spring獲取context


 

 

今天學習spring項目的時候出現了下面的錯誤信息:

java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:532)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4854)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)

    雖然問題一眼就知道是這句話:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

  但是還是有點迷糊,因為以前練習spring的時候,是把jar包都復制到WEB-INF/Lib目錄下的,但是最近練習項目的時候都是自己建立自己不同的User libaraies,很明顯我已經導入了這些jar包,但是卻提示這樣的信息..............

看來自己對於JVM是如何引入我們所需要的第三方jar包的機制,后來去網上仔細搜了以下,才明白其原理,下面不廢話,直接重點:

 

  1. ava虛擬機是根據Java ClassLoader(類加載器)決定如何加載Class。  
  2. 系統默認提供了3個ClassLoader    
  3. Root ClassLoader,ClassPath Loader,Ext ClassLoader  
  4. 我們也可以編寫自己的ClassLoader,去加載特定環境下的Jar文件。    
  5. 能不能加載Jar,加載哪里的Jar,是由ClassLoader決定的。    
  6.   
  7. 樓主的問題可能是 導入的僅僅是jar包的引用,例如在eclipse中通過build path加進user lib……(類似快捷方式)  
  8. 這種在Java Application中沒問題,但在web Application中可能會出現找不到類的異常。  
  9. 在WEB Application中jar包最好放在webroot或webcontent下的lib文件夾內,特別是xml中用到的jar包。

 

 

原來是我們自使用類似於Ant來獲取類的時候是不能象UserLibaray來使用的,因為我們建立的是一個web app,而web app使用的是自定義的ClassLoader,而非JVM中的存在的三種ClassLoader(如上面所說),因此它無法識別出我們寫在xml文件中的第三方類庫的class文件,而只有我們寫在src目錄下的java文件才能使用,因此,我們必須要把第三方的類庫放入到lib目錄下,web app 才會識別我們定義在xml中的類了  .

    通這個錯誤,也讓我對classloader的認識也進了一步.雖然以前看過周志明的深入JVM一書中關於類加載器分派體系的介紹,但是不太理解,這樣一來,自己也多了一些體會.

 

javalangClassNotFoundException: orgspringframeworkwebcontextContextLoa

 

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包部署到工程里。

 

啟動報錯:javalangClassNotFoundException: orgspringframeworkwebcontextContextLoaderListener

 

jar包不是導入進去就完了,還要buildpath,也就是創建路徑。在Myeclipse里面,右鍵單擊你的jar包,點擊build path--》add build path。完成創建路徑。另外spring的jar包並非只有一個,最基本的有3個。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM