南七灵 2021-08-05 22:53 采纳率: 50%
浏览 52
已结题

Ideal MySQL在servlet里连接报错问题

单独在java程序里是可以和数据库交互的,怎么到了servlet里就报错了?

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.*;

public class Login extends HttpServlet {
    private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
    private static final String DB_URL = "jdbc:mysql://localhost:3306/demo";

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        if(username.isEmpty() || password.isEmpty()){
            System.out.println("用户名或密码不能为空,请重新输入!");
            resp.sendRedirect("/index.jsp");
        }else{//连接数据库对比
            Connection conn = null;
            Statement stmt = null;
            try{
                // 注册 JDBC 驱动
                Class.forName(JDBC_DRIVER);

                // 打开链接
                System.out.println("连接数据库...");
                conn = DriverManager.getConnection(DB_URL,"root","root");
                // 执行查询

                //System.out.println(" 实例化Statement对象...");
                stmt = conn.createStatement();
                String sql;
                sql = "SELECT password FROM user where username = '"+username+"' ";
                ResultSet rs = stmt.executeQuery(sql);

                // 展开结果集数据库
                System.out.println(rs);
                System.out.println(password);
                if(rs.equals(password)){
                    resp.sendRedirect("/success.jsp");
                }
                // 完成后关闭
                rs.close();
                stmt.close();
                conn.close();
            }catch(SQLException se){
                // 处理 JDBC 错误
                resp.sendRedirect("/failed.jsp");
                se.printStackTrace();
            }catch(Exception e){
                // 处理 Class.forName 错误
                resp.sendRedirect("/failed.jsp");
                e.printStackTrace();
            }finally{
                // 关闭资源
                try{
                    if(stmt!=null) stmt.close();
                }catch(SQLException se2){
                }// 什么都不做
                try{
                    if(conn!=null) conn.close();
                }catch(SQLException se){
                    resp.sendRedirect("/failed.jsp");
                    se.printStackTrace();
                }
            }
        }
    }
@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

报错如下:
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1407)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1215)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:332)
    at com.carlos.jdbc.Login.doGet(Login.java:29)
    at com.carlos.jdbc.Login.doPost(Login.java:79)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)

  • 写回答

1条回答 默认 最新

  • 没事干写博客玩 2021-08-06 00:02
    关注

    java.lang.ClassNotFoundException 说明mysql的包没找到,你看看对应版本,这是mysql8的包

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月8日
  • 已采纳回答 9月30日
  • 创建了问题 8月5日

悬赏问题

  • ¥20 iOS绕地区网络检测
  • ¥15 python验证码滑块图像识别
  • ¥15 根据背景及设计要求撰写设计报告
  • ¥15 QT6颜色选择对话框显示不完整
  • ¥20 能提供一下思路或者代码吗
  • ¥15 用twincat控制!
  • ¥15 请问一下这个运行结果是怎么来的
  • ¥15 单通道放大电路的工作原理
  • ¥30 YOLO检测微调结果p为1
  • ¥15 DS18B20内部ADC模数转换器