当前位置: 首页 > 知识库问答 >
问题:

Java Servlet上的MySQL错误握手

危飞文
2023-03-14

我最近更换了我的工作计算机,在那里我测试了在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)

编辑:我确信Servlet设法找到了数据库,但随后失败了

Edit2:这是我的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>WebContent\WEB-INF\web.xml</webXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

共有1个答案

范鸿
2023-03-14

正如你提到的,你在更换工作电脑后得到的问题,这与我的情况类似。我的问题是由JDK、mysql及其连接器的版本引起的。由于@kristianmitk,您可能需要在连接字符串中添加enabledtlsprotocols=tlsv1.2配置属性来解决问题。像这样:

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

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

 类似资料:
  • 笔记: 最初我试图从使用如下代码 代码1: 错误: 在谷歌搜索之后,我发现您已经使用了SSL验证,使用适配器会话可以解决这个问题。但我仍然有错误,请找到下面的代码和错误 代码2: 错误:

  • 我正在go中运行https web服务器。我正在使用angular web应用程序(Chrome浏览器)对其进行测试,该应用程序可以对web服务器进行ajax调用。 如果我不断地点击网络服务器,一切似乎都正常。但每当我让它闲置一段时间并点击web服务器时,来自浏览器的ajax调用都不会得到响应。我几乎总是在服务器日志中看到此日志行。 我可以确认IP地址是我的IP地址。 我像这样启动我的https服

  • 问题内容: 我正在使用和大多数查询。加工。一些查询不起作用。我尝试了Node的每个版本(从0.5 …到(5.6.0),也尝试了(4.0)和(4.1),没有任何帮助。 我试图按性别进行更改,但没有工作。我试图将文件更改为:并没有帮助。 我阅读了这些问题和GitHub,但没有任何帮助。 我可以尝试自己修复它,但是我需要更多信息。超时在哪里,为什么?什么时候?这是什么类型的消息?超时从哪里来? 问题答案

  • 我正在编写一个web应用程序,其中客户端将(JSON)表单数据发布到,服务器也应该使用JSON进行响应。服务器端使用java servlet编写,运行在Tomcat上,客户端使用Angular 7编写。不幸的是,即使在通过HTTP头启用CORS之后,我仍然面临CORS错误。我有什么遗漏吗? 这就是我在客户端遇到的错误:在'http://localhost:8080/mysocial/signIn“

  • 我们有一个应用程序,它将一些xml数据发布到另一个应用程序,并通过ApacheWeb服务器(版本2.2.26)反向代理传输流量。我们观察到一些零星的代理错误(http响应代码500)-删除服务器的SSL握手错误。错误消息显示在apache web服务器错误日志中。 早些时候,我们使用sunOne网络服务器,我们没有注意到这个错误。我怀疑可能是apache网络服务器上的一些缺失配置导致了这个问题。这

  • 我正在尝试使用SSL证书将java客户端与JMX服务器连接。 但是不幸的是,这个连接给出了一个SSL握手错误。当我尝试使用< code >-DJ avax . net . debug = all 标志对此进行调试时,我在java客户端上得到以下错误消息。 2016-07-15T13:29:50.02-0700[APP/0]退出RMI更新清洁-[10.200.0.27:44445,javax.rmi