• Направления обучения
  • Все курсы
  • Статьи
  • Контакты

Запуск простейшего web приложения на Apache Tomcat используя IntelJ IDEA и решение частых проблем


1. Создание проекта в IntelJ IDEA


  1. Создание нового проекта
  2. Выбор 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 архетип

  3. Задание Group Id и Artifact Id

    Group Id - это название Вашей компании. Можете просто указать test

    Artifact Id - это название Вашего проекта

  4. Окно настроек Maven

    Оставляем все по-умолчанию

  5. Местоположение проекта

    Можно оставить по-умолчанию

  6. Импорт проекта в среду разработки

    Необходимо выбрать Enable Auto-Import. Данная опция позволит среде IntelJ IDEA сгенерировать заданные по умолчанию в этой среде настройки Maven для Вашего проекта.

  7. Java версии 7 по-умолчанию

    Enable Auto-Import позволяет задать по-умолчанию версию Java 7 для текущего проекта. (Это то что нам и нужно)

    Без опции Enable Auto-Import IntelJ IDEA сгенерирует проект без указания версии Java. В таком случае подразумевается Java 5. Для нашего проекта это сильно старая версия.

  8. Итак простейший проект был успешно создан в среде IntelJ IDEA

2. Выбор и скачивание Apache Tomcat


  1. Поиск Apache Tomcat
  2. Выбор версии Apache Tomcat
  3. Таблица версий JEE спецификаций, JRE и Apache Tomcat

    В курсах devstudy.net используется спецификация сервлетов 3.1, поэтому следует выбирать Apache Tomcat версии 8.5.x, который запускается на Java 7

    Apache Tomcat версии 9 также может быть использован, однако для него уже нужна Java 8 минимум.

  4. Скачивание Apache Tomcat

    Выбираем версию 8 и скачиваем zip архив.

    Для большего контроля над Apache Tomcat рекомендуется именно zip архив, а не Windows installer

  5. Разархивирование Apache Tomcat

    Скачиваем архив в рабочую папку а затем разархивируем его. (У меня это папка: C:\Temp). У Вас должна быть любая другая.

3. Обзор Apache Tomcat


  1. Основные папки Apache Tomcat

    Основные папки:

    • bin - папка со скриптами для запуска Apache Tomcat
    • conf - папка с конфигурационными файлами Apache Tomcat
    • logs - папка с логами Apache Tomcat
    • webapps - папка со стандартными приложениями Apache Tomcat

    Корневая папка Apache Tomcat в которой и находятся основные папки обычно называют $TOMCAT_HOME

  2. Скрипт запуска Apache Tomcat

    Чтобы запустить Apache Tomcat необходимо в папке bin запустить файл startup.bat

    ВНИМАНИЕ! Для успешного запуска Apache Tomcat У Вас должна быть установлена Java и настроена переменная окружения JAVA_HOME

  3. Результат запуска Apache Tomcat

    В логах видно что Apache Tomcat успешно запустился (последняя строчка) и 5 стандартных web приложений были успешно задеплоены

  4. Остановка Apache Tomcat

    Для остановке сервера Apache Tomcat в командной строке нажимаем Ctrl+C

  5. Логи Apache Tomcat

    Так как Apache Tomcat запускался, то обязательно будут сохранены логи его работы, которые находятся в папке logs

  6. catalina.*.log

    Логи с приставкой catalina хранят логи всего Apache Tomcat.

    В этом файле можно увидеть дубликат информации, которая отображалась в консоли. Это значит что если Вы запустили Apache Tomcat и командная строка мелькнула и пропала всегда можно зайти в catalina.*.log и узнать причину ошибки

  7. localhost.*.log

    Логи с приставкой localhost хранят логи web приложений, которые были запущены на Apache Tomcat.

    Если какое-то web приложение не запустилось именно в этой файле нужно будет искать причину ошибки

  8. Удаление логов

    Apache Tomcat создает логи при каждом запуске. Если их долго не удалять, то может накопится много файлов

    Для реально работающей системы логи очень важны для анализа бизнес процессов и ошибок

    Для разработки они только мешают, поэтому рекомендуется очищать данную папку перед каждым запуском приложения, если Вам после этого понадобится анализировать логи

    Чем меньше будет файлов тем легче в них разбираться

    Для дальнейшей демонстрации работы необходимо удалить все логи

  9. Стандартные приложения

    В папке webapps Apache Tomcat хранит стандартные приложения.

    Для разработки они не нужны, поэтому их следует удалить:

  10. Запуск Apache Tomcat без стандартных приложений

    Apache Tomcat успешно запустился и в логах запуска нет информации о деплое каких-либо приложения (Сравните с Результатом запуска Apache Tomcat с приложениями)

  11. Останавливаем Apache Tomcat выполняя команду Ctrl+C

