我正在尝试构建一个登录注册Web应用程序,该应用程序实质上允许用户在数据库上注册,然后允许他们登录。我已经编写了所有代码,并且试图将程序连接到数据库。这是我收到的错误:
Exception
javax.servlet.ServletException: Servlet execution threw an exception
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause
java.lang.NoClassDefFoundError: java/sql/Driver
我已将所有Postgres,Tomcat和SQL连接器/驱动程序jar添加到我的classpath
和WEB-INF/lib
文件夹中。我不太确定该怎么办。我已经尝试过用另一个类进行测试,并且能够连接到数据库。我也仔细检查了我的连接URL。怎么了?
谢谢!
答案 0 :(得分:0)
我知道这与Servlet无关,但是对于使用SQLite的模块应用程序,我也有同样的问题:
Exception in thread "main" java.lang.NoClassDefFoundError: java/sql/Driver
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1095)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:206)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:759)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassInModuleOrNull(BuiltinClassLoader.java:680)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:605)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:315)
...
Caused by: java.lang.ClassNotFoundException: java.sql.Driver
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 14 more
开始时有些困惑,但是我终于想通了。我只需要将 java.sql 的 requires 语句添加到module-info.java
:
module mymodule {
...
requires sqlite.jdbc;
requires java.sql;
}
(需要sqlite.jdbc 已经存在,为清楚起见在上面添加了它)