|
| 1 | +# 🎓 Учебный Java-проект: от JDBC до веб-приложений ("java_09") |
| 2 | + |
| 3 | +Этот проект — практическая песочница для изучения ключевых технологий Java-разработки. Вы пройдете путь от основ работы с базами данных до создания полноценного многомодульного веб-приложения. |
| 4 | + |
| 5 | +----- |
| 6 | + |
| 7 | +## 🎯 Цель и философия проекта |
| 8 | + |
| 9 | +Главная цель — не просто показать, *как* работает технология, а *почему* выбрано именно такое решение. Проект спроектирован так, чтобы наглядно продемонстрировать эволюцию подходов к хранению данных и построению веб-архитектуры. Он идеально подходит для: |
| 10 | + |
| 11 | + * **Начинающих Java-разработчиков**, желающих увидеть, как теория применяется на практике. |
| 12 | + * **Студентов**, изучающих базы данных, веб-технологии и многопоточность. |
| 13 | + * **Всех, кто хочет освежить знания** по классическому стеку Java (Servlets, JDBC) перед изучением современных фреймворков вроде Spring. |
| 14 | + |
| 15 | +----- |
| 16 | + |
| 17 | +## 🏗️ Архитектура и структура модулей |
| 18 | + |
| 19 | +Проект построен на **Apache Maven** и разделен на независимые модули. Это позволяет изучать каждую технологию изолированно, не отвлекаясь на сложность всего приложения. |
| 20 | + |
| 21 | +### 📦 Модули проекта |
| 22 | + |
| 23 | +Каждый модуль — это отдельный мини-проект со своей задачей. |
| 24 | + |
| 25 | + * **`01_JDBC`** — **Основы работы с базами данных** |
| 26 | + |
| 27 | + * **Ключевые концепции**: Прямое взаимодействие с PostgreSQL через **JDBC**. |
| 28 | + * **Что внутри**: |
| 29 | + * `PreparedStatement` для безопасной работы с SQL-запросами и защиты от инъекций. |
| 30 | + * **Пул соединений (Connection Pool)** для оптимизации производительности. |
| 31 | + * Простейший веб-интерфейс (JSP + Servlets) для CRUD-операций (Create, Read, Update, Delete). |
| 32 | + * Тесты на **JUnit** и **Cucumber** для проверки логики работы с БД. |
| 33 | + |
| 34 | + * **`webapp`** — **Центральный модуль: веб-приложение "База резюме"** |
| 35 | + |
| 36 | + * **Ключевые концепции**: Архитектура веб-приложения, паттерн "Strategy", эволюция хранилищ данных. |
| 37 | + * **Что внутри**: |
| 38 | + * **Модель данных**: Классы `Resume`, `Contact`, `Organization` и др. |
| 39 | + * **Слой хранения (Storage Layer)**: |
| 40 | + * Интерфейс `IStorage` определяет контракт для всех видов хранилищ. |
| 41 | + * **Примитивные реализации (в памяти)**: `ArrayStorage` и `MapStorage` для демонстрации базовых коллекций. |
| 42 | + * **Файловые реализации**: `FileStorage` (сериализация), `XmlStorage` (JAXB), `JsonStorage` (GSON/Jackson) — показывают разные способы персистентности. |
| 43 | + * **База данных**: `SqlStorage` — наиболее "боевая" реализация на PostgreSQL. |
| 44 | + * **Веб-слой**: Классические **Servlets** в роли контроллеров и **JSP** в роли представлений. |
| 45 | + * **Тестирование**: Полное покрытие тестами всех реализаций `IStorage`. |
| 46 | + |
| 47 | + * **`02_SwingThreads`** — **Многопоточность в GUI** |
| 48 | + |
| 49 | + * **Ключевые концепции**: Проблема "замораживания" UI и её решение с помощью фоновых потоков (`SwingWorker`). |
| 50 | + * **Что внутри**: Простое десктопное приложение на **Swing**, выполняющее долгую операцию без блокировки интерфейса. |
| 51 | + |
| 52 | + * **`WebCalc`** и **`NetworkInterfaces`** |
| 53 | + |
| 54 | + * **Ключевые концепции**: Микро-примеры для демонстрации базовой работы сервлетов и сетевых API Java. |
| 55 | + |
| 56 | +----- |
| 57 | + |
| 58 | +## 🛠️ Технологический стек |
| 59 | + |
| 60 | + * **☕ Язык**: Java 21 |
| 61 | + * **📦 Сборка**: Apache Maven |
| 62 | + * **🗄️ База данных**: PostgreSQL |
| 63 | + * **🌐 Веб**: Java Servlets, JSP |
| 64 | + * **🧪 Тестирование**: JUnit 5, Cucumber |
| 65 | + * **📄 Работа с файлами**: JAXB (для XML), Java Serialization |
| 66 | + * **🖥️ GUI**: Swing |
| 67 | + |
| 68 | +----- |
| 69 | + |
| 70 | +## 🚀 Быстрый старт и запуск |
| 71 | + |
| 72 | +Следуйте этим шагам, чтобы запустить проект локально. |
| 73 | + |
| 74 | +### 1\. Предварительные требования |
| 75 | + |
| 76 | + * **Java 21 JDK** |
| 77 | + * **Apache Maven** |
| 78 | + * **PostgreSQL** (рекомендуется версия 13+) |
| 79 | + * **Git** |
| 80 | + * **IDE** (например, IntelliJ IDEA) с поддержкой Maven и сервера приложений (Tomcat). |
| 81 | + |
| 82 | +### 2\. Настройка базы данных |
| 83 | + |
| 84 | +Выполните следующие SQL-команды, чтобы создать базу данных и пользователя. |
| 85 | + |
| 86 | +```sql |
| 87 | +CREATE DATABASE resumes; |
| 88 | +CREATE USER topjava WITH PASSWORD 'password'; |
| 89 | +GRANT ALL PRIVILEGES ON DATABASE resumes TO topjava; |
| 90 | +``` |
| 91 | + |
| 92 | +### 3\. Конфигурация проекта |
| 93 | + |
| 94 | +Скопируйте файлы-примеры конфигурации и укажите в них свои данные для подключения к БД: |
| 95 | + |
| 96 | + * В модуле `01_JDBC`: скопируйте `db.properties.template` в `db.properties`. |
| 97 | + * В модуле `webapp`: скопируйте `webapp.properties.template` в `webapp.properties`. |
| 98 | + |
| 99 | +### 4\. Сборка и тестирование |
| 100 | + |
| 101 | +Откройте терминал в корневой папке проекта и выполните: |
| 102 | + |
| 103 | +```bash |
| 104 | +# Сборка всех модулей и запуск тестов |
| 105 | +mvn clean install |
| 106 | +``` |
| 107 | + |
| 108 | +### 5\. Запуск веб-приложения (`webapp`) |
| 109 | + |
| 110 | +Проще всего запустить приложение из вашей IDE: |
| 111 | + |
| 112 | +1. Настройте конфигурацию запуска для **Apache Tomcat**. |
| 113 | +2. Добавьте артефакт `webapp.war` (или `webapp:war exploded`) в деплоймент. |
| 114 | +3. Запустите сервер. Приложение будет доступно по адресу `http://localhost:8080/webapp`. |
| 115 | + |
| 116 | +----- |
| 117 | + |
| 118 | +## 📐 Ключевые концепции и принципы |
| 119 | + |
| 120 | +Этот проект — не просто набор кода, а демонстрация важных инженерных практик. |
| 121 | + |
| 122 | + * **Модульность**: Разделение на независимые компоненты упрощает понимание и переиспользование кода. |
| 123 | + * **Принцип подстановки Барбары Лисков (LSP из SOLID)**: Благодаря интерфейсу `IStorage` мы можем легко заменить хранилище в памяти на хранилище в БД без изменения бизнес-логики. |
| 124 | + * **Паттерн "Стратегия"**: Разные реализации `IStorage` — это и есть стратегии хранения данных. |
| 125 | + * **Тестирование**: Проект показывает, как писать юнит-тесты (JUnit) для проверки отдельных классов и BDD-тесты (Cucumber) для проверки поведения всей системы. |
| 126 | + * **CI/CD**: В репозитории есть готовые конфигурационные файлы для **GitHub Actions** и **GitLab CI**, включающие сборку, тестирование и анализ покрытия кода с помощью **JaCoCo**. |
| 127 | + |
| 128 | +----- |
| 129 | + |
| 130 | +## 🌱 Возможные доработки и вклад в проект |
| 131 | + |
| 132 | +Этот проект можно и нужно развивать! Вот несколько идей: |
| 133 | + |
| 134 | +1. **Рефакторинг на Spring**: Переписать `webapp` с использованием Spring Boot/MVC/Data JPA, чтобы сравнить классический подход с современным. |
| 135 | +2. **Добавить REST API**: Реализовать REST-контроллеры для управления резюме и "оживить" их с помощью простого фронтенда на JavaScript. |
| 136 | +3. **Контейнеризация**: Добавить `Dockerfile` и `docker-compose.yml` для запуска всего приложения (веб-сервер + база данных) в один клик. |
| 137 | +4. **Улучшить UI**: Заменить JSP на более современный шаблонизатор (например, Thymeleaf) или создать полноценный SPA-фронтенд (React/Vue). |
| 138 | +5. **Добавить новые реализации `IStorage`**: Например, для работы с MongoDB или другим NoSQL-хранилищем. |
0 commit comments