В приложении у меня есть доступ к драйверу JDBC (исключение java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver)

То же приложение сервлет проекта не работает, но метод "hello world", в проекте одно и тоже да. Вот картинка проекта.

В приложении у меня есть доступ к драйверу JDBC (исключение java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver)

Версии:

Intellij IDEA - 2018,2

Версия драйвера mySQL: 8.0.11, драйвер com.mysql.cj.jdbc.Driver

сервлет9.0.81

В коде:

Class.forName(dbDriver).newInstance();
dbConnection = DriverManager.getConnection(connectionUrl, userName, password);

Исключение:

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver ...

КСТАТИ:

Такое же исключение я получаю также без зависимости mysql в PON.xml

Итак, это проблема, или я что-то упустил. Спасибо

ОБНОВИТЬВ приложении у меня есть доступ к драйверу JDBC (исключение java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver)

РЕШЕНО: Нам нужно добавить библиотеку в Artifact.

@JoopEggen В веб-приложениях, когда драйвер используется во время войны, Class.forName все еще очень необходим. DriverManager автоматически загружает драйверы только из исходного (системного) пути к классам, а не из контекстных путей. Однако этого обычно избегают, используя источники данных вместо (напрямую) использования DriverManager. Либо источник данных имеет прямой доступ к драйверу, либо его конфигурация все равно требует указать имя класса драйвера.

Mark Rotteveel 07.08.2018 15:09

@MarkRotteveel да, я слишком много занимаюсь программированием для настольных компьютеров.

Joop Eggen 07.08.2018 15:12
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
222
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Убедитесь, что все необходимые jar-файлы также включены в Конфигурация артефакта, который вы развертываете на сервере приложений.

Спасибо, но из приложения "hello world" из того же проекта, которое работает нормально. Но в приложении Servlet нет.

Ashot Karakhanyan 06.08.2018 00:39

Да, зависимости модулей могут не включаться в артефакт автоматически, проверьте, какие библиотеки развернуты с сервлетом.

CrazyCoder 06.08.2018 03:34

Этого мало? (добавлено фото Артефактов)

Ashot Karakhanyan 06.08.2018 07:30

Изображение артефактов ясно показывает, что вы не добавляли библиотеки в каталог WEB-INF\lib артефакта, поскольку они показаны в Доступных элементах. Доступен означает, что это библиотеки, которые еще не добавлены в артефакт.

CrazyCoder 06.08.2018 08:26

Спасибо, теперь работает, но я подумал, что достаточно после добавления в POM.

Ashot Karakhanyan 06.08.2018 16:04

@AshotKarakhanyan Это зависит от того, используете ли вы Maven для генерации WAR или нет. Похоже, вы используете IntelliJ для генерации WAR, а не Maven.

Mark Rotteveel 07.08.2018 15:12

@MarkRottevee Я делаю следующий шаг к веб-проекту: l File-> New-> Project-> выберите Maven-> щелкните правой кнопкой мыши-> Add Framework Support-> Затем выберите «Web App ...» -> затем добавьте POM. xml добавить зависимости, которые используют, и после этого я «вручную» добавлю эти jar-файлы в Артефакты.

Ashot Karakhanyan 07.08.2018 16:33

Да, но на снимке экрана показано, что вы не используете Maven для генерации WAR, вместо этого вы используете внутреннюю функцию IntelliJ.

Mark Rotteveel 07.08.2018 17:10

@MarkRotteveel не все так просто. Когда веб-проект Maven импортируется в IntelliJ IDEA, он автоматически генерирует артефакты со всеми зависимостями, но если артефакт был создан вручную или зависимости были обновлены позже, новые зависимости не будут включены в уже существующий артефакт.

CrazyCoder 07.08.2018 20:50

@CrazyCoder Вы также можете позволить IntelliJ использовать Maven для генерации WAR, тогда вам не нужно определять или обновлять определение WAR самостоятельно.

Mark Rotteveel 07.08.2018 20:52

@MarkRotteveel, конечно, можете, но горячее развертывание / обновление не будет работать при отладке приложения, созданного Maven (jetbrains.com/help/idea/…).

CrazyCoder 07.08.2018 20:53

@CrazyCoder Спасибо, узнал что-то новое, я обычно не использую вещи горячего развертывания, потому что почему-то они никогда не работают для меня.

Mark Rotteveel 07.08.2018 20:55

Другие вопросы по теме