Учебный веб-проект, демонстрирующий базовые принципы построения серверного Java-приложения по шаблону MVC.
Реализована работа со списком книг, авторами и пользовательской корзиной.
Сессии пользователей обрабатываются вручную — с обучающими целями. Все данные хранятся в базе данных MariaDB.
Проект собирается как .war
-архив и предназначен для развёртывания в контейнере Apache Tomcat.
В качестве стека используются Jakarta EE, JSTL, Logback и загрузка конфигурации через .env
-файлы.
Работа с базой данных реализована без ORM — для лучшего понимания SQL и JDBC.
- Загрузка конфигурации через
.env
; - Подключение к базе данных MariaDB (без ORM);
- Архитектура MVC: DAO, сервисы, сервлеты, JSP;
- Использование JSTL для шаблонов;
- Обработка исключений через контроллеры;
- Ручное управление сессиями пользователей (в учебных целях);
- Статические ресурсы: CSS / JS;
- Поддержка деплоймента через FTP (
mvn deploy
).
Все обращения к базе данных централизованы через вспомогательный класс DatabaseHelper
.
Он реализует паттерн Singleton, выполняет SQL-запросы с параметрами, управляет подключением, читает SQL-файлы из ресурсов и использует try-with-resources
для безопасной работы с JDBC.
Поверх него реализован собственный слой DAO, приближённый по уровню абстракции к ORM:
- Для каждой таблицы проекта существует соответствующий Java-класс модели;
- Для каждой модели создан DAO-класс, реализующий CRUD-операции;
- Базовая логика DAO выделена в
BaseDao
, от которого наследуются конкретные DAO; - Результаты SQL-запросов автоматически преобразуются в экземпляры моделей.
Такой подход позволяет удобно и типизировано работать с базой данных без сторонних библиотек.
Приложение предназначено для запуска в контейнере Docker на базе:
- Apache Tomcat 11
- OpenJDK 23
- Связка с веб-сервером Apache2 (reverse proxy)
- База данных: MariaDB
Для развёртывания приложения использовался Docker-образ almihub/tomcat11-jdk23, который можно найти в моём профиле на Docker Hub.
Для автоматизации процесса создания и публикации Docker-образа под ваши условия можно использовать мой скрипт Dockerhub Publisher, доступный на GitHub.
24 апреля 2025 года