首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Java .war应用部署到数字海洋Ubuntu

将Java .war应用部署到数字海洋Ubuntu
EN

Stack Overflow用户
提问于 2016-04-03 03:21:21
回答 1查看 1.4K关注 0票数 2

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

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

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

代码语言:javascript
复制
Error instantiating servlet class surveyExchange.my.SignUpServlet
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/UserInfo?useSSL=false.

我的代码是这样的:

代码语言:javascript
复制
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);
}

这一行出现了一个错误:

代码语言:javascript
复制
conn = DriverManager.getConnection(url + dbName, userName, password);

堆栈跟踪:

代码语言:javascript
复制
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)

非常感谢您的耐心!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-03 08:53:35

回答问题的间接方法是:Go with a datasource (但您可能会遇到同样的问题,所以继续)

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

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

我通常做的是通过aptitude install 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连接--但这只是上面的答案之外的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36381276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档