HTTP状态 500 - 内部服务器错误

问题遇到的现象和发生背景

修改了很久,在网上找类似问题也没有解决。

问题相关代码,请勿粘贴截图

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

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 redis.clients.jedis.Jedis;

@WebServlet("/add_hesuan")

public class AddHesuanInfo extends HttpServlet {

static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://127.0.0.1:3306/linux_exam";
static final String USER = "root";
static final String PASS = "homelander";

static Connection conn = null;
static Jedis jedis = null;

public void init() throws ServletException {
    try {
        Class.forName(JDBC_DRIVER);
        conn = DriverManager.getConnection(DB_URL, USER, PASS);
        jedis = new Jedis("127.0.0.1");
    } catch (Exception e) {
        throw new ServletException(e);
    }
}

public void destroy() {
    try {
        conn.close();
        jedis.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.setContentType("text/html");
    resp.setCharacterEncoding("UTF-8");

    HesuanInfo info = new HesuanInfo();
    info.name = req.getParameter("name");
    info.number = req.getParameter("number");
    info.result = req.getParameter("result");

    if (info.number == null || info.name == null || info.result == null) {
        throw new ServletException("please input all parameters");
    }

    addHesuan(info);
    jedis.del(info.number);

    PrintWriter out = resp.getWriter();
    out.printf("[add]ok");
    out.close();

}

public void addHesuan(HesuanInfo info) throws ServletException {
    PreparedStatement stmt = null;
    try {
        stmt = conn.prepareStatement("INSERT INTO t_hesuan(number, name, result) VALUES(?, ?, ?)");
        stmt.setString(1, info.number);
        stmt.setString(2, info.name);
        stmt.setString(3, info.result);
        

        int row = stmt.executeUpdate();
        if (row == 0) {
            throw new ServletException("insert error.");
        }
    } catch (Exception e) {
        throw new ServletException(e);
    } finally {
        try {
            stmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

}

运行结果及报错内容

HTTP状态 500 - 内部服务器错误
类型 异常报告

消息 java.sql.SQLException: No suitable driver found for 3306

描述 服务器遇到一个意外的情况,阻止它完成请求。

例外情况

javax.servlet.ServletException: java.sql.SQLException: No suitable driver found for 3306
AddHesuanInfo.init(AddHesuanInfo.java:33)
javax.servlet.GenericServlet.init(GenericServlet.java:158)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:698)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:367)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:639)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:882)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1647)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:748)
根本原因。

java.sql.SQLException: No suitable driver found for 3306
java.sql.DriverManager.getConnection(DriverManager.java:689)
java.sql.DriverManager.getConnection(DriverManager.java:247)
AddHesuanInfo.init(AddHesuanInfo.java:30)
javax.servlet.GenericServlet.init(GenericServlet.java:158)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:698)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:367)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:639)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:882)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1647)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:748)
):注意 主要问题的全部 stack 信息可以在 server logs 里查看

Apache Tomcat/8.5.78

我的解答思路和尝试过的方法

我以为是代码问题或者是编译的问题,有很大可能是编译问题,但是看不出是哪个过程有问题。

我想要达到的结果

不报这个错误

img

你的驱动在哪里 你这jdbc驱动不合适啊
mysql是5.7以后版本吗

驱动包是不是没加上

1、看看你有没有导入数据库的jar 包。没有的导入对应的jar 包
2、com.mysql.cj.jdbc.Driver 这个是mysql 8.0 以上使用的,看看你的mysql数据库版本是不是5.x 的 ,如果是5.x 的使用com.mysql.jdbc.Driver。
你看看是不是这两个地方出错了

根本原因。

java.sql.SQLException: No suitable driver found for 3306

驱动错误

看一下你的数据库jar包,若是5.0的,驱动是com.mysql.jdbc.driver,若是8.0的,驱动为com.mysql.cj.jdbc.driver