ClassNotFoundException通过java的Servlet运行JDBC时

时间:2014-08-06 19:06:42

标签: java mysql eclipse servlets jdbc

我在尝试创建一个MysqlDataSource对象时遇到这个奇怪的异常(或者至少我认为这是问题的根源)。

首先让我先描述一下我到目前为止所做的事情:
我使用Tomcat7作为容器,Eclipse作为IDE,以创建一个JSP登录表单,它接受用户名和密码,然后调用名为“LoginController”的Servlet。每当您单击“登录”按钮时,LoginController将根据MySql数据库验证输入(用户名和密码)。
好吧,至少这是计划......

一切似乎都没问题,直到它到达需要实例化com.mysql.jdbc.jdbc2.optional.MysqlDataSource对象的部分。
我得到了这个令人讨厌的错误:

HTTP Status 500 - Servlet execution threw an exception

type Exception report

message Servlet execution threw an exception

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause

java.lang.NoClassDefFoundError: com/mysql/jdbc/jdbc2/optional/MysqlDataSource
    model.Authenticator.authenticateLogin(Authenticator.java:13)
    controller.LoginController.doPost(LoginController.java:52)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause

java.lang.ClassNotFoundException: com.mysql.jdbc.jdbc2.optional.MysqlDataSource
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
    model.Authenticator.authenticateLogin(Authenticator.java:13)
    controller.LoginController.doPost(LoginController.java:52)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.55 logs.

现在,我明白服务器“找不到MysqlDataSource”,我只是不明白为什么,因为我 DID 通过“项目属性”将所需的jar文件添加到项目中 - > Java Build Path-> Libraries-> Add External Jar ...“,你也可以看到它在Project Explorer中显示它:

enter image description here

更令人惊讶的是,当我打开一个常规的Java应用程序项目(而不是Dynamic Web Project)时,我能够连接到Mysql数据库并运行查询而没有任何问题。
它只是与Tomcat一起工作......

我在网上看了一下,看到有人建议通过“Java Source Attachment”来“附加源代码......”,但无法弄清楚如何做到这一点......

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:4)

当您在依赖项中添加文件作为外部jar时,在构建应用程序时它不会包含在war文件中。您需要将jar复制到项目中的WEB-INF / lib目录或将其放在Tomcat lib目录中

答案 1 :(得分:0)

您必须将mysql-connector-java.jar放入Tomcat目录中的/ lib文件夹