关于javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/hibernate

时间:2023-01-19 21:55:14
我写了一个类ExportDB,作用是根据映射文件在数据库中删表或建表。
package com.fhe.db;

import java.io.File;

import org.hibernate.*;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test;

import com.fhe.util.HibernateUtil;
public class ExportDB {

Session s = HibernateUtil.getSession();
Configuration cfg = null;
Transaction t = s.beginTransaction();
/*
 * 根据实体类与映射文件建表
 */
@Test
public void createTable() {
// 默认读取hibernate.cfg.xml文件
cfg = new Configuration().configure(new File("src/hibernate.cfg.xml"));
// 生成并输出sql到文件(当前目录)和数据库
SchemaExport export = new SchemaExport(cfg);
try {
t.begin();// 事务开始
// 第一个为True就是把DDL语句输出到控制台,第二个为True就是根据持久类和映射文件先执行删除再执行创建操作
export.setFormat(true).setOutputFile("D:\\sql.sql")
.create(false, false);
} catch (Exception e) {
System.out.print("出错啦1");
e.printStackTrace();
}
try {
t.commit();// 提交事务
s.close();// 关闭连接
} catch (Exception e2) {
e2.printStackTrace();
}
}
/*
 * 删表
 */
public void dropTable(){
// 默认读取hibernate.cfg.xml文件
cfg = new Configuration().configure(new File("src/hibernate.cfg.xml"));
// 生成并输出sql到文件(当前目录)和数据库
SchemaExport export = new SchemaExport(cfg);
try {
t.begin();// 事务开始
// 第一个为True就是把DDL语句输出到控制台,第二个为True就是根据持久类和映射文件执行删除数据库架构操作
export.drop(false, true);
} catch (Exception e3) {
e3.printStackTrace();
}
try {
t.commit();// 提交事务
s.close();// 关闭连接
} catch (Exception e4) {
e4.printStackTrace();
}

}
}

接下来写一个main方法调用这个类
public static void main(String[] args) {
// TODO Auto-generated method stub
ExportDB ed = new ExportDB();
ed.dropTable();
}

是调用成功的了。
但是我在一个jsp页面中调用之:

<jsp:useBean id="ed2" class="com.fhe.db.ExportDB"></jsp:useBean>
<%ed2.createTable(); %>

则一直报错:

org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/hibernate/Session
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause

javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/hibernate/Session
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:905)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:834)
org.apache.jsp.dropTable_jsp._jspService(dropTable_jsp.java:127)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

hibernate3.jar都是加进lib的了。关键是在应用程序就能调用而在jsp中就不行,请问哪位大侠能给点参考意见。

6 个解决方案

#1


有可能是多个版本的 jar 冲突呢

#2


  hibernate  少  jar了

 java.lang.NoClassDefFoundError: org/hibernate/Session

#3


引用 1 楼 defonds 的回复:
有可能是多个版本的 jar 冲突呢

关于javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/hibernate
看起来不像

#4


tomcat 的 lib 下也有这个 jar 了?

#5


引用 4 楼 defonds 的回复:
tomcat 的 lib 下也有这个 jar 了?

不全有,我先去试试看。

#6


解决了。不用把jar加到lib。只需把Hibernate3版本改成4版本就行,可能是版本太低。ps:我jdk是1.7的

#1


有可能是多个版本的 jar 冲突呢

#2


  hibernate  少  jar了

 java.lang.NoClassDefFoundError: org/hibernate/Session

#3


引用 1 楼 defonds 的回复:
有可能是多个版本的 jar 冲突呢

关于javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/hibernate
看起来不像

#4


tomcat 的 lib 下也有这个 jar 了?

#5


引用 4 楼 defonds 的回复:
tomcat 的 lib 下也有这个 jar 了?

不全有,我先去试试看。

#6


解决了。不用把jar加到lib。只需把Hibernate3版本改成4版本就行,可能是版本太低。ps:我jdk是1.7的