日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

jar包直接拷贝到WEB-INF/lib下和以userLibrary引入的区别

發(fā)布時間:2023/11/30 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jar包直接拷贝到WEB-INF/lib下和以userLibrary引入的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

jar包直接拷貝到WEB-INF/lib下和以userLibrary形式引入的區(qū)別?

jar包放置在WEB-INF/lib下和通過build path導入的區(qū)別是什么?

上一篇文章:【原創(chuàng)】java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener雖然提出了解決方案,但具體原因沒有探查,很多人會問究竟是為什么呢?

通俗的講是和classLoader有關,對于純java項目,它不存在WEB-INF目錄,所以在引入jar包的時候一般都是通過buildpath直接引入,例如我要引入Spring3X,那么先定義一個user library,然后通過build path引入。

純 java項目使用的本地自己的JRE,那么classLoader在加載jar和class時候是分開的,對于我們自己編寫的class,會在 APP_HOME/bin下。導入的jar包或者user library的配置信息會出現(xiàn)在APP_HOME/.classpath文件中,ClassLoader會很智能去加載這些classes和 jar。.classpath文件內容如下:

<?xml version="1.0" encoding="UTF-8"?> <classpath><classpathentry kind="src" path="src"/><classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jre6"/><classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Spring3.1.0"/><classpathentry kind="lib" path="E:/Jar_Framework/cglib/cglib-2.2.2.jar" sourcepath="E:/Jar_Framework/cglib/cglib-src-2.2.2.jar"/><classpathentry kind="lib" path="E:/Jar_Framework/commons-logging-1.1.1-bin/commons-logging-1.1.1/commons-logging-1.1.1.jar"/><classpathentry kind="lib" path="E:/Jar_Framework/aopalliance-1.0/aopalliance-1.0.jar"/><classpathentry kind="lib" path="E:/Jar_Framework/cglib/cglib-nodep-2.2.2.jar"/><classpathentry kind="lib" path="E:/Jar_Framework/spring revelant/aspectj-1.6.12.jar"/><classpathentry kind="lib" path="E:/Jar_Framework/spring revelant/aspectjweaver-1.6.8.jar"/><classpathentry kind="lib" path="E:/Jar_Framework/spring revelant/asm-3.2.jar"/><classpathentry kind="output" path="bin"/> </classpath>

這樣ClassLoader就會正確的找到所有需要的類。

而對于java web項目,就不一樣了,雖然eclipse的workspace中仍然有.classpath文件,但即使你導入的了自己定義的user library,它也不會出現(xiàn)在.classpath中,這就是問題的關鍵。這到底是為什么呢???

對于java web項目,它最終不是通過本地的JRE去運行,而是部署到web 服務器,如Tomcat、Weblogic、WebSphere等,這些服務器都實現(xiàn)了自身的類加載器。

以Tomcat典型結果為例,它的目錄結構分別對應四個不同的類加載器,關系如下:

common?? ?? --- ?? CommonClassLoader

server???? ? ? ---? ? CatalinaClassLoader

shared??????? ---??? SharedClassLoader

webapps? ?? ---??? WebappClassLoader

我們的 web 應用都是部署到 webapps 目錄下,而WebappClassLoader加載器專門負責加載 webapps 下所有web項目的 WEB-INF 下的類庫和類文件。而我們通過 user library 引入的 jar 包自然不會被 WebappClassLoader 加載器加載,所以才會出現(xiàn) ClassNotFoundException 。

延伸閱讀:

http://topic.csdn.net/u/20111124/14/246c7af8-d752-423d-a2e5-1b94da53456a.html

轉載于:https://www.cnblogs.com/orientsun/archive/2012/11/04/2753283.html

總結

以上是生活随笔為你收集整理的jar包直接拷贝到WEB-INF/lib下和以userLibrary引入的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。