将Java.war应用程序部署到digital ocean Ubuntu

将Java.war应用程序部署到digital ocean Ubuntu,java,mysql,eclipse,tomcat,Java,Mysql,Eclipse,Tomcat,我在本地完成了java动态web应用程序的构建,现在我正试图将其部署到数字海洋上的一个小平台上 我已经在我的服务器上安装了jdk、mysql和tomcat,并且使用从eclipse导出的.war文件部署了我的应用程序。我还将mysql连接器java文件复制到/opt/tomcat/lib文件夹 但当我在服务器上打开应用程序时,出现了如下错误: Error instantiating servlet class surveyExchange.my.SignUpServlet java.sql.SQ

我在本地完成了java动态web应用程序的构建,现在我正试图将其部署到数字海洋上的一个小平台上

我已经在我的服务器上安装了jdk、mysql和tomcat,并且使用从eclipse导出的.war文件部署了我的应用程序。我还将mysql连接器java文件复制到/opt/tomcat/lib文件夹

但当我在服务器上打开应用程序时,出现了如下错误:

Error instantiating servlet class surveyExchange.my.SignUpServlet
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/UserInfo?useSSL=false.
static String url = "jdbc:mysql://localhost:3306/";
static String dbName = "UserInfo?useSSL=false";
static String driver = "com.mysql.jdbc.Driver";
static String userName = "root";
static String password = "******";
static Connection conn = null;

private static final long serialVersionUID = 1L;

/**
 * @throws SQLException 
 * @see HttpServlet#HttpServlet()
 */
public SignUpServlet() throws SQLException {
    super();
    conn = DriverManager.getConnection(url + dbName, userName, password);
}
我的代码如下所示:

Error instantiating servlet class surveyExchange.my.SignUpServlet
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/UserInfo?useSSL=false.
static String url = "jdbc:mysql://localhost:3306/";
static String dbName = "UserInfo?useSSL=false";
static String driver = "com.mysql.jdbc.Driver";
static String userName = "root";
static String password = "******";
static Connection conn = null;

private static final long serialVersionUID = 1L;

/**
 * @throws SQLException 
 * @see HttpServlet#HttpServlet()
 */
public SignUpServlet() throws SQLException {
    super();
    conn = DriverManager.getConnection(url + dbName, userName, password);
}
这一行有一个错误:

conn = DriverManager.getConnection(url + dbName, userName, password);
堆栈跟踪:

Exception
javax.servlet.ServletException: Error instantiating servlet class surveyExchange.my.SignUpServlet
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:745)

Root Cause:
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/UserInfo?useSSL=false
    java.sql.DriverManager.getConnection(DriverManager.java:596)
    java.sql.DriverManager.getConnection(DriverManager.java:215)
    surveyExchange.my.SignUpServlet.<init>(SignUpServlet.java:34)
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    java.lang.Class.newInstance(Class.java:383)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:745)
异常
javax.servlet.ServletException:实例化servlet类surveyExchange.my.SignUpServlet时出错
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
run(Thread.java:745)
根本原因:
java.sql.SQLException:未找到适合jdbc的驱动程序:mysql://localhost:3306/UserInfo?useSSL=false
java.sql.DriverManager.getConnection(DriverManager.java:596)
java.sql.DriverManager.getConnection(DriverManager.java:215)
surveyExchange.my.SignUpServlet。(SignUpServlet.java:34)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
newInstance(Constructor.java:526)
java.lang.Class.newInstance(Class.java:383)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
run(Thread.java:745)

非常感谢您的耐心

回答问题的间接方式:(但你可能会遇到同样的问题,所以继续)

该驱动程序在tomcat的
lib/
文件夹中应该很好(不在WEB-INF中,但无论您做什么,请只在一个位置使用)

检查文件的权限(以及所有目录,与运行tomcat的用户相关),并确保连接器实际上是一个jar文件,而不是只包含jar的压缩下载文件

我通常要做的是
aptitude安装libmysql java
以确保我的版本与本地mysql匹配,然后
ln-s/usr/share/java/mysql-connector-java.jar/opt/tomcat/lib/

在尝试连接之前要尝试的另一个选项(每个应用程序运行一次就足够了):执行
Class.forName(“com.mysql.jdbc.Driver”)


另外,我认为最好将连接分配移动到servlet的
init()
方法(并在
destroy()中清理)甚至可以使用JNDI连接,但这只是上述答案的补充。

看起来是这样的:实例化servlet类surveyExchange.my.SignUpServlet java.sql.SQLException时出错:找不到适合jdbc的驱动程序:mysql://localhost:3306/UserInfo?useSSL=false.Take 还有一个变量驱动程序=URL+dbName;并传递此参数。getConnection(驱动程序、用户名、密码)欢迎使用堆栈溢出!我不确定你的问题的答案是什么,但你做得很好,确保所有必要的信息都包括在内,并且格式良好。我相信很快会有人回答的。祝您入住愉快!谢谢大家!!我已经更新了我的堆栈跟踪!我已经将mysql连接器jar文件放在web inf/lib文件夹中,但错误消息和堆栈跟踪仍然相同……是的,我执行了
Class.forName(“com.mysql.jdbc.Driver”)成功了。谢谢大家!@desperado实际上最好使用
DriverManager.registerDriver(新的com.mysql.jdbc.Driver())