-
Создание нового проекта
-
Выбор JDK и Maven webapp archetype
JDK устанавливается в поле Project SDK. Для корректной работы рекумендуется или 7 или 8 версия java.
В java 9 и выше появилась модульная система, которую последняя версия Apache Tomcat не поддерживает. Конечно обратная совместимость в Java присутсвует, однако модульная система является очень сильным изменением в JDK, поэтому могут быть неожиданные проблемы.
Если у Вас недостаточно опыта в программировании то рекомендуется устанавливать JDK 7 или 8 версии, чтобы не тратить драгоценное время на поиск проблем.
P.S.: Обратите внимание чтобы был выбран именно org.arache.maven.archetypes:maven-archetype-webapp архетип
-
Задание Group Id и Artifact Id
Group Id - это название Вашей компании. Можете просто указать test
Artifact Id - это название Вашего проекта
-
Окно настроек Maven
Оставляем все по-умолчанию
-
Местоположение проекта
Можно оставить по-умолчанию
-
Импорт проекта в среду разработки
Необходимо выбрать Enable Auto-Import. Данная опция позволит среде IntelJ IDEA сгенерировать заданные по умолчанию в этой среде настройки Maven для Вашего проекта.
-
Java версии 7 по-умолчанию
Enable Auto-Import позволяет задать по-умолчанию версию Java 7 для текущего проекта. (Это то что нам и нужно)
Без опции Enable Auto-Import IntelJ IDEA сгенерирует проект без указания версии Java. В таком случае подразумевается Java 5. Для нашего проекта это сильно старая версия.
- Итак простейший проект был успешно создан в среде IntelJ IDEA
Запуск простейшего web приложения на Apache Tomcat используя IntelJ IDEA и решение частых проблем
1. Создание проекта в IntelJ IDEA
2. Выбор и скачивание Apache Tomcat
-
Поиск Apache Tomcat
-
Выбор версии Apache Tomcat
-
Таблица версий JEE спецификаций, JRE и Apache Tomcat
В курсах devstudy.net используется спецификация сервлетов 3.1, поэтому следует выбирать Apache Tomcat версии 8.5.x, который запускается на Java 7
Apache Tomcat версии 9 также может быть использован, однако для него уже нужна Java 8 минимум.
-
Скачивание Apache Tomcat
Выбираем версию 8 и скачиваем zip архив.
Для большего контроля над Apache Tomcat рекомендуется именно zip архив, а не Windows installer
-
Разархивирование Apache Tomcat
Скачиваем архив в рабочую папку а затем разархивируем его. (У меня это папка: C:\Temp). У Вас должна быть любая другая.
3. Обзор Apache Tomcat
-
Основные папки Apache Tomcat
Основные папки:
- bin - папка со скриптами для запуска Apache Tomcat
- conf - папка с конфигурационными файлами Apache Tomcat
- logs - папка с логами Apache Tomcat
- webapps - папка со стандартными приложениями Apache Tomcat
Корневая папка Apache Tomcat в которой и находятся основные папки обычно называют $TOMCAT_HOME
-
Скрипт запуска Apache Tomcat
Чтобы запустить Apache Tomcat необходимо в папке bin запустить файл startup.bat
ВНИМАНИЕ! Для успешного запуска Apache Tomcat У Вас должна быть установлена Java и настроена переменная окружения JAVA_HOME
-
Результат запуска Apache Tomcat
В логах видно что Apache Tomcat успешно запустился (последняя строчка) и 5 стандартных web приложений были успешно задеплоены
-
Остановка Apache Tomcat
Для остановке сервера Apache Tomcat в командной строке нажимаем Ctrl+C
-
Логи Apache Tomcat
Так как Apache Tomcat запускался, то обязательно будут сохранены логи его работы, которые находятся в папке logs
-
catalina.*.log
Логи с приставкой catalina хранят логи всего Apache Tomcat.
В этом файле можно увидеть дубликат информации, которая отображалась в консоли. Это значит что если Вы запустили Apache Tomcat и командная строка мелькнула и пропала всегда можно зайти в catalina.*.log и узнать причину ошибки
-
localhost.*.log
Логи с приставкой localhost хранят логи web приложений, которые были запущены на Apache Tomcat.
Если какое-то web приложение не запустилось именно в этой файле нужно будет искать причину ошибки
-
Удаление логов
Apache Tomcat создает логи при каждом запуске. Если их долго не удалять, то может накопится много файлов
Для реально работающей системы логи очень важны для анализа бизнес процессов и ошибок
Для разработки они только мешают, поэтому рекомендуется очищать данную папку перед каждым запуском приложения, если Вам после этого понадобится анализировать логи
Чем меньше будет файлов тем легче в них разбираться
Для дальнейшей демонстрации работы необходимо удалить все логи
-
Стандартные приложения
В папке webapps Apache Tomcat хранит стандартные приложения.
Для разработки они не нужны, поэтому их следует удалить:
-
Запуск Apache Tomcat без стандартных приложений
Apache Tomcat успешно запустился и в логах запуска нет информации о деплое каких-либо приложения (Сравните с Результатом запуска Apache Tomcat с приложениями)
-
Останавливаем Apache Tomcat выполняя команду Ctrl+C
4. Настройка web приложения Apache Tomcat
-
Конфигурация web приложения для Apache Tomcat
Для того чтобы запустить web приложение на Apache Tomcat есть несколько способов
Самый удобный для разработки этого приложения - это запуск web приложения в контексте среды разработки (В нашем случае это IntelJ IDEA)
Для этого нужно перейти в папку $TOMCAT_HOME/conf/Catalina/localhost (Если папок нет по указаноому пути, необходимо их создать)
-
Создание ROOT.xml
В папке $TOMCAT_HOME/conf/Catalina/localhost необходимо создать файл ROOT.xml
Обратите внимание что Windows по-умолчанию скрывает расширения файлов, поэтому чтобы не создать ROOT.xml.txt файл вместо ROOT.xml измените настройки папок чтобы Windows отображала расширения для файлов
-
Содержимое ROOT.xml
В тексовом виде:
<Context path="" docBase="C:\Temp\helloworld\src\main\webapp" reloadable="true"/>
Атрибут docBase указывает на абсолютный путь к папке webapp Вашего проекта
-
Определение абсолютного пути к папке webapp
Выбираем папку webapp в дереве Вашего проекта и вызываем контекстное меню:
Открывается папка webapp:
Заходим в папку webapp:
В адресной строке explorer будет отображаться абсолютный путь к папке, именно этот путь нужно добавить в файл ROOT.xml
- После указанных манипуляций данный проект добавлен в список приложений которые будут деплоится при запуске Apache Tomcat
5. Запуск web приложения helloworld
-
Текущий шаблон web приложения, созданный с помощью maven по-умолчанию
По-умолчанию maven создает файл index.jsp с содержимым Hello world
Именно этот файл мы и будем запрашивать с помощью браузера
-
Запуск приложения на Apache Tomcat
Запускаем Apache Tomcat и в логах видим что наше приложение было успешно задеплоено и сервер Apache Tomcat также успешно запустился
-
Проверка работоспособности web приложения в браузере
Открываем браузер и указываем адрес нашего приложения: http://localhost:8080
В результате видим сообщение Hello world, которое генерируется с помощью index.jsp
По-умолчанию если в строке браузера не указан ресурс Apache Tomcat имет ресурсы по-умолчанию. Это index.html, index.htm и index.jsp.
Список всех ресурсов указан в файле $TOMCAT_HOME/conf/web.xml
Именно поэтому можно вместо адреса http://localhost:8080/index.jsp писать адрес http://localhost:8080 и приложение будет корректно работать
6. Добавление сервлетов в проект
-
Выбор версии сервлетов
Для корректной работы приложения версия Apache Tomcat должна совпадать с версией спецификации сервлетов
Так как мы выбрали Apache Tomcat 8.5.x максимально поддерживаемая версия сервлетов это 3.1
-
Скачивание версии сервлетов 3.1
Для определения нужной зависимости заходим на основной maven репозиторий и в поиске указываем servlet
Выбираем версию 3.1 и копируем данную зависимость в буфер обмена
-
Добавление зависимости в проект
Добавляем зависимость в pom.xml нашего проекта
-
Импортирование зависимости в IntekJ IDEA
После добавления зависимости она должна отображаться в разделе External libraries в дереве Вашего проекта
Если она там не отображается необходимо синхронизировать maven конфигурацию и Ваш проект (Кнопка REFRESH на maven панели) или выполнить maven команду compile
-
Создание папки java
Для того чтобы писать java код необходимо создать папку java внутри папки main
-
Настройка папки java
После создания папки java необходимо зайти в структуру проекта: File -> Project Structure...
Далее заходим в секицию Modules выбираем вкладку Sources выбираем нашу папку java и нажимаем на синюю кнопку Sources. После этого путь src\main\java появляется в правом столбце
Нажимаем OK
-
Создание папки java
После этого папка java должна отображаться синим цветом
-
Создание сервлета
Добавляем сервлет в проект и указываем url-mapping равный /hello-world
-
Запуск Apache Tomcat
Запускаем Apache Tomcat и заходим на http://localhost:8080/hello-world:
Обратите ВНИМАНИЕ что если зайти на http://localhost:8080 текст будет отображаться.
Т.е. в данной конфигурации JSP работают а сервлеты еще нет
-
Останавливаем Apache Tomcat выполняя команду Ctrl+C
7. Основные причины недоступности сервлетов и ЛЮБОГО java кода в web приложении
7.1 Причина № 1: Java код не скомпилирован
-
Самая частая причина состоит в том, что java код ВЫ создали, но IntelJ IDEA его не скомпилировала
-
Для того чтобы перекомпилировать Ваш проект нужно выбрать меню: Build -> Rebuild project:
-
В результате класс сервлета должен появится в папке target:
Если у Вас не отображается обновите дерево файлов: для этого на выбранной папке нажмите Synchronize в контекстном меню
-
Если сейчас запустить Apache Tomcat и зайти на http://localhost:8080/hello-world проблема не исчезнет и все равно будет 404 ошибка
7.2 Причина № 2: Java код скомпилирован но находится не в корректной папке
-
Стек технологий JEE определяет стандартную структуру web приложения.
web приложение - это любая папка в которой находится обязательная папка WEB-INF. Внутри WEB-INF должна быть папка classes в которой и должны находится все скомпилированные java классы
Именно поэтому необходимо чтобы скомпилированные java классы не просто существовали, а находились в нужно папке
-
Поэтому необходимо создать папку classes внутри WEB-INF:
-
После создания папки необходимо настроить IntelJ IDEA. чтобы она автоматически компилировала все java файлы в нужную нам папку. Для этого открываем свойства проекта: File -> Project Structure...
Далее секция Modules, вкладка Paths и указываем путь к созданной папке classes
Обратите ВНИМАНИЕ, что указанная настройка проекта не является стандартной и в случае переимпорта проекта с maven снова данная настройка пропадет
Именно об этом информирует IntelJ IDEA внизу диалогового окна
Это означает что если вдруг перестало работать - Вы должны проверить настроки IntelJ IDEA и при необходимости задать корректные
Далее нажимаем OK и Build -> Rebuild project и если необходимо Synchronize
-
После обновления класс сервлета скомпилирован и находится в правильной папке:
-
Если сейчас запустить Apache Tomcat и зайти на http://localhost:8080/hello-world то сервлет работает:
-
Останавливаем Apache Tomcat выполняя команду Ctrl+C
7.3 Причина № 3: Во время инициализации web приложения произошла ошибка
-
Следующей распростарненной ошибкой является ошибка инициализации web приложения
Давайте продемонстрируем данный тип ошибки
-
Для этого создадим новый класс слушателя и в методе инициализации контекста выбросим exception
FYI: Особенность данного класса в том, что его код вызывается автоматически Apache Tomcat в момент деплоя web приложения, а не в момент запроса с браузера
-
Далее пересобираем проект: Build -> Rebuild project
-
Для удобства последующего анализа ошибки заходим в логи Apache Tomcat и удаляем все логи
-
Далее запускаем Apache Tomcat:
В консоли видно что при деплое нашего приложения произошла ошибка
-
Чтобы узнать что именно за ошибка заходим в файл localhost.*.log:
Напоминаю что все ошибки web приложений отображаются именно в файле localhost.*.log
В данном файле видет stack trace исключения которое мы явным образом выбросили в нашем слушателе
7.4 Причина № 4: Во время запуска Apache Tomcat произошла ошибка
-
Если Вы запускаете Apache Tomcat а он не запускается, а именно мелькает консоль и пропадает, то это значит что произошла ошибка запуска самого сервера, а не отдельного web приложения
-
Все ошибки сервера логируются в файл catalina.*.log, поэтому чтобы узнать в чем проблема смотрим в этот файл:
Ошибка BindException обычно означает что порт 8080 на котором Вы хотите запустить Apache Tomcat уже занят на Вашем компьютере
-
Чтобы исправить данную ошибку необходимо убить процесс который занимает данный порт
Очень часто этот порт занимает skype. Поэтому skype можно выключить
Если не помогает - перезагрузите компьютер
Альтернативой является запуск Apache Tomcat на другом порту. Для этого заходим в $TOMCAT_HOME/conf/server.xml и заменяем порт 8080 на любой другой
7.5 Резюме по ошибкам
- Если Apache Tomcat не запускается то ищем причину ошибки в файле: $TOMCAT_HOME/logs/catalina.*.log;
- Если Apache Tomcat запускается но web приложение не запускается то ищем причину ошибки в файле: $TOMCAT_HOME/logs/localhost.*.log;
- Если Apache Tomcat запускается и web приложение запускается но сервлет не доступен проверяем что класс сервлета был успешно скомпилирован и находится внутри папки WEB-INF/classes Вашего web приложения;
- Если Apache Tomcat не запускается и файл $TOMCAT_HOME/logs/catalina.*.log несоздается то скорее всего у Вас не установлена Java или не прописана переменная окружения JAVA_HOME