【问题标题】:mySQL Driver class is not being recognised in my Servlet program even after importing the mysql JDBC Connector(driver) API [duplicate]即使在导入 mysql JDBC 连接器(驱动程序)API 之后,我的 Servlet 程序中也无法识别 mySQL 驱动程序类 [重复]
【发布时间】:2018-12-05 13:45:41
【问题描述】:

我是 J2EE 的新手,我正在尝试使用 servlet API 开发一个小型应用程序。我只需要从 mysql 数据库中获取相同的详细信息并将其显示在浏览器上。在我的项目中,我已经导入了 JDBC API(就像我为 servlet api 所做的那样,build-path->Configure External Archive)。但是,如果我尝试执行该项目的 war 文件,我会收到以下错误(我没有收到任何语法错误)。

我收到如下所示的错误

2018 年 6 月 26 日上午 10:57:05 org.apache.catalina.core.StandardWrapperValve 调用 严重:servlet [checkingCredential] 的 Servlet.service() 在路径 [/StudentsApp] 的上下文中引发异常 [Servlet 执行引发异常],根本原因 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1308) 在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1136) 在 com.konman01.studentApp.servlet.CheckCredential.doPost(CheckCredential.java:52) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:661) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:742) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) 在 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803) 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1468) 在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:748)

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

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

import com.mysql.jdbc.Driver;

/*
 * Authentication of the login user
 * The user input will be checked with the database username and password information           
 * If the correct username and password is provided, then the profile 
 * containing the user details will be displayed else the login html       page
 *  will be provided  
*/
public class CheckCredential extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    Connection con = null;
    PreparedStatement pstmt = null;
    ResultSet res = null;
    String oldPassword = null;

    String regNum = req.getParameter("regNo");
    String password = req.getParameter("password");
    int regNum_int = Integer.parseInt(regNum);

    /*
     * JDBC code starts here
     */
    try{
        /*
         * 1. Load the Driver
         */

        java.sql.Driver drivRef = new Driver();
        DriverManager.registerDriver(drivRef);

        /*
         * 2. Get the Connection via Driver
         */
        String dBurl = "jdbc:mysql://localhost:3306/jdbc_db?useSSL=false";
        con = DriverManager.getConnection(dBurl, "root", "root");

        /*
         * Issue SQL query via connection
         */

        String query = " select password from students_info "+
                        " where reg_no = ? ";

        pstmt = con.prepareStatement(query);
        pstmt.setInt(1, regNum_int);
        res = pstmt.executeQuery();

        if(res.next())
        {
            oldPassword = res.getString("password");
        }
        else
        {
            String htmlres = "<html>"+
                                "<body>"+
                                    "<p>There is no records in the database for the given register number</p>"+
                                 "</body>"+
                             "</html>";

            resp.setContentType("text/html");
            PrintWriter out = resp.getWriter();
            out.print(htmlres);

            if (con != null)
            {
                try {
                    con.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(pstmt != null)
            {
                try {
                    pstmt.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(res!=null){
                try {
                    res.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            return;
        }       
}
catch(SQLException e){
    e.printStackTrace();
}
finally{
    if (con != null)
    {
        try {
            con.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    if(pstmt != null)
    {
        try {
            pstmt.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    if(res!=null){
        try {
            res.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
      }

     }

    }
   }

我尝试仅使用 servlet 和 JDBC API 执行一些示例代码,它运行良好。请帮帮我。

下图将显示 API 是如何导入到项目中的:

【问题讨论】:

    标签: servlets jdbc


    【解决方案1】:

    这是导致您的错误的原因:

    java.sql.Driver drivRef = new Driver();
    DriverManager.registerDriver(drivRef);
    

    你不需要实例化这个类。你可以简单地这样称呼它:

    Class.forName("com.mysql.jdbc.Driver");
    

    另外,如果这不起作用,请尝试将 .jar 文件数据库连接器移动到 WEB-INF 内的 lib 文件夹

    【讨论】:

      猜你喜欢
      • 2021-05-18
      • 2014-05-17
      • 2016-09-07
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 2014-07-28
      • 2013-03-26
      • 2011-09-04
      相关资源
      最近更新 更多