- •Курсовая работа по дисциплине
- •Введение
- •Постановка задачи
- •Обоснование выбора технологий
- •Разработка структуры программы
- •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
- •Сценарии пользователя
- •Удаление книг из корзины.
- •Оформление заказа.
- •Инструкция пользователю
- •Начало работы с приложением
- •Создание личного кабинета
- •Вход в систему для постоянных клиентов
- •Исследование книжного каталога
- •Фильтрация книг
- •Формирование корзины покупок
- •Управление корзиной
- •Оформление заказа
- •Завершение работы
- •Заключение
- •Список литературы
- •Приложение
2. Методы:
2.1. Операции чтения:
List<Book> getAllBooks() – извлекает все книги из базы данных и возвращает их в виде списка объектов Book
Логика работы: выполняет SELECT * FROM books, преобразует каждый ряд ResultSet в объект Book,
Обработка ошибок: ловит SQLException, логирует ошибку, возвращает пустой список при сбое.
2.2. Операции обновления:
boolean decreaseBookQuantity(int bookId, int quantity) – уменьшает количество книги на складе на указанное значение
Логика работы: выполняет UPDATE books SET quantity = quantity - ? WHERE id = ? AND quantity >= ?,
Безопасность: проверяет, что после уменьшения количество не станет отрицательным,
Возвращаемое значение: true если обновление успешно, false при ошибке или недостаточном количестве.
2.3. Вспомогательные методы:
private Book mapResultSetToBook(ResultSet rs) – преобразует строку ResultSet в объект Book
Назначение: устраняет дублирование кода при маппинге данных,
Обработка данных: корректно конвертирует типы SQL в типы Java.
5.2.2. Класс UserDao
Назначение: Класс UserDao управляет операциями с таблицей пользователей, обеспечивая аутентификацию, регистрацию и валидацию учётных данных.
1. Поля:
private static final String FIND_USER_SQL – SQL запрос поиска пользователя по имени,
private static final String REGISTER_USER_SQL – SQL запрос добавления нового пользователя.
2. Методы:
2.1. Операции аутентификации:
User findUserByUsername(String username) – находит пользователя по имени в базе данных
Логика работы: выполняет SELECT * FROM users WHERE username = ?,
Возвращаемое значение: Объект User или null если пользователь не найден,
Безопасность: использует PreparedStatement для защиты от SQL-инъекций.
2.2. Операции регистрации:
boolean registerUser(User user) – добавляет нового пользователя в систему
Логика работы: выполняет INSERT INTO users (username, password, email) VALUES (?, ?, ?),
Валидация: проверяет уникальность имени пользователя перед вставкой,
Возвращаемое значение: true при успешной регистрации, false при ошибке.
2.3. Валидация данных:
boolean validatePassword(String plainPassword, String hashedPassword) – сравнивает введённый пароль с сохранённым
Текущая реализация: Прямое сравнение строк (для учебных целей),
Рекомендуемое улучшение: Использование B Crypt.checkpw() для безопасного сравнения хешей.
5.2.3. Класс CartDao
Назначение: Класс CartDao управляет всеми операциями, связанными с корзиной покупок, включая добавление товаров, изменение количества и очистку корзины.
1. Поля:
private static final String GET_CART_ITEMS_SQL – SQL запрос с JOIN для получения корзины с информацией о книгах,
private static final String ADD_TO_CART_SQL – SQL запрос добавления товара в корзину,
private static final String REMOVE_FROM_CART_SQL – SQL запрос удаления товара из корзины.