4. Настройка web приложения Apache Tomcat


  1. Конфигурация web приложения для Apache Tomcat

    Для того чтобы запустить web приложение на Apache Tomcat есть несколько способов

    Самый удобный для разработки этого приложения - это запуск web приложения в контексте среды разработки (В нашем случае это IntelJ IDEA)

    Для этого нужно перейти в папку $TOMCAT_HOME/conf/Catalina/localhost (Если папок нет по указаноому пути, необходимо их создать)

  2. Создание ROOT.xml

    В папке $TOMCAT_HOME/conf/Catalina/localhost необходимо создать файл ROOT.xml

    Обратите внимание что Windows по-умолчанию скрывает расширения файлов, поэтому чтобы не создать ROOT.xml.txt файл вместо ROOT.xml измените настройки папок чтобы Windows отображала расширения для файлов

  3. Содержимое ROOT.xml

    В тексовом виде:

    <Context 	path=""
                    docBase="C:\Temp\helloworld\src\main\webapp"
                    reloadable="true"/>
                    

    Атрибут docBase указывает на абсолютный путь к папке webapp Вашего проекта

  4. Определение абсолютного пути к папке webapp

    Выбираем папку webapp в дереве Вашего проекта и вызываем контекстное меню:

    Открывается папка webapp:

    Заходим в папку webapp:

    В адресной строке explorer будет отображаться абсолютный путь к папке, именно этот путь нужно добавить в файл ROOT.xml

  5. После указанных манипуляций данный проект добавлен в список приложений которые будут деплоится при запуске Apache Tomcat

5. Запуск web приложения helloworld


  1. Текущий шаблон web приложения, созданный с помощью maven по-умолчанию

    По-умолчанию maven создает файл index.jsp с содержимым Hello world

    Именно этот файл мы и будем запрашивать с помощью браузера

  2. Запуск приложения на Apache Tomcat

    Запускаем Apache Tomcat и в логах видим что наше приложение было успешно задеплоено и сервер Apache Tomcat также успешно запустился

  3. Проверка работоспособности 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. Добавление сервлетов в проект


  1. Выбор версии сервлетов

    Для корректной работы приложения версия Apache Tomcat должна совпадать с версией спецификации сервлетов

    Так как мы выбрали Apache Tomcat 8.5.x максимально поддерживаемая версия сервлетов это 3.1

  2. Скачивание версии сервлетов 3.1

    Для определения нужной зависимости заходим на основной maven репозиторий и в поиске указываем servlet

    Выбираем версию 3.1 и копируем данную зависимость в буфер обмена

  3. Добавление зависимости в проект

    Добавляем зависимость в pom.xml нашего проекта

  4. Импортирование зависимости в IntekJ IDEA

    После добавления зависимости она должна отображаться в разделе External libraries в дереве Вашего проекта

    Если она там не отображается необходимо синхронизировать maven конфигурацию и Ваш проект (Кнопка REFRESH на maven панели) или выполнить maven команду compile

  5. Создание папки java

    Для того чтобы писать java код необходимо создать папку java внутри папки main

  6. Настройка папки java

    После создания папки java необходимо зайти в структуру проекта: File -> Project Structure...

    Далее заходим в секицию Modules выбираем вкладку Sources выбираем нашу папку java и нажимаем на синюю кнопку Sources. После этого путь src\main\java появляется в правом столбце

    Нажимаем OK

  7. Создание папки java

    После этого папка java должна отображаться синим цветом

  8. Создание сервлета

    Добавляем сервлет в проект и указываем url-mapping равный /hello-world

  9. Запуск Apache Tomcat

    Запускаем Apache Tomcat и заходим на http://localhost:8080/hello-world:

    Обратите ВНИМАНИЕ что если зайти на http://localhost:8080 текст будет отображаться.

    Т.е. в данной конфигурации JSP работают а сервлеты еще нет

  10. Останавливаем Apache Tomcat выполняя команду Ctrl+C

7. Основные причины недоступности сервлетов и ЛЮБОГО java кода в web приложении


7.1 Причина № 1: Java код не скомпилирован


  1. Самая частая причина состоит в том, что java код ВЫ создали, но IntelJ IDEA его не скомпилировала

  2. Для того чтобы перекомпилировать Ваш проект нужно выбрать меню: Build -> Rebuild project:

  3. В результате класс сервлета должен появится в папке target:

    Если у Вас не отображается обновите дерево файлов: для этого на выбранной папке нажмите Synchronize в контекстном меню

  4. Если сейчас запустить Apache Tomcat и зайти на http://localhost:8080/hello-world проблема не исчезнет и все равно будет 404 ошибка

