2016-11-12 3 views
-3

У меня есть код, как показано ниже, который работал прекрасно, когда я запустил его в качестве приложения на Java:JDBC getConnection не работает на сервере Tomcat. Но он работает как приложение Java

package com.LearnersLingoo.WebContent; 

// Рассмотрит всю необходимую импорта позаботились

public class VerifyUser { 

    public VerifyUser(){ 

    } 
    boolean userExist(String userName, String userPassword){ 
     return true; 
    } 

    public static void main(String[] args) throws SQLException { 
     Connection myConn = null; 
     Statement myStmt = null; 
     ResultSet myRes = null; 

     try{ 
      myConn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "student", null); 
      System.out.println("Connection Successful"); 

      myStmt = myConn.createStatement(); 

      int rowsAffected = myStmt.executeUpdate("insert into learners" + 
             "(ID, userName, FirstName, LastName, Password)" + 
             "values" + 
             "(11001, 'Test', 'testUser', 'UserLastN', 'password')"); 

      System.out.println("Rows inserted: " + rowsAffected); 
     } 
     catch (Exception e){ 
     e.printStackTrace();  
     } 
    } 
} 

сообщение консоли, как показано ниже:

Connection Successful 
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '11001' for key 'PRIMARY' 

Здесь в любом случае пользователь уже присутствует, так что по крайней мере соединение успешно.

Когда у меня есть подобный код, выполняемый как сервлет я получаю

Connnnection not successfuljava.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/test 

Я прошел через другие подобные вопросы по этой теме, который предложил мне добавить Class.forName (com.mysql.jdbc.driver) Но это не помогло

@WebServlet 
public class HomePage extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
    private Connection connection; 
    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public HomePage() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    public void init(){ 
     try { 
      // Class.forName("com.mysql.jdbc.Driver"); 
      connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "student", null); 
      System.out.println("Connection Successful"); 

     } catch (SQLException e) { 
      System.out.println("Connnnection not successful"); 
      e.printStackTrace(); 
     } 

    } 

Пожалуйста, помогите мне о том, как добавить JDBC банку на сервере Tomcat. Я запускаю сервер Tomcat для своего веб-приложения в Eclipse, установленном на Mac.

Обновлено полный трассировки стека:

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/test 
    at java.sql.DriverManager.getConnection(DriverManager.java:689) 
    at java.sql.DriverManager.getConnection(DriverManager.java:247) 
    at com.LearnersLingoo.WebContent.HomePage.init(HomePage.java:37) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:158) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1183) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1099) 
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:779) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:133) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
Connnnection not successful 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784) 
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) 
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
+1

Вам необходимо добавить JDBC-файл JAR в ваш файл WAR. –

+0

Я могу решить эту проблему, выполнив следующее: я добавил файл jar mySQL JDBC на Tomcat Server, используя Tomcat Server «Open Launch Configuration» -> ClassPath. Это решило проблему. Не могли бы вы рассказать мне, правильно ли это решение проблемы? Таким образом, в общей сложности я добавил драйвер JDBC в двух местах. 1) К классу классов веб-приложения и 2) к пути класса Tomcat. –

ответ

0

Я могу решить эту проблему, выполнив следующие действия: Я добавил файл Jar JDBC MySQL на Tomcat Server, используя Tomcat Server «Open Launch Configuration» -> ClassPath. Это решило проблему. Не могли бы вы рассказать мне, является ли это правильным способом решения проблемы? Итак, я добавил драйвер JDBC в двух местах. 1) Для того, чтобы веб-приложения классам 2) на сервер классам Tomcat

Вам не нужно, чтобы добавить JAR в обоих местах, лучшая практика, чтобы сделать его доступным путь к классам соответствующего веб-приложения (т.е. WEB-INF/lib).

Кроме того, вместо того, чтобы добавлять его вручную, убедитесь, что ваш инструмент сборки (Maven, Gradle и т. Д.) Упаковывает все необходимые вам зависимости в папку проекта lib. Таким образом, при развертывании проекта на сервере JAR будет доступен в соответствующей папке lib.

+0

Большое вам спасибо. Я собирался вручную добавить зависимости, и ваш ответ объяснил мне, как использовать инструменты построения. Я попытаюсь сделать это, используя Maven. –

0

Это что-то с ($ CATALINA_HOME/Lib) Как я не настроенную переменную окружения $ CATALINA_HOME. Я должен добавить драйвер jdbc к пути класса сервера, что я запускаю свой локальный код, который является веб-контейнером Tomcat.

Итак, добавьте файл jar на mySQL JDBC на Tomcat Server, используя Tomcat Server «Open Launch Configuration» -> ClassPath. Это решило проблему.

Итак, я добавил драйвер JDBC в двух местах. 1) К классу классов веб-приложения и 2) к пути класса сервера Tomcat

Фактически добавление драйвера к пути класса веб-приложения не требуется. Поскольку это уже взято из первого класса класса сервера.

Смежные вопросы