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

「已注销」 2014-05-09 08:42:12
我写了一个类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中就不行,请问哪位大侠能给点参考意见。
...全文
762 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2014-05-09
  • 打赏
  • 举报
回复
引用 4 楼 defonds 的回复:
tomcat 的 lib 下也有这个 jar 了?
不全有,我先去试试看。
Defonds 2014-05-09
  • 打赏
  • 举报
回复
tomcat 的 lib 下也有这个 jar 了?
「已注销」 2014-05-09
  • 打赏
  • 举报
回复
引用 1 楼 defonds 的回复:
有可能是多个版本的 jar 冲突呢


看起来不像
tony4geek 2014-05-09
  • 打赏
  • 举报
回复
hibernate 少 jar了  java.lang.NoClassDefFoundError: org/hibernate/Session
Defonds 2014-05-09
  • 打赏
  • 举报
回复
有可能是多个版本的 jar 冲突呢
「已注销」 2014-05-09
  • 打赏
  • 举报
回复
解决了。不用把jar加到lib。只需把Hibernate3版本改成4版本就行,可能是版本太低。ps:我jdk是1.7的

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