![](/img/trans.png)
[英]How to Grant a Java Web App Access to a Digital Ocean Droplet
[英]Deploying Java .war app to digital ocean Ubuntu
我已经完成了在本地构建Java动态Web应用程序的工作,现在我正尝试将其部署在Digital Ocean的Droplet上。
我已经在服务器上安装了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)
非常感谢您的耐心配合!!
回答问题的间接方式: 使用数据源 (但是您可能会遇到相同的问题,因此请继续)
该驱动程序应该在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连接更好-但是这只是上述答案的补充。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.