我正在运行我的servlet RegistrationServlet
,我尝试创建一个Database对象
这是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?
此致
答案 0 :(得分:2)
运行servlet时,类路径中缺少MySQL驱动程序。带有驱动程序的JAR文件可能需要添加到webapp的WEB-INF / lib目录中。
答案 1 :(得分:1)
确保mysql驱动程序jar位于lib文件夹中(如果是控制台应用程序,则为classpath)。尝试指定mysql的端口(3306,如果你没有更改它)。
答案 2 :(得分:1)
服务器容器的类路径中缺少MySQL jar,而在运行独立主应用程序时则存在。
答案 3 :(得分:0)
我在同一行中遇到了同样的问题,但是我通过向项目中添加MySQL连接的JAR来解决了这个问题。
之前,它不包含在项目中,因为连接的所有数据都已添加到服务器配置(Payara Server 5)中,正因为如此,在服务器上显示项目时不会发生错误。但是,在JUnit中运行它时,没有考虑到这一点,因此有必要添加JAR,以直接从项目而不是从服务器进行连接。
我希望这对有相同问题的人有用。