抛出Could not initialize class 异常

抛出Could not initialize class 异常

我的相关代码如下,目前只写了添加课程的jsp和servlet还有utils。

AddCourse.java

package com.imooc.coursemanagement;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.imooc.courseutil.DatabaseUtil;


/**
 * Servlet implementation class AddCourse
 */
@WebServlet("/AddCourse")
public class AddCourse extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public AddCourse() {
        super();
    }


    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String course_name = (String) request.getParameter("course_name");
        String orientation = (String) request.getParameter("orientation");
        String course_description = (String) request.getParameter("course_description");
        Date date = new Date();
        Object param = new java.sql.Timestamp(date.getTime());
        Connection conn = null;
        PreparedStatement pstmt = null;
        String sql = "INSERT course() VALUES(null, ?, ?, ?, ?)";
        int num = 0;
        try {
            conn = DatabaseUtil.getConnection();
            pstmt = (PreparedStatement) conn.prepareStatement(sql);
            pstmt.setString(1, course_name);
            pstmt.setString(2, orientation);
            pstmt.setString(3, course_description);
            pstmt.setObject(4, param); 
            num = pstmt.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DatabaseUtil.release(pstmt, conn);
        }
        if (num>0) {
            System.out.println("Added!");
            request.setAttribute("msg", "Added!");
            response.sendRedirect(request.getContextPath()+"/showCourse.jsp");
        }else {
            System.out.println("Failed!");
        }
        
        
    }

}

DatabaseUtil.java

package com.imooc.courseutil;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.sql.Connection;

public class DatabaseUtil {
    private static final ComboPooledDataSource dataSource = new ComboPooledDataSource();
    
    public static Connection getConnection() throws SQLException {
        Connection conn = dataSource.getConnection();
        return conn;
    }
    public static void release(Statement stmt, Connection conn) {
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            stmt = null;
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;
        }
    }
    public static void release(ResultSet rs, Statement stmt, Connection conn) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            rs = null;
        }
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            stmt = null;
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;
        }
    }
}

addCourse.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Add course</title>
</head>
<body>
<p style="text-align:center"><strong>Add course</strong></p>
<form action="/AddCourse/AddCourse" method="POST">
<table>
<tr>
    <td>Course name</td>
    <td><input type="text" name="course_name"></td>
</tr>
<tr>
    <td>Orientation</td>
    <td><input type="text" name="orientation"></td>
</tr>
<tr>
    <td>Course description</td>
    <td><input type="text" name="course_description"></td>
</tr>
<tr>
                    <td colspan="2" style="text-align:center">
                        <input type="submit" value="Add">
                    </td>
                    </tr>
</table>
</form>
</body>
</html>

然后出现错误:

SEVERE: Servlet.service() for servlet [com.imooc.coursemanagement.AddCourse] in context with path [/AddCourse] threw exception [Servlet execution threw an exception] with root cause
java.lang.NoClassDefFoundError: Could not initialize class com.imooc.courseutil.DatabaseUtil
    at com.imooc.coursemanagement.AddCourse.doPost(AddCourse.java:57)

我新建了一个Test.java,用来测试数据库,没有问题,可以正常操作:

package com.imooc.coursemanagement;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;
import com.imooc.courseutil.DatabaseUtil;

public class Test {

    public static void main(String[] args) {
        String course_name = "test1";
        String orientation = "test2";
        String course_description = "test3";
        Date date = new Date();
        Object param = new java.sql.Timestamp(date.getTime());
        Connection conn = null;
        PreparedStatement pstmt = null;
        String sql = "INSERT course() VALUES(null, ?, ?, ?, ?)";
        int num = 0;
        try {
            conn = DatabaseUtil.getConnection();
            pstmt = (PreparedStatement) conn.prepareStatement(sql);
            pstmt.setString(1, course_name);
            pstmt.setString(2, orientation);
            pstmt.setString(3, course_description);
            pstmt.setObject(4, param); 
            num = pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DatabaseUtil.release(pstmt, conn);
        }
        if (num>0) {
            System.out.println("Added!");
            //request.setAttribute("msg", "Added!");
            //response.sendRedirect(request.getContextPath()+"/showCourse.jsp");
        }else {
            System.out.println("Failed!");
        }
        
    }

}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
好帮手慕阿满 2019-05-15 09:29:32

同学你好,报错的doPost的57行是如下处吗?

http://img1.sycdn.imooc.com//climg/5cdb6b370001eb3203490064.jpg

这里是释放资源。建议同学不使用DatabaseUtil的release()方法释放资源,而是手动释放再试试呢。如:

http://img1.sycdn.imooc.com//climg/5cdb6b750001f4f205070427.jpg

祝:学习愉快~

  • 提问者 慕后端4135106 #1
    我重新安装eclipse试过,不行;把utils都放回addCourse的servlet,也不行。但是!最后还是解决了哈哈,lib目录应该建立在WEB-INF目录下!!!辛苦你了
    2019-05-15 17:25:59
好帮手慕阿满 2019-05-14 16:57:26

同学你好,在同学的控制台报错中,发现了如下:

http://img1.sycdn.imooc.com//climg/5cda82610001361907350230.jpg

这个是另一个项目吧?建议同学tomcat中只运行AddCourse项目,其余的项目remove一下,如:

http://img1.sycdn.imooc.com//climg/5cda82a10001f4bb04240276.jpg

另外建议同学在lib文件下引入jar包,而不是直接add Library再试试呢。

祝:学习愉快~

  • 提问者 慕后端4135106 #1
    移除后依旧如此,lib文件下引入jar包,而不是直接add Library是什么意思?我把相关jar粘帖到lib目录,然后右键选build path这样对吗?
    2019-05-14 18:30:30
  • 好帮手慕阿满 回复 提问者 慕后端4135106 #2
    是的,同学移除其他项目后,还报menu和FoodDaoImpl的错误吗?关于后边的lib包下引入jar包,同学理解的不错。祝:学习愉快~
    2019-05-14 19:20:11
  • 提问者 慕后端4135106 回复 好帮手慕阿满 #3
    没有那些,但是仍然是Could not initialize class。包引入的问题,我之前就是这样引入的
    2019-05-14 20:41:27
提问者 慕后端4135106 2019-05-14 16:11:03

控制台日志超出了8000字,我贴这边https://pastebin.com/raw/HR30VK8Y

http://img1.sycdn.imooc.com//climg/5cda77ae0001424a03360630.jpg

好帮手慕阿满 2019-05-14 13:34:30

同学你好,实验同学的代码,没有问题,建议同学重启项目再试试,如果还报错,建议将控制台的报错信息贴一下,另外建议同学将项目结构展开图也贴一下。

祝:学习愉快~

  • 提问者 慕后端4135106 #1
    重启仍然如此,相关资料已上传
    2019-05-14 16:11:59
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师