7.2 Причина № 2: Java код скомпилирован но находится не в корректной папке


  1. Стек технологий JEE определяет стандартную структуру web приложения.

    web приложение - это любая папка в которой находится обязательная папка WEB-INF. Внутри WEB-INF должна быть папка classes в которой и должны находится все скомпилированные java классы

    Именно поэтому необходимо чтобы скомпилированные java классы не просто существовали, а находились в нужно папке

  2. Поэтому необходимо создать папку classes внутри WEB-INF:

  3. После создания папки необходимо настроить IntelJ IDEA. чтобы она автоматически компилировала все java файлы в нужную нам папку. Для этого открываем свойства проекта: File -> Project Structure...

    Далее секция Modules, вкладка Paths и указываем путь к созданной папке classes

    Обратите ВНИМАНИЕ, что указанная настройка проекта не является стандартной и в случае переимпорта проекта с maven снова данная настройка пропадет

    Именно об этом информирует IntelJ IDEA внизу диалогового окна

    Это означает что если вдруг перестало работать - Вы должны проверить настроки IntelJ IDEA и при необходимости задать корректные

    Далее нажимаем OK и Build -> Rebuild project и если необходимо Synchronize

  4. После обновления класс сервлета скомпилирован и находится в правильной папке:

  5. Если сейчас запустить Apache Tomcat и зайти на http://localhost:8080/hello-world то сервлет работает:

  6. Останавливаем Apache Tomcat выполняя команду Ctrl+C

7.3 Причина № 3: Во время инициализации web приложения произошла ошибка


  1. Следующей распростарненной ошибкой является ошибка инициализации web приложения

    Давайте продемонстрируем данный тип ошибки

  2. Для этого создадим новый класс слушателя и в методе инициализации контекста выбросим exception

    FYI: Особенность данного класса в том, что его код вызывается автоматически Apache Tomcat в момент деплоя web приложения, а не в момент запроса с браузера

  3. Далее пересобираем проект: Build -> Rebuild project

  4. Для удобства последующего анализа ошибки заходим в логи Apache Tomcat и удаляем все логи

  5. Далее запускаем Apache Tomcat:

    В консоли видно что при деплое нашего приложения произошла ошибка

  6. Чтобы узнать что именно за ошибка заходим в файл localhost.*.log:

    Напоминаю что все ошибки web приложений отображаются именно в файле localhost.*.log

    В данном файле видет stack trace исключения которое мы явным образом выбросили в нашем слушателе

7.4 Причина № 4: Во время запуска Apache Tomcat произошла ошибка


  1. Если Вы запускаете Apache Tomcat а он не запускается, а именно мелькает консоль и пропадает, то это значит что произошла ошибка запуска самого сервера, а не отдельного web приложения

  2. Все ошибки сервера логируются в файл catalina.*.log, поэтому чтобы узнать в чем проблема смотрим в этот файл:

    Ошибка BindException обычно означает что порт 8080 на котором Вы хотите запустить Apache Tomcat уже занят на Вашем компьютере

  3. Чтобы исправить данную ошибку необходимо убить процесс который занимает данный порт

    Очень часто этот порт занимает skype. Поэтому skype можно выключить

    Если не помогает - перезагрузите компьютер

    Альтернативой является запуск Apache Tomcat на другом порту. Для этого заходим в $TOMCAT_HOME/conf/server.xml и заменяем порт 8080 на любой другой

7.5 Резюме по ошибкам


  1. Если Apache Tomcat не запускается то ищем причину ошибки в файле: $TOMCAT_HOME/logs/catalina.*.log;
  2. Если Apache Tomcat запускается но web приложение не запускается то ищем причину ошибки в файле: $TOMCAT_HOME/logs/localhost.*.log;
  3. Если Apache Tomcat запускается и web приложение запускается но сервлет не доступен проверяем что класс сервлета был успешно скомпилирован и находится внутри папки WEB-INF/classes Вашего web приложения;
  4. Если Apache Tomcat не запускается и файл $TOMCAT_HOME/logs/catalina.*.log несоздается то скорее всего у Вас не установлена Java или не прописана переменная окружения JAVA_HOME
DevStudy.net На главную Направления обучения Все курсы Статьи FAQ

Контакты:


Udemy: devstudy_net

Email: devstudy.net@gmail.com


Наша миссия:

Дать возможность любому желающему начать работать в IT с минимальными начальными вложениями!



Актуальные вакансии:

jobeka iconВакансии разработчик баз данных на Jobeka jobsora iconВакансии Java разработчик на Jobsora jooble iconВакансии Java разработчик на Jooble