【问题标题】:Work with database using Hibernate from JSP使用 JSP 中的 Hibernate 处理数据库
【发布时间】:2013-05-20 18:01:15
【问题描述】:

嗨,大家好, 我用:

Java EE 6
Tomcat 7
Hibernate 4.1.10.Final
Mysql-connector 5.1.10
Mysql 5.6.10

这是我第一个使用 Hibernate 的 Web 应用程序。我想使用 Hibernate 将字符串值添加到我的数据库中。但是,从 Tomcat 得到这样的错误:

type Exception report

message An exception occurred processing JSP page /doPayment.jsp at line 73

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: An exception occurred processing JSP page /doPayment.jsp at line 73

70: //            hiberUtil.saveDB(read);
71:             Transaction transaction = new Transaction();
72:             transaction.setTransaction(read);
73:             Factory.getInstance().getTransactionDAO().addTransaction(transaction);
74: 
75:             List<Transaction> transactions = Factory.getInstance().getTransactionDAO().getAllTransactions();
76:             System.out.println("========Все трансакции=========");


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
root cause

javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:912)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:841)
    org.apache.jsp.doPayment_jsp._jspService(doPayment_jsp.java:167)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
root cause

java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration
    us.test.HiberUtil.<clinit>(HiberUtil.java:26)
    us.test.TransactionDAOImpl.addTransaction(TransactionDAOImpl.java:21)
    org.apache.jsp.doPayment_jsp._jspService(doPayment_jsp.java:138)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
root cause

java.lang.ClassNotFoundException: org.hibernate.cfg.Configuration
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1713)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1558)
    us.test.HiberUtil.<clinit>(HiberUtil.java:26)
    us.test.TransactionDAOImpl.addTransaction(TransactionDAOImpl.java:21)
    org.apache.jsp.doPayment_jsp._jspService(doPayment_jsp.java:138)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

这个错误的根源是什么?

这是我的 JSP 文件:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title></title>
</head>
<body>


<%

    Token tk = new Token();
    String read;
    response.setContentType("text/html");
    String payerid = request.getParameter("PayerID");
    System.out.println(" Raw Token in DoPayment " + tk.raw_token);

    try {
        System.out.println("Sending form");
        URL url = new URL(tk.APIEndpoint);
        HttpURLConnection hConnection = (HttpURLConnection) url.openConnection();
        HttpURLConnection.setFollowRedirects(true);
        hConnection.setDoOutput(true);
        hConnection.setRequestMethod("POST");
        String token = request.getParameter("TOKEN");
        System.out.println("Token in HttpURLConnection" + token);

        PrintStream ps = new PrintStream(hConnection.getOutputStream());
        hConnection.connect();
        ps.print("USER=my_user&PWD=my_pwd&" +
                "SIGNATURE=my_signature&" +
                "VERSION=98.0&PAYMENTREQUEST_0_PAYMENTACTION=Sale&PAYMENTREQUEST_0_AMT=1.00&" +
                "PaymentActionSpecified=true&" +
                "PAYERID="+payerid+"&TOKEN=" + request.getParameter("token").replaceAll("-", "%2d") + "&" +
                "METHOD=DoExpressCheckoutPayment");
        ps.close();

        System.out.println("Form sent");
        if(HttpURLConnection.HTTP_OK == hConnection.getResponseCode()){
            System.out.println(hConnection.getContentType());
            InputStream is = hConnection.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            StringBuilder sb = new StringBuilder();
            BufferedReader br = new BufferedReader(isr);
            read = br.readLine();

            while(read != null){
                sb.append(read);
                read = br.readLine();

            }

//            Save String to Database

            Transaction transaction = new Transaction();
            transaction.setTransaction(read);
            Factory.getInstance().getTransactionDAO().addTransaction(transaction);

            List<Transaction> transactions = Factory.getInstance().getTransactionDAO().getAllTransactions();
            System.out.println("========All transactions=========");
            for(int i = 0; i < transactions.size(); ++i) {
                System.out.println("Transaction : " + transactions.get(i).getTransaction());
                System.out.println("=============================");
            }
            System.out.println(sb.toString());

            hConnection.disconnect();
            System.out.println("Connection closed.");
        }

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


%>
</body>
</html>

这是我的项目截图:

附:请不要告诉我“在 JSP 中使用 scriplets 是个坏主意” :) 我理解。尝试从一开始就了解它的工作原理,然后改进代码。

【问题讨论】:

  • 不是一个直接的答案,但 Tomcat 从来没有,它不是 Java EE,只是一个 Servlet 容器。真正的 Java EE 应用服务器是 JBoss(建立在 Tomcat 之上)、GlassFish、IBM WebSphere、Oracle WebLogic 等......

标签: hibernate jsp tomcat7


【解决方案1】:

java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration

这意味着您的项目中缺少库。在 Java Web 应用程序中,第三方库必须进入 WEB-INF/lib 文件夹。如果此文件夹不存在,请手动创建它并将您的 jar 放在那里。完成此操作后,重新构建并重新部署您的应用程序。


与您的主要问题没有直接关系:

  • Tomcat 从来没有,它也不是 Java EE,只是一个 Servlet 容器。一些真正的 Java EE 应用服务器是 JBoss(建立在 Tomcat 之上)、GlassFish、IBM WebSphere、Oracle WebLogic。只是让您知道,还有TomEE,另一个真正的基于 Tomcat 的 Java EE 6 应用服务器(但同样,它不是 Tomcat)。

  • 附:请不要告诉我“在 JSP 中使用 scriplets 是个坏主意” :) 我理解。尝试从一开始就了解它的工作原理,然后改进代码。

    从不使用小脚本(这里有更好的解释:How to avoid Java code in JSP files?)。明知道他们是邪恶的,那就更不敢知道了!这就像说我知道毒药不好,但无论如何我都会尝一尝。学习正确的方法并开始使用 MVC 模式,如StackOverflow Servlets wiki 所示。

【讨论】:

    【解决方案2】:

    您的错误消息确实是 java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration,这意味着 Hibernate jar 文件不在您的应用程序类路径中,将它们放在正确的位置,您的代码应该继续。

    【讨论】:

      猜你喜欢
      • 2016-05-17
      • 2010-12-12
      • 2015-03-09
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 2011-07-06
      相关资源
      最近更新 更多