Java Servlet上的MySQL错误握手



我最近更换了我的工作计算机,当时我正在测试在Maven上运行的Web应用程序。目前,我在将Servlet连接到MySQL数据库时遇到问题

这是我用来连接它的代码

//Database 
String DB_URL="jdbc:mysql://localhost:3306/adminhub";
//Credentials
String USR = "root";
String PASS = "password";
try {
// Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
//Establish Database Connection
Connection conn = DriverManager.getConnection(DB_URL, USR, PASS);
//SQL Statement Execution
Statement stm = conn.createStatement();
if (comboSrch.equals("Tag")) {
sqlm = "Select * from knowledge where Tag1 like '%" + boxSrch + "%' or Tag2 like '%" + boxSrch +"%';";
} else {
sqlm = "Select * from knowledge where " + comboSrch + " like '%" + boxSrch + "%';";
}
ResultSet mid = stm.executeQuery(sqlm);
while (mid.next()) {
Name = mid.getString("KName");
Path = mid.getString("KPath");
out.println("<a href="" + Path + "">" + Name + "</a><br>");
}
mid.close();
stm.close();
conn.close();
} catch (SQLException se){
se.printStackTrace();
System.out.println("Servlet failed to Load the desired resource");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

这是的结果(我以前没有得到(

java.sql.SQLException: Communication link failure: Bad handshake
Servlet failed to Load the desired resource
at com.mysql.jdbc.MysqlIO.init(Unknown Source)
at com.mysql.jdbc.Connection.connectionInit(Unknown Source)
at com.mysql.jdbc.jdbc2.Connection.connectionInit(Unknown Source)
at com.mysql.jdbc.Driver.connect(Unknown Source)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
at com.company.adm.Knowledge.doPost(Knowledge.java:78)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:844)

我尝试重新启动MySQL服务,重新启动计算机,升级安装。似乎什么都不起作用

请协助,提前感谢!

编辑:我确信Servlet能够找到数据库,但之后失败了

编辑2:这是我的POM文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.company</groupId>
<artifactId>adm</artifactId>
<version>0.5 - Enif</version>
<packaging>war</packaging>
<name>adm</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.source>1.7</maven.compiler.source>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
<version>3.11.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>2.0.14</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webXml>WebContentWEB-INFweb.xml</webXml>
</configuration>
</plugin>
</plugins>
</build>
</project>

正如您所提到的,您在更改您的工作计算机后遇到了问题,这与我的情况类似。我的问题是由JDK、mysql及其连接器的版本引起的。感谢@Kristianmitk,您可能需要在连接字符串中添加enabledTLSProtocols=TLSv1.2配置属性来解决问题。像这样:

jdbc:mysql://<host>:<port>/<dbname>?enabledTLSProtocols=TLSv1.2

有关版本冲突的更多信息,您也可以参考此问题。

最新更新