我正在研究亚马逊Linux的Amazon EC2实例,正好跟踪了this tutorial,但我无法弄清楚如何将Tomcat连接到MySQL。我是怎么做的呢?
我遍历了/usr/share/tomcat8
中的目录,并为每个目录:
mysql-connector-java-5.1.45-bin.jar
获得的Connector / J文件here放在目录中app/index.jsp
javax.servlet.ServletException: javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "java.sql.SQLException: No suitable driver found for jdbc/foo"
第8行的/index.jsp
我在其他Java库中放置了一个Connector / J jar文件的副本,并将其添加到我的类路径中,尽管这种方法明显无效,因为Tomcat处理其类路径。
我已经合理地减少了我的代码,希望我做的其他事情产生了这种现象作为副作用。由于不到50行代码继续产生相同的错误,这可能不是这种情况,但从技术上讲,我还没有排除它。
/usr/share/tomcat8/webapps/app/index.jsp
<!DOCTYPE html>
<%@ page import="java.io.*, java.util.*, java.sql.*, javax.servlet.http.*, javax.servlet.*" @>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<% Class.forName("com.mysql.jdbc.Driver").getInstance(); /* for good measure */ %>
<html>
<body>
<sql:query dataSource="jdbc/foo" var="result">
SELECT name FROM Users;
</sql:query>
<c:forEach var="r" items="${result.rows}">
<c:out value="${r.name}"/><br/>
</c:forEach>
</body>
</html>
/usr/share/tomcat8/webapps/app/META-INF/context.xml
<?xml version="1.0" encoding="utf-8"?>
<Context>
<Resource name="jdbc/foo" auth="Container" type="javax.sql.DataSource" maxTotal="64"
maxIdle="16" maxWaitMillis="10000" username="user" password="password"
driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/foo"/>
</Context>
/usr/share/tomcat8/webapps/app/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true>
<request-character-encoding>UTF-8></request-character-encoding>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<resource-ref>
<description>Database connection</description>
<res-ref-name>jdbc/foo</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
我的数据库在'user'@'localhost' IDENTIFIED BY 'password'
上有一个用户SELECT
和foo.*
特权。数据库foo
有一张表Users(email varchar(127) NOT NULL PRIMARY KEY, name varchar(127) NOT NULL);
我很可能错过了一些愚蠢的东西,因为这是我第一次在我的本地机器之外的Tomcat上做任何事情(顺便说一下,这样做很好)。任何人都可以找到我做错的事吗? (除了我的调试过程本身:我完全清楚这是多么可怕。)
TL / DR:我已经尝试了很多东西,Tomcat仍然无法连接到我的EC2实例上的MySQL。
要清楚,因为我被指示将mysql-connector-java-5.1.45-bin.jar
放在不同的地方或者问我把它放在哪里:我已经尝试将它放在tomcat8
的每个目录中。
请尝试以下方法
选项1:将文件“mysql-connector-java-5.1.4.4-bin.jar”放在tomcat lib文件夹中
选项2:将文件“mysql-connector-java-5.1.4.4-bin.jar”放在应用程序“foo”的lib文件夹中
选项3:将文件“mysql-connector-java-5.1.4.4-bin.jar”放在java类路径中。