1

I recently changed my work computer where I was testing my Web Application running on Maven. Currently I'm having issues connecting my Servlet to my MySQL Database

This is the code I'm using to connect to it

//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();
    }

And this is the result (Which I didn't get previously)

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)

I tried restarting my MySQL Service, restarting my computer, upgrading my Installation. Nothing seems to be working

Please assist, thanks in advance!

EDIT: I'm sure the Servlet manages to find the Database but fails afterwards

EDIT2: This is my POM File

<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>WebContent\WEB-INF\web.xml</webXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
GoatMarine
  • 11
  • 3

1 Answers1

1

As you mentioned that you got the problem after you changed your work computer, which is similar to my situation. My problem is caused by the version of JDK, mysql and their connector. Thanks to @Kristianmitk, you may need to add the enabledTLSProtocols=TLSv1.2 configuration property in the connection string to resolve your issue. Like this:

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

you may also refer to this question for more information about version conflict.

Lushang
  • 191
  • 1
  • 4