Ссылка на задание: https://javarush.com/quests/lectures/jru.module3.lecture04
- Технологический стек
1) Сервлеты: Servlet API 4.0
2) JSP + JSTL - для динамических ваб-страниц
3) Работа с сессиями - хранить состояние пользователя
4) Maven - управление зависимостями
5) Архитектура MVC (Model-View-Controller) в упрощенном виде
6) Тестирование: JUnit + Mockito
- План
1) Начнем с настройки проекта: создать правильную структуру каталогов
2) Добавить зависимости: подключить необходимые библиотеки
3) Написать бизнес-логику: реализовать игровую механику
4) Создать пользовательский интерфейс
5) Протестировать (UI + покрытие тестами)
- Цель
У нас должно быть полностью рабочее приложение, которое:
1) Принимает решение пользователя
2) Хранить состояние игры
3) Показать результат
4) Соответствовать поддерживаемой архитектуре
- Структура каталогов
src/main/java/com/javarush/quest - Java классы
src/main/resources - ресурсы
src/main/webapp/WEB-INF - веб-конфигурация
src/main/webapp - JSP-страницы
src/test/java/com/javarush/quest - тесты
- Эндпоинты
http://localhost:8080/HelloQuest/hello
http://localhost:8080/HelloQuest/game
http://localhost:8080/HelloQuest/start
Полноценное рабочее веб-приложение с ветвящимися сценариями квеста (3 пути к победе, 3 к поражению), с сессионной статистикой, тестированием, профессиональной структурой (MVC-подход), с возможностью начать заново после завершения игры, с обработкой ошибок и валидацией, с логированием.
№ Было: Стало:
1 Один вопрос 7 шагов с ветвлением
2 Один сервлет GameServlet 2 сервлета: StartServlet, GameServlet
3 Простая обработка ответа Полная логика квеста с победами и поражениями
4 Статика в JSP Динамика с JSTL тегами
5 Нет модели данных Модель QuestStep и сервис QuestService
6 Нет тестов Полноценные JUnit тесты
7 Простой UI Стилизованный UI
8 Минимальная статистика Полная статистика: имя, игры, шаги
9 Отсутствие логирования Полноценное логирование, использование логера
- HelloQuest -> SpaceQuest
- Создадим пакеты:
- model - для моделей данных
- service - для бизнес-логики
- filter - для фильтров
- Зависимости для тестов - JUnit 5
- Создать модели данных:
1) Класс QuestStep - модель шага квеста:
- id шага
- текст вопроса
- два варианта ответа
- id следующих шагов для каждого ответа
- Бизнес-логика квеста
1) Класс QuestService - управление шагами:
- инициализация всех шагов квеста
- метод получения шага по id
- проверка финального шага (победа/поражение)
- Обновить сервлеты
1) StartServlet - страница приветствия и ввод имени
2) GameServlet - обработка игры с ветвлением:
- doGet() - отображение текущего шага
- doPost() - обработка ответа и переход к следующему шагу
3) EncodingFilter - фильтр для UTF-8 кодировки
- Создание новых JSP страниц
- index.jsp - страница с предысторией
- game.jsp - основная страница игры с JSTL:
- Динамическое отображение шагов
- Статистика в реальном времени
- CSS стилизация (?)
- Написание тестов
1) QuestServiceTest - тестирование логики квеста:
- Получение шагов
- Проверка ветвления
- Валидация финальных шагов