簡體   English   中英

嘗試從 servlet 調用 JDBC 時拋出 NullPointerException

[英]NullPointerException is thrown when trying to call JDBC from a servlet

我正在運行我的 servlet RegistrationServlet ,我嘗試創建一個數據庫對象

這是 servlet:

@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。

那么如果我從一個仆人那里做同樣的事情有什么問題呢? 為什么會出現 NullPointerException?

問候

運行 servlet 時,類路徑中缺少 MySQL 驅動程序。 可能需要將包含驅動程序的 JAR 文件添加到 Web 應用程序的 WEB-INF/lib 目錄中。

確保 mysql 驅動程序 jar 位於您的 lib 文件夾中(如果其控制台應用程序則為類路徑)。 嘗試為 mysql 指定端口(如果沒有更改,則為 3306)。

服務器容器的類路徑中缺少 MySQL jar,而在運行獨立主應用程序時它存在。

我在同一行遇到了同樣的問題,但我通過將用於 MySQL 連接的 JAR 添加到項目中解決了這個問題。

之前,它不包含在項目中,因為連接的所有數據都已添加到服務器配置(Payara Server 5)中,因此在服務器上顯示項目時不會發生錯誤。 但是,在 JUnit 中運行它時不會考慮到這一點,因此有必要添加 JAR 以直接從項目而不是從服務器建立連接。

我希望這對那些有同樣問題的人有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM