JSP无法连接到tomcat7上的mysql数据库

Posted

技术标签:

【中文标题】JSP无法连接到tomcat7上的mysql数据库【英文标题】:JSP not able to connect to mysql database on tomcat7 【发布时间】:2012-04-09 08:44:35 【问题描述】:

您好,我是 jsp 新手,正在尝试显示 mysql db 中的一些数据。为此,我在 tomcat 7 服务器上安装了 JDK1.7、MySQL Server 5.5、mysql-connector-java-5.1.19-bin.jar 作为连接器。我在 %CATALINA_HOME%webapps/ROOT/ws/ 文件夹中创建了一个文件,即带有代码的 index.jsp

<%@ page import="java.sql.*" %>
<%
String connectionURL = "jdbc:mysql://localhost:test?user=root;password=sumant";
Connection connection = null;
Statement statement = null;
ResultSet rs = null;
%>


<html><body>


<%
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
connection = DriverManager.getConnection(connectionURL, "", "");
statement = connection.createStatement();
rs = statement.executeQuery("SELECT name FROM store");

while (rs.next()) 
out.println(rs.getString("name")+"<br>");


rs.close();
%>


</body></html>

在调用 url:http://localhost:8080/ws/index.jsp 我得到了

HTTP Status 500 -

type Exception report

message

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

exception

org.apache.jasper.JasperException: An exception occurred processing JSP page /ws/index.jsp at line 14

11: 
12: 
13: <%
14: Class.forName("org.gjt.mm.mysql.Driver").newInstance();
15: connection = DriverManager.getConnection(connectionURL, "", "");
16: statement = connection.createStatement();
17: rs = statement.executeQuery("SELECT name FROM store");


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:567)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:456)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause

javax.servlet.ServletException: java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:911)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:840)
    org.apache.jsp.ws.index_jsp._jspService(index_jsp.java:98)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause

java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
    org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:126)
    org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:63)
    java.lang.Class.forName0(Native Method)
    java.lang.Class.forName(Unknown Source)
    org.apache.jsp.ws.index_jsp._jspService(index_jsp.java:78)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

现在我不明白这里有什么问题。请帮我连接到mysql数据库。 谢谢。

【问题讨论】:

【参考方案1】:

使用com.mysql.jdbc.Driver 类(所谓的JDBC 驱动程序)而不是org.gjt.mm.mysql.Driver 进行连接。任何第三方 API 都需要添加到类路径中才能使用它。所以,这个 JAR 需要在 Tomcat 中可见。因此,我建议将mysql-connector-java-5.1.19-bin.jar 放置在您项目的/WEB-INF/lib 目录的物理位置,在您的情况下为 ws

在早些时候,如果 jar 不在物理位置,我已经体验过ClassNotFoundException。然后重新启动Tomcat应该可以工作了。

【讨论】:

【参考方案2】:

将mysql_connector/j驱动jar文件放到类路径中。然后使用连接

Class.forName("com.mysql.jdbc.Driver");

您的连接 url 也应该有 mysql 端口,即 3306

String connectionURL = "jdbc:mysql://localhost:3306/test?user=root;password=sumant";

【讨论】:

仍然无法正常工作。我已经从dev.mysql.com/downloads/connector/j 下载了连接器,Driver.class 在 jar 文件的 org\gjt\mm\mysql 目录中。 你为什么要把它放在那个目录里?试着把它放在lib里

以上是关于JSP无法连接到tomcat7上的mysql数据库的主要内容,如果未能解决你的问题,请参考以下文章

无法使用php连接错误连接到mysql:无法连接到'localhost'(10061)上的MySQL服务器[重复]

Django docker 容器无法连接到 mysql 容器,出现错误“无法连接到 'db' (111) 上的 MySQL 服务器”)

Rails 开发 - 无法连接到“localhost”上的 MySQL 服务器 (10061)

服务器容器无法连接到网络上的 MySQL 容器

为啥 Ubuntu 14.04 上的 mod_jk 无法连接到 tomcat

在 Mac 上无法连接到“127.0.0.1”(61)上的 MySQL 服务器