Che cosa causa " Java Runtime Environment (JRE) versione 1.7 non è supportato da questo driver..." in fase di runtime nel mio servlet? [duplicato]


Questa domanda ha già una risposta qui:

Voglio essere in grado di fare clic su un pulsante HTML e farlo chiamare un metodo all'interno di Java. C'è più di un modo per svolgere questo compito.

Vorrei anche vedere dove il gli errori provengono da questo esempio. Non verrà compilato.

Codice Java:

import java.io.IOException;

@WebServlet("/myservlet")
public class MyServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        MyClass myClass = new MyClass();

        if (request.getParameter("button1") != null) {
            myClass.function1();
        } else if (request.getParameter("button2") != null) {
            myClass.function2();
        } else if (request.getParameter("button3") != null) {
            myClass.function3();
        } 
        request.getRequestDispatcher("/WEB-INF/some-result.jsp").forward(request, response);
    }

}

class MyClass {
    void function1() {
        System.out.println("Button 1");
    }

    void function2() {
        System.out.println("Button 2");
    }

    void function3() {
        System.out.println("Button 3");
    }
}

Codice Html:

<html>
<head>
  <title>Test Button</title>
</head>
<body>

<form action="${pageContext.request.contextPath}/myservlet" method="post">
    <input type="submit" name="button1" value="Button 1" />
    <input type="submit" name="button2" value="Button 2" />
    <input type="submit" name="button3" value="Button 3" />
</form>


</body>
</html>

Errore:

May 30, 2014 1:16:54 PM com.microsoft.sqlserver.jdbc.SQLServerConnection <init>
SEVERE: Java Runtime Environment (JRE) version 1.7 is not supported by this driver. Use the sqljdbc4.jar class library, which provides support for JDBC 4.0.
Exception in thread "main" java.lang.UnsupportedOperationException: Java Runtime Environment (JRE) version 1.7 is not supported by this driver. Use the sqljdbc4.jar class library, which provides support for JDBC 4.0.
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.<init>(SQLServerConnection.java:304)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1011)
    at java.sql.DriverManager.getConnection(DriverManager.java:571)
    at java.sql.DriverManager.getConnection(DriverManager.java:215)
    at testpak.DbTest.testQuery(DbTest.java:19)
    at testpak.DbTest.main(DbTest.java:30)

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Che sqljdbc4jar. è nella mia libreria di riferimento. C'è un altro posto che deve essere?

Author: nsfyn55, 2014-05-30

1 answers

In base al tuo screenshot stai facendo riferimento sia a sqljdbc.jar che a sqljdbc4.jar. Si dovrebbe fare riferimento solo uno (in questo caso: sqljdbc4.jar).

Questi file jar contengono le stesse classi di driver (anche se l'implementazione esatta potrebbe essere diversa). Il classloader carica le classi dal primo jar sul classpath e ignora quelle nel secondo poiché ha già caricato una classe con lo stesso nome.

 11
Author: Mark Rotteveel, 2014-05-31 11:14:44