- •Курсовая работа по дисциплине
- •Введение
- •Постановка задачи
- •Обоснование выбора технологий
- •Разработка структуры программы
- •1. Основные компоненты программы
- •2. Архитектура взаимодействия компонентов
- •3. Структура базы данных
- •4. Конфигурация проекта Maven
- •Разработка собственных классов
- •5.1. Модель данных (Model)
- •5.1.1. Класс Book
- •1. Поля:
- •2. Методы:
- •5.1.2. Класс User
- •1. Поля:
- •2. Методы:
- •5.1.3. Класс CartItem
- •1. Поля:
- •2. Методы:
- •5.2. Слой доступа к данным (dao)
- •5.2.1. Класс BookDao
- •1. Поля:
- •2. Методы:
- •5.2.2. Класс UserDao
- •1. Поля:
- •2. Методы:
- •5.2.3. Класс CartDao
- •1. Поля:
- •2. Методы:
- •5.2.4. Класс DatabaseConnection
- •1. Поля (константы подключения):
- •2. Методы:
- •5.3. Сервлеты
- •5.3.1. Класс BookServlet
- •1. Поля:
- •2. Методы http обработки:
- •5.3.2. Класс AuthServlet
- •1. Поля:
- •2. Методы http обработки:
- •5.3.3. Класс CartServlet
- •1. Поля:
- •2. Методы http обработки:
- •5.4. Конфигурация проекта Maven
- •5.4.1. Файл pom.Xml
- •Сценарии пользователя
- •Удаление книг из корзины.
- •Оформление заказа.
- •Инструкция пользователю
- •Начало работы с приложением
- •Создание личного кабинета
- •Вход в систему для постоянных клиентов
- •Исследование книжного каталога
- •Фильтрация книг
- •Формирование корзины покупок
- •Управление корзиной
- •Оформление заказа
- •Завершение работы
- •Заключение
- •Список литературы
- •Приложение
Разработка структуры программы
В рамках данного проекта была разработана веб-приложение «Электронный книжный магазин», состоящее из клиентской (frontend) и серверной (backend) частей. Структура программы организована по принципу трёхзвенной архитектуры, что обеспечивает чёткое разделение ответственности, модульность и простоту поддержки.
1. Основные компоненты программы
Программа состоит из следующих ключевых компонентов, разработанных автором (бэкенд-часть):
1.1. Модели данных (Model Layer)
Класс Book: этот класс представляет основную сущность приложения — книгу. Он включает атрибуты: идентификатор, название, автор, цена, URL изображения, количество на складе. Предоставляет геттеры и сеттеры для доступа к данным, а также конструкторы для создания объектов.
Класс User: модель пользователя системы с атрибутами: идентификатор, имя пользователя, пароль (в хешированном виде), email. Реализует базовые операции управления учётными данными.
Класс CartItem: представляет элемент корзины покупок. Содержит связи с пользователем и книгой, а также количество выбранного товара. Включает вложенный объект Book для полной информации о товаре.
1.2. Слой доступа к данным (Data Access Layer)
Класс BookDao: отвечает за все операции с таблицей книг в базе данных. Реализует методы: getAllBooks() (получение всего каталога), decreaseBookQuantity() (уменьшение количества при покупке). Использует PreparedStatement для защиты от SQL-инъекций.
Класс UserDao: обеспечивает работу с пользователями: findUserBy Username() (поиск при входе), registerUser() (регистрация), validatePassword() (проверка пароля).
Класс CartDao: управляет корзиной покупок: getCartItemsByUserId() (получение корзины пользователя), addToCart() (добавление товара), removeFromCart() (удаление), clearUserCart() (очистка после покупки).
Класс DatabaseConnection: синглтон для управления подключениями к MySQL. Обеспечивает централизованное создание и закрытие соединений, предотвращает утечки ресурсов.
1.3. Слой бизнес-логики (Controller Layer)
Класс BookServlet: обрабатывает HTTP GET запросы по пути /books. Возвращает JSON-массив со всеми книгами из каталога. Реализует Content-Type: application/json для корректной обработки клиентом.
Класс AuthServlet: управляет аутентификацией пользователей через путь /auth/*. Обрабатывает:
/login — вход с проверкой учётных данных
/register — регистрация новых пользователей
/logout — завершение сессии. Использует HttpSession для управления сессиями.
Класс CartServlet: Контроллер для операций с корзиной (/cart/*). Реализует:
GET /cart — получение содержимого корзины
POST /cart/add — добавление товара
POST /cart/remove — удаление товара
POST /cart/update — изменение количества
POST /cart/purchase — оформление покупки
2. Архитектура взаимодействия компонентов
2.1. Взаимодействие клиент-сервер
Frontend → HTTP Request → Jetty→ Servlet → DAO → MySQL
↑ ↓ ↑ ↓ ↑ ↓
Браузер JSON Контейнер Логика Данные База данных
2.2. Последовательность обработки запроса:
Клиентская часть (разработана коллегой) отправляет HTTP запрос через Fetch API
Контейнер Jetty принимает запрос, определяет соответствующий сервлет
Сервлет извлекает параметры, вызывает соответствующий метод DAO
DAO выполняет SQL запрос через JDBC
MySQL возвращает результат, который преобразуется в JSON
JSON ответ отправляется клиенту для отображения
