-
Запуск Eclipse
При запуске отображает Welcome Screen
Для того чтобы открыть рабочую область необходимо выбрать перспективу (Кнопка с плюсиком):
-
Выбор перспективы Eclipse
Далее необходимо выбрать перспективу
Я рекомендую именно Java перспективу - она очень просто для начинающих разработчиков:
-
Создание проекта Eclipse
-
Выбор Maven проекта
-
Настройки Maven проекта
Оставляем все по-умолчанию
-
Выбор Maven webapp archetype
В поле фильтра вводим webapp
P.S.: Обратите внимание чтобы был выбран именно org.arache.maven.archetypes:maven-archetype-webapp архетип
-
Задание Group Id и Artifact Id
Group Id - это название Вашей компании. Можете просто указать test
Artifact Id - это название Вашего проекта
-
Импорт проекта в среду разработки
Проект был успешно создан и импортиров в Eclipse
Обратите внимание на ошибку внизу: Eclipse определил что был создан web проект но еще не было добавлено Servlet API
Это ошибка не существенна если используется только JSP. Когда мы добавим Servlet API библиотеку в проект эта ошибка пропадет. А пока мы ее игнорируем!
-
Минимум 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>
-
Импорт Maven изменений в Eclipse
Так как настройку мы добавили в Maven, необходимо синхронизирвать изменения с Eclipse
Для этого выбираем опцию Maven -> Update Project...
И нажимаем OK:
- Итак простейший проект был успешно создан в среде Eclipse
Запуск простейшего web приложения на Apache Tomcat используя Eclipse и решение частых проблем
1. Создание проекта в Eclipse
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:\Users\User\eclipse-workspace\hello-world\src\main\webapp" reloadable="true"/>
Атрибут docBase указывает на абсолютный путь к папке webapp Вашего проекта
-
Определение абсолютного пути к папке webapp
Выбираем папку webapp в дереве Вашего проекта и вызываем контекстное меню:
Отображаем корневую папку проекта в Explorer:
Заходим в папку webapp, чтобы отображались папка WEB-INF и файл index.jsp:
В адресной строке 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 нашего проекта и сохраняем изменения
В результате должна пропасть ошибка, которая была при создании проекта и в секции Maven Dependencies должна появиться библиотека сервлетов
-
Создание папки java
Для того чтобы писать java код необходимо создать папку java внутри папки main
-
Создание сервлета
Добавляем сервлет в проект и указываем 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 код ВЫ создали, но Eclipse его не скомпилировал
-
Для того чтобы Eclipse компилирвоал Ваш код при сохранении изменения в файле, необходимо установить галочку Build Automatically:
-
В результате класс сервлета должен появится в папке target. К сожалению Eclipse не отображает скомпилированные Java классы в дереве проектов, поэтому чтобы убедится что класс создан необходимо найти этот класс с помощью Explorer
-
Если сейчас запустить 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:
-
После создания папки необходимо настроить Eclipse, чтобы он автоматически компилировал все java файлы в нужную нам папку. Для этого открываем свойства проекта:
Далее секция Java Build Path, вкладка Source
Нужно удалить секции Output folder и Exclude с помощью кнопки Remove
Затем удаляем секцию hello-world/src/test/java - тесты нам пока не нужны
И в поле Default output folder прописываем путь к нашей папке
В результате должно быть так:
Сохраняем изменения и подтверждаем:
-
В результате Eclipse должен перекомпилирвоать классы в нужную папку
-
Если вдруг Eclipse не перекомпилировал классы, запускаем перекомпиляцию в ручную. (Так как у нас стоит опция Build Automatically достаточно нажать на меню Clean и подтвердить очищение и тогда Eclipse автоматически перекомпилирует классы)
-
Если сейчас запустить Apache Tomcat и зайти на http://localhost:8080/hello-world то сервлет работает:
-
Останавливаем Apache Tomcat выполняя команду Ctrl+C
7.3 Причина № 3: Во время инициализации web приложения произошла ошибка
-
Следующей распростарненной ошибкой является ошибка инициализации web приложения
Давайте продемонстрируем данный тип ошибки
-
Для этого создадим новый класс слушателя и в методе инициализации контекста выбросим exception
FYI: Особенность данного класса в том, что его код вызывается автоматически Apache Tomcat в момент деплоя web приложения, а не в момент запроса с браузера
Сохраняем изменения в классе. По сохранению Eclipse автоматически скомпилирует данный класс
-
Для удобства последующего анализа ошибки заходим в логи 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