[英]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.