- •Курсовая работа по дисциплине
- •Введение
- •Постановка задачи
- •Обоснование выбора технологий
- •Разработка структуры программы
- •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
- •Сценарии пользователя
- •Удаление книг из корзины.
- •Оформление заказа.
- •Инструкция пользователю
- •Начало работы с приложением
- •Создание личного кабинета
- •Вход в систему для постоянных клиентов
- •Исследование книжного каталога
- •Фильтрация книг
- •Формирование корзины покупок
- •Управление корзиной
- •Оформление заказа
- •Завершение работы
- •Заключение
- •Список литературы
- •Приложение
Постановка задачи
Разработать веб-приложение «Электронный книжный магазин», работающее на основе серверной части, реализованной на языке Java с использованием технологии Servlets и контейнера сервлетов Jetty. В качестве прототипа разрабатываемого приложения можно использовать современные интернет-магазины (Ozon, Wildberries, Буквоед). Для работы с данными следует предусмотреть слой DAO (Data Access Object). Моей задачей в рамках данного проекта было создание полноценной серверной части веб-приложения книжного магазина. Остальные требования к архитектуре определяются студентом самостоятельно.
Разрабатываемое приложение должно быть создано с использованием следующих технологий:
бэкенд: Java 8, Servlets API, JDBC, Jetty,
фронтенд: HTML, CSS, JavaScript, Bootstrap 5,
база данных: MySQL 8.0,
среда разработки: IntelliJ IDEA,
система сборки: Apache Maven.
Веб-приложение должно обеспечивать выполнение следующих операций:
управление каталогом: просмотр, фильтрация, сортировка книг,
работа с пользователями: регистрация, аутентификация, управление сессиями,
управление корзиной: добавление/удаление товаров, изменение количества,
оформление заказов: покупка товаров, проверка наличия,
работа с данными: CRUD операции.
Интерфейсная часть программы должна содержать следующие компоненты:
главная страница с каталогом книг,
страница корзины для управления покупками,
страницы авторизации (вход/регистрация),
адаптивный дизайн для мобильных устройств,
модальные окна для детального просмотра,
систему уведомлений о действиях пользователя.
Пояснительная записка должна содержать:
постановку задачи,
обоснование выбранных технологий,
разработку архитектуры системы,
разработку отдельных модулей,
инструкцию по развертыванию и использованию,
анализ результатов тестирования,
заключение,
список литературы,
приложения с исходным кодом.
Данный курсовой проект выполняется в составе команды из двух человек со следующим распределением обязанностей:
В зону моей ответственности вошло:
разработка серверной части (backend) приложения,
проектирование и реализацию архитектуры бэкенда,
разработка Java сервлетов и бизнес-логики,
проектирование базы данных и SQL-запросов,
настройка серверного окружения и развертывание.
Второй участник проекта отвечает за:
Разработку клиентской части (frontend) приложения,
Создание HTML/CSS шаблонов и пользовательского интерфейса,
Реализацию клиентской логики на JavaScript,
Адаптивный дизайн и UX/UI проектирование,
Интеграцию фронтенда с бэкенд-API.
Обоснование выбора технологий
Выбор Java Servlets в качестве основы серверной части:
Java Servlets были выбраны в качестве технологии обработки HTTP-запросов по следующим причинам:
Преимущества, определившие выбор:
Прямая работа с HTTP протоколом — Servlets обеспечивают низкоуровневый доступ к запросам и ответам, что критично для понимания основ веб-разработки и реализации точного контроля над поведением приложения
Минимальные накладные расходы — в отличие от полноценных фреймворков (Spring, Jakarta EE), Servlets имеют минимальную абстракцию, что обеспечивает высокую производительность при обработке запросов клиентов книжного магазина
Простота развертывания и отладки — сервлеты легко запускаются в любом сервлет-контейнере (Jetty, Tomcat), что упрощает процесс разработки и тестирования
Прямая интеграция с Java экосистемой — хотя в данном проекте используются только Servlets, архитектура позволяет легко расширить функционал за счёт других Java EE технологий при необходимости
Рассмотренные альтернативы и причины их отклонения:
Spring Boot — отклонён из-за излишней сложности для учебного проекта и высокого уровня абстракции, скрывающего детали работы HTTP,
Jersey — отклонён, так как требовал бы дополнительных зависимостей и не обеспечивал такого же уровня понимания основ.
Выбор MySQL в качестве системы управления базами данных:
MySQL 8.0 была выбрана в качестве СУБД для хранения информации о книгах, пользователях и заказах по следующим критериям:
Критические требования, удовлетворяемые MySQL:
Эффективная работа с реляционными данными — структура данных книжного магазина (книги, пользователи, заказы, корзина) идеально ложится на реляционную модель
Опыт работы с MySQL.
Сравнение с альтернативными решениями:
PostgreSQL — имеет более сложную настройку и избыточный функционал для данной задачи,
SQLite — не подходит из-за отсутствия полноценной поддержки многопользовательского доступа.
Архитектурные особенности использования:
Connection pooling реализован на уровне приложения для эффективного управления подключениями,
PreparedStatement используется для всех запросов с параметрами, обеспечивая защиту от SQL-инъекций.
Выбор Jetty в качестве сервлет-контейнера:
Jetty 9.4 был выбран для развертывания сервлетов по следующим соображениям:
Ключевые преимущества:
Легковесность и скорость запуска — критично для цикла разработки, где требуется частый перезапуск сервера,
Простота встраивания — позволяет запускать приложение как standalone-программу без необходимости установки внешнего сервера,
Интеграция с Maven — jetty-maven-plugin обеспечивает развертывание изменений во время разработки.
Сравнение с альтернативами:
Apache Tomcat — имеет больший размер и более сложную конфигурацию,
Undertow — менее распространён и имеет меньшую документацию,
Самописный HTTP-сервер — отклонён из-за необходимости реализации множества стандартов HTTP.
Выбор Maven в качестве системы сборки:
Apache Maven был выбран для управления зависимостями и сборки проекта:
Обоснование выбора:
Стандартизация структуры проекта — обеспечивает понятную организацию исходного кода и ресурсов,
Централизованное управление зависимостями — упрощает подключение необходимых библиотек (MySQL Connector, Servlet API),
Интеграция с инструментами разработки — поддерживается всеми популярными IDE (IntelliJ IDEA, Eclipse).
Альтернативы:
Gradle — имеет более сложный синтаксис и избыточные возможности для данного проекта,
Ant — устаревшая технология с ручным управлением зависимостями,
Ручная сборка — непрактично при наличии нескольких зависимостей.
