2016-04-03 81 views
2

我完成了在本地构建Java动态Web应用程序的工作,现在我正试图将它部署在Digital Ocean上的一个液滴上。将Java .war应用程序部署到数字海洋Ubuntu

我在我的服务器上安装了jdk,mysql和tomcat,并且使用从eclipse导出的.war文件部署了我的应用程序。我还将一个mysql-connector-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); 
} 

有在这条线的错误:

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) 

非常感谢您的耐心配合!

+0

它看起来像这样:错误实例化servlet类surveyExchange.my.SignUpServlet java.sql.SQLException:找不到适合jdbc的驱动程序:mysql:// localhost:3306/UserInfo?useSSL = false。 – desperado

+0

再取一个变量driver = URL + dbName;并传递这个参数.getConnection(driver,username,password) –

+1

欢迎来到Stack Overflow!我不确定你的问题的答案是什么,但是你已经做了相当不错的工作,以确保包含所有必要的信息并且格式良好。我相信有人会很快回答。入住愉快! –

回答

0

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

驾驶员应在Tomcat的lib/文件夹(不是在WEB-INF罚款,但不管你请只在一个地方使用)。

检查文件(以及所有目录,关于您用来运行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

是的,我执行'Class.forName(“com.mysql.jdbc。司机“);'它的工作。谢谢! – desperado

+0

@desperado它实际上更好使用'DriverManager.registerDriver(new com.mysql.jdbc.Driver());'。 – Majora320

相关问题