关于java.lang.ClassNotFoundException: org.hibernate.Session 异常的原因分析
来源:互联网 发布:网络舆论 社会影响 编辑:程序博客网 时间:2024/05/21 01:56
笔者在用eclipse实践struts1+hibernate练习题的时候出现了:
java.lang.ClassNotFoundException: org.hibernate.Session
对于这个异常意思就是:找不到对应的包
所以第一反应是 查看工程有没有导入这个包 ,可以一看明明已经导入了这个包,那怎么还会出现这个错误呢,
后来经过谷歌,发现有很多人都碰到过这个异常,有的说是 导入的hibernate.jar有问题
于是我下了好几个版本的hibernate,都试了一下,结果还是不行
最后终于发现原来在WEB-INF/lib 下也到加入对应的包 这个是为什么呢?
经过百度得知,下面应用别人的原文:
http://hi.baidu.com/oritenson/blog/item/8c62adecf5aacdf0cf1b3e66.html
jar包放置在WEB-INF/lib下和通过build path导入的区别是什么?
通俗的讲是和classLoader有关,对于纯java项目,它不存在WEB-INF目录,所以在引入jar包的时候一般都是通过buildpath直接引入,例如我要引入Spring3X,那么先定义一个user library,然后通过build path引入。
纯java项目使用的本地自己的JRE,那么classLoader在加载jar和class时候是分开的,对于我们自己编写的class,会在APP_HOME/bin下。导入的jar包或者user library的配置信息会出现在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,它也不会出现在.classpath中,这就是问题的关键。这到底是为什么呢???
对于java web项目,它最终不是通过本地的JRE去运行,而是部署到web 服务器,如Tomcat、Weblogic、WebSphere等,这些服务器都实现了自身的类加载器。
以Tomcat典型结果为例,它的目录结构分别对应四个不同的类加载器,关系如下:
common --- CommonClassLoader
server --- CatalinaClassLoader
shared --- SharedClassLoader
webapps --- WebappClassLoader
我们的 web 应用都是部署到 webapps 目录下,而WebappClassLoader加载器专门负责加载 webapps 下所有web项目的 WEB-INF 下的类库和类文件。而我们通过 user library 引入的 jar 包自然不会被 WebappClassLoader 加载器加载,所以才会出现 ClassNotFoundException 。
- 关于java.lang.ClassNotFoundException: org.hibernate.Session 异常的原因分析
- java.lang.ClassNotFoundException: org.hibernate.Session
- java.lang.ClassNotFoundException: org.hibernate.Session问题解决
- java.lang.ClassNotFoundException: org.hibernate.Session 解决办法
- hibernate 异常分析:java.lang.NoClassDefFoundError: org/hibernate/Session
- 关于 java.lang.ClassNotFoundException: org.hibernate.engine.FilterDefinition的问题
- java.lang.NoClassDefFoundError: org/hibernate/Session的异常
- java.lang.NoClassDefFoundError: org/hibernate/Session的异常处理
- Jsp+Hibernate开发中遇到的问题 java.lang.ClassNotFoundException: org.hibernate.Session的解决
- 异常:java.lang.ClassNotFoundException: org.hibernate.engine.FilterDefinition
- 关于java.lang.ClassNotFoundException异常
- java.lang.ClassNotFoundException: org.hibernate.engine.SessionFactoryImplementor
- java.lang.ClassNotFoundException: org.hibernate.engine.FilterDefinition
- java.lang.ClassNotFoundException: org.hibernate.engine.FilterDefinition
- java.lang.ClassNotFoundException: org.hibernate.engine.FilterDefinition
- hibernate中异常:java.lang.ClassNotFoundException: org.hibernate.cache.internal.NoCacheProvider
- 用commons-validator时java.lang.ClassNotFoundException: org.apache.commons.digester.Rule异常原因
- ssh:配置异常:Caused by: java.lang.ClassNotFoundException: org.hibernate.engine.transaction.spi.Transacti
- ZOJ-3633-Alice's present
- SDL 实现五子棋 GUI (二)
- Android开发中的一个小功能 清空搜索框的文字
- 2012 百度实习生笔试(1)
- windows xp 下配置PHP开发环境(apache2.2.22+mysql5.5.27+php5.2.8)
- 关于java.lang.ClassNotFoundException: org.hibernate.Session 异常的原因分析
- MapKit缩放和CAKeyframeAnimation类使用!
- PHP中读取文件的几个方法
- job client与jobStracker
- 2012 百度实习生笔试(2)
- 实现BlockingQueue
- SWT/Jface Shell、对话框的模态化
- MapReduce的Web界面
- 线程的调度有抢占式或者非抢占