0

大家好,我用:

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>

这是我的项目的屏幕截图:

在此处输入图像描述

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

4

2 回答 2

0

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)。

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

    永远不要使用小脚本(这里有更好的解释:如何避免 JSP 文件中的 Java 代码?)。明知道他们是邪恶的,那就更不敢知道了!这就像说我知道毒药不好,但无论如何我都会尝尝。学习正确的方法并开始使用 MVC 模式,如StackOverflow Servlets wiki所示。

于 2013-05-21T04:32:08.350 回答
0

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

于 2013-05-20T20:55:46.803 回答