1

我正在运行我的 servlet RegistrationServlet,并尝试创建一个 Database 对象

这是小服务程序:

@WebServlet("/register")
public class RegistrationServlet extends HttpServlet 
{
    private static final long serialVersionUID = 1L;

    @Override

    public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException 
    {
        // create a new connection to mysql database  , with this we put the new client in the database 

        Database myDabatase = null;

        try {
            myDabatase = new Database();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }  // create a new database 

        myDabatase.createDatabaseAndTables();  // create the tables of the database


        HttpSession session = request.getSession();
        synchronized(session) 
        {


              boolean returnValue = myDabatase.addNewClient("david", "cole", "jamie", "123456789", "johnny", "blabla");     

          if (returnValue == true)  // client was added 
          {
              String addressPath = "/WEB-INF/results/show-name.jsp";
              RequestDispatcher dispatcher = request.getRequestDispatcher(addressPath);
              dispatcher.forward(request, response);
          }

          else if (returnValue == false)  // client was not added becuase he's already registered 
          {

          }


        }
    }

}

这是完整的课程:

但是当我在我的 servlet 中执行该行时:

boolean returnValue = myDabatase.addNewClient("david", "cole", "jamie", "123456789", "johnny", "blabla");

我得到一个 NullPointerException 说:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at db.Database.<init>(Database.java:18)
    at servlets.RegistrationServlet.doGet(RegistrationServlet.java:28)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

这导致我上线:

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

Database类的构造函数中,正如您在跟踪中看到的那样:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

但是,当我执行与主程序相同的程序时:

public class Main {

    public static void main(String [ ] args) throws Exception
    {

        Database myConnection = new Database();
        myConnection.createDatabaseAndTables();
        boolean returnValue = myConnection.addNewClient("david", "cole", "jamie", "123456789", "johnny", "blabla");

    }

}

一切都很好,我没有得到 NullPointerException 。

那么如果我从一个 servelt 做同样的事情有什么问题呢?为什么 NullPointerException ?

问候

4

4 回答 4

2

运行 servlet 时,类路径中缺少 MySQL 驱动程序。可能需要将带有驱动程序的 JAR 文件添加到 webapp 的 WEB-INF/lib 目录中。

于 2012-08-05T21:48:11.670 回答
1

确保 mysql 驱动程序 jar 位于您的 lib 文件夹中(或类路径,如果它的控制台应用程序)。尝试指定 mysql 的端口(如果没有更改,则为 3306)。

于 2012-08-05T21:42:54.320 回答
1

MySQL jar 从您的服务器容器的类路径中丢失,而当您运行独立的主应用程序时它存在。

于 2012-08-05T21:45:06.563 回答
0

我在同一行中遇到了同样的问题,但我通过将用于 MySQL 连接的 JAR 添加到项目中来解决它。

之前,它没有包含在项目中,因为连接的所有数据都已添加到服务器配置(Payara Server 5)中,因此在服务器上显示项目时不会发生错误。但是,在 JUnit 中运行它时没有考虑到这一点,因此需要添加 JAR 以直接从项目而不是从服务器建立连接。

我希望这对那些有同样问题的人有用。

于 2020-11-26T01:38:37.407 回答