【问题标题】:ClassNotFoundException When running JDBC through java's ServletsClassNotFoundException 当通过 java 的 Servlet 运行 JDBC 时
【发布时间】:2014-09-29 20:28:23
【问题描述】:

我在尝试创建 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中也可以看到:

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

我在网上看了一圈,看到有人建议通过“Java源附件”来“附加源...”,但不知道怎么做...

任何帮助将不胜感激!

【问题讨论】:

    标签: java mysql eclipse servlets jdbc


    【解决方案1】:

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

    【讨论】:

    • 那么……我是不是直接把mysql-connector-java-5.1.28.jar文件拖到WEB-INF/lib目录下?
    • 在您的情况下,您很可能必须添加到 Tomcat lib 目录
    • 这个 lib 目录在哪里?你的意思是:workspace/MyProject/WebContent/WEB-INF/lib/?
    • 应该是tomcatInstallDirectory/lib
    【解决方案2】:

    你必须把mysql-connector-java.jar放到Tomcat目录下的/lib文件夹中

    【讨论】:

      猜你喜欢
      • 2014-09-09
      • 1970-01-01
      • 2013-04-23
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      相关资源
      最近更新 更多