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

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


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


  1. Запуск Eclipse

    При запуске отображает Welcome Screen

    Для того чтобы открыть рабочую область необходимо выбрать перспективу (Кнопка с плюсиком):

  2. Выбор перспективы Eclipse

    Далее необходимо выбрать перспективу

    Я рекомендую именно Java перспективу - она очень просто для начинающих разработчиков:

  3. Создание проекта Eclipse
  4. Выбор Maven проекта
  5. Настройки Maven проекта

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

  6. Выбор Maven webapp archetype

    В поле фильтра вводим webapp

    P.S.: Обратите внимание чтобы был выбран именно org.arache.maven.archetypes:maven-archetype-webapp архетип

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

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

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

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

    Проект был успешно создан и импортиров в Eclipse

    Обратите внимание на ошибку внизу: Eclipse определил что был создан web проект но еще не было добавлено Servlet API

    Это ошибка не существенна если используется только JSP. Когда мы добавим Servlet API библиотеку в проект эта ошибка пропадет. А пока мы ее игнорируем!

  9. Минимум Java версии 7

    Для успешно работы над проектом нам нужно использовать Java 7 минимум

    По умолччанию генерируется проект без указания версии Java. В таком случае подразумевается Java 5. Для нашего проекта это сильно старая версия.

    Для указания версии Java нужно добавить следующие строчки в pom.xml:

    <properties>
      <maven.compiler.source>1.7</maven.compiler.source>
      <maven.compiler.target>1.7</maven.compiler.target>
    </properties>
                    
  10. Импорт Maven изменений в Eclipse

    Так как настройку мы добавили в Maven, необходимо синхронизирвать изменения с Eclipse

    Для этого выбираем опцию Maven -> Update Project...

    И нажимаем OK:

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

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:\Users\User\eclipse-workspace\hello-world\src\main\webapp"
                    reloadable="true"/>
                    

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

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

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

    Отображаем корневую папку проекта в Explorer:

    Заходим в папку webapp, чтобы отображались папка WEB-INF и файл index.jsp:

    В адресной строке 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 нашего проекта и сохраняем изменения

    В результате должна пропасть ошибка, которая была при создании проекта и в секции Maven Dependencies должна появиться библиотека сервлетов

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

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

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

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

  6. Запуск Apache Tomcat

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

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

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

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

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


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


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

  2. Для того чтобы Eclipse компилирвоал Ваш код при сохранении изменения в файле, необходимо установить галочку Build Automatically:

  3. В результате класс сервлета должен появится в папке target. К сожалению Eclipse не отображает скомпилированные Java классы в дереве проектов, поэтому чтобы убедится что класс создан необходимо найти этот класс с помощью Explorer

  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. После создания папки необходимо настроить Eclipse, чтобы он автоматически компилировал все java файлы в нужную нам папку. Для этого открываем свойства проекта:

    Далее секция Java Build Path, вкладка Source

    Нужно удалить секции Output folder и Exclude с помощью кнопки Remove

    Затем удаляем секцию hello-world/src/test/java - тесты нам пока не нужны

    И в поле Default output folder прописываем путь к нашей папке

    В результате должно быть так:

    Сохраняем изменения и подтверждаем:

  4. В результате Eclipse должен перекомпилирвоать классы в нужную папку

  5. Если вдруг Eclipse не перекомпилировал классы, запускаем перекомпиляцию в ручную. (Так как у нас стоит опция Build Automatically достаточно нажать на меню Clean и подтвердить очищение и тогда Eclipse автоматически перекомпилирует классы)

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

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

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


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

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

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

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

    Сохраняем изменения в классе. По сохранению Eclipse автоматически скомпилирует данный класс

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

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

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

  5. Чтобы узнать что именно за ошибка заходим в файл 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