В рамках данного курса будет написано Web приложение My Resume с использованием Java технологий: Spring Core, String MVC, Spring Data JPA, Hibernate, Spring Security, Sitemesh, Spring Data ElasticSearch, JSP, JSTL, Hibernate-Validators, Facebook API, Spring Data Mongo.
Пользовательский интерфейс построен с использованием HTML5, CSS3, Bootstrap, JQuery.
Для долговременного хранения данных будут использованы PostgresSQL и MongoDb. Таким образом проект будет изначально написан для работы с PostgresSQL, а затем портирован на MongoDb.
Курс состоит из 22 уроков. Каждый урок состоит из теоретического обзора технологии, примера ее использования в данном проекте и домашнего задания. В начале следующего урока поясняется каким образом нужно было выполнить домашнее задание и рассматривается новая тема.
На последних уроках выполняется полный обзор разработанного проекта и комментирование обязанностей каждого компонента в проекте. Таким образом учащийся имеет возможность рассмотреть эталонный код проекта и получить ответы на возможные вопросы, которые возникли у него при разработке приложения. Таким образом данный курс предоставляет Вам возможность самостоятельно разработать проект и сравнить его с эталонной реализацией в конце курса, чтобы не ограничивать Вас в реализации проекта эталонной реализацией в конце каждого урока. Такой подход позволяет максимально эффективно изучить выбранные технологии, но требует от учащегося хороших базовых знаний и опыта работы в JEE.
Работая над проектом Вы освоите не только разработку приложений на Java, но и как правильно составлять резюме разработчика: Одним выстрелом – двух зайцев!
Для получения дополнительной информации по теме данного курса, рекомендуем следующие источники информации:
-
PostgreSQL документация
-
Spring документация
-
JPA спецификация
-
Spring Data JPA документация
-
Spring Data Mongo DB документация
-
Spring Data ElasticSearch документация
-
Spring Security документация
-
Крис Шефер, Кларенс Хо, Роб Харроп, Spring 4 для профессионалов (Pro Spring) – М.:Вильямс, 2016 – 752 с. – ISBN 978-5-8459-1992-2
-
Роберт Мартин, Чистый код: создание, анализ и рефакторинг – СПб.:Питер, 2010. – 464 с. – ISBN 978-5-49807-381-1
-
Сергей Моренец, Разработка Java приложений – Книга 1
-
Сергей Моренец, Разработка Java приложений – Книга 2
Подготовка к разработки
Настройка окружения:
FireFox - HTML браузер (https://www.mozilla.org/en-US/firefox/new/);
Firebug - плагин для FireFox, который позволяет просматривать структуру страницы и параметров HTTP запросов (http://getfirebug.com/);
JDK 1.7 и настройка JAVA_HOME (http://www.oracle.com/technetwork/java/javase/downloads/index.html);
Tomcat 8.0 и запуск в debug режиме (https://tomcat.apache.org/);
Postgresql 9.5.0 - сервер базы данных (http://www.postgresql.org/download/);
PgAdmin - админпанель для работы с Postgresql;
SQL Manager Postgres - SQL клиент для работы с сервером Postgresql (http://www.sqlmanager.net/en/products/postgresql/manager);
Eclipse Mars - IDE для разработки на Java (http://www.eclipse.org/downloads);
Git for windows - инструмент системы контроля версий Git for windows (https://git-scm.com/download/win).
Постановка задачи - разработка web приложения по составлению резюме
Обзор архитектуры - использование шаблона MVC для проекта и определение правил взаимодействия между компонентами
Создание Maven проекта в Eclipse для данной системы, определение структуры проекта и загрузка кода на github
Напоминание возможностей Servlet, Listener, Filter, JSP компонентов для данного проекта
Запуск Tomcat в отладочном режиме и отладка web приложений
Основные правила передачи управления между Servlet, Filter и JSP при использовании MVC шаблона
Обзор все UI макетов, которые необходимы для разработки данного проекта
Обзор основных объектов реляционной базы данных: таблицы, индексы, проверки, представления, материализованное представления, последовательности, функции, процедуры, триггеры, пользовательские типы данных, пакеты и схемы, пользователи и привилегии
DDL, DML, SELECT, Transactions. (Для более глубокого изучения SQL рекомендуем курс Основы SQL (https://www.udemy.com/basic-sql))
Пример проектирование базы данных для отдельного тестового проекта
Проектирование базы данных для проекта My Resume, обзор основных таблиц и связей между ними (Выполнение домашнего задания прошлого урока)
Создание генератора тестовых данных для проекта (Выполнение домашнего задания прошлого урока)
Скачивание и настройка Bootstrap, JQuery и FontAwesome для проекта
Обзор Bootstrap Grid System (Для более глубокого изучения HTML, CSS и Bootstrap рекомендуем курс: Макет интернет магазина - IShop (https://www.udemy.com/web-ishop/))
Создание странички отображение профиля с помощью bootstrap
Разработка web приложения
Проблема дублирования и сложности кода представления и ее решение с помощью шаблонизации и декомпозиции
Обзор возможностей SiteMesh3
Пример декомпозиции страницы профиля пользователя с помощью тегов и jsp include
Декомпозиция странички профиля для проекта (Выполнение домашнего задания прошлого урока)
Архитектура Spring IoC
Spring Configurations: XML, Annotation, Java
Bean scopes
Lifecycle callbacks
Aware interfaces
FactoryBean
Spring Annotations
BeanFactory vs ApplicationContext
Spring Resources
Пример конфигурации Spring для проекта
Основы Spring MVC
DispatcherServlet и его конфигурирование в web.xml или WebApplicationInitializer
Конфигурация основных компонентов Spring MVC
@Controller и @RequestMapping
View resolvers
Handling exceptions
Interceptors
Spring MVC Resources
Пример использования Spring MVC для проекта
Демонстрация работы Spring MVC в проекте
Основы Java ORM
Стандарт JPA
Требования к Entity
Persistent Fields vs Persistent Properties
Простые и составные ключи
Обзор основных аннотаций JPA
Inheritance Mapping Strategies
Отношения в Entities и загрузка дочерних объектов
JPA архитектура
Основные методы EntityManager
Entity Lifecycle Management
JPQL & Query интерфейс
Основы Spring Data
Примеры создания динамических репозиториев с помощью Spring Data JPA
Spring Data Magic and Supported keywords inside method names
Пример использования Spring Data + JPA Hibernate в проекте
Демонстрация работы Spring Data + JPA Hibernate в проекте
Решение проблемы LazyInitializationException
Создание всех классов сущностей для проекта (Выполнение домашнего задания прошлого урока)
Основы обработки HTML форм. Использование @ModelAttribute
Обработка multipart форм с помощью Spring MVC
Отображение html формы на JSP
Пример обработки формы с коллекцией Skill для проекта
Демонстрация работы обработки формы
Основы валидации данных. вводимых пользователем
javax.validation.constraints, org.hibernate.validator.constraints и пользовательские аннотации для валидации
Добавление аннотаций в формы
Активирование валидации для проекта и добавление message.properties
Пример создания пользовательской аннотации и обработчика данной аннотации
Изменение методов контроллеров для обработки результатов валидации
Использование alert компонента для отображения ошибок на пользовательском интерфейсе
Правила поиска ключа для интернационализации в Spring MVC
Демонстрация работы валидации для проекта
Повышение модульности кода, выделение алгоритма работы системы в отдельные бизнес сервисы
Группировка бизнес функций в бизнес сервисы
Декларативное управление транзакциями с помощью @Transactional
Настройка поддержки декларативного управления транзакциями в Spring Config
Создание класса сервиса, выполняемого по расписанию
Объяснение алгоритма работы динамических прокси, поддерживающих декларативное управление транзакциями
Основы AJAX
Реализация контроллера для обработки AJAX запросов
Реализация отдельного шаблона SiteMesh для AJAX ответов
Изменения в ErrorHandler для AJAX ошибок
Пример использования Spring Data Web Support для реализации постраничного отображения данных
Использование JQuery ajax функции для выполнения AJAX запросов
Формирование и считывание дополнительных параметров для js функций с помощью data-* атрибутов
Демонстрация работы AJAX запросов
Демонстрация обработки ошибок при AJAX запросах
Основы полнотекстового поиска для web приложения
Возможности ElasticSearch
Использование Spring Data для взаимодействия с ElasticSearch
Spring Config для конфигурирования ElasticSearch
Моделирования данных для ElasticSearch
Создание динамических репозиториев для взаимодействия с ElasticSearch
Использование виртуальной машины Tomcat для запуска ElasticSearch сервиса
Пример использования ElasticSearch в web проекте
Правила моделирования объектов сущностей для My Resume проекта
Начальное индексирование всех данных из базы данных
Загрузка Lazy коллекций при индексировании
Использование TransactionSynchronizationManager для выполнения кода после успешного commit
Демонстрация работы поискового движка
Архитектура Spring Security. Spring Security фильтры
Конфигурация Spring Security в проекте
Создание модели хранения текущего пользователя
Реализация UserDetailsService
SecurityUtil для программного доступа к Spring Security
Контроллер и JSP для логина в систему
Основы Method Security
Основы Remember-Me Authentication
Основы Session Management
Expression-Based Access Control
Spring Security tags
Spring Data Integration
Демонстрация работы SpringSecurity
Архитектура Email системы. Протокол SMTP
Отправка email из java приложений
Основы email шаблонизации
Использование Spring xml конфигурационного файла для считывания настроек email шаблонов
Асинхронная отправка email писем с web приложения с помощью ExecuterService
Spring Config для Email
Пример использования Spring FactoryBean для создания ExecuterService бина
Использование Freemaker как обработчика email шаблонов
Основы интеграция web приложения с социальными сервисами
Диаграмма взаимодействия между web приложением и социальным сервисом
Создание и конфигурирования Facebook приложения
Использование Restfb библиотеки
Создание Facebook контроллера
Создание SocialService и его реализация для Facebook
Создание UI для интеграции с Facebook
Демонстрация работы Login via Facebook функции
XSS атаки
SQL инъекции
Переполнение логов
Закрытие ресурсов
DDOS атаки
Контроль доступа к ресурсам
Валидация данных
Межсайтовая подделка запроса
Использование компонентов с известными уязвимостями
Нестандартные порты и пароли
Принцип скрытия информации об ошибках
Хорошие пароли
Captcha
Основные векторы улучшений производительности
Правильный скелет HTML странички
Сжатие и объединение JS & CSS
Использование архивирования текстовых данных при передачи
Обработка картинок
Кэширование картинок, CSS, JS
DB Pool
Thread Pool
JVM options
SQL производительность
Логирование SQL запросов Hibernate
Утилита Explain
Денормализация таблиц
Кэширование на сервере
Производительное логирование
Развертывание web приложения
Основные хостинги предоставляющие Java хостинг
Создание AWS EC2 instance
Настройка AWS фаервола
Установка программных компонентов на Ubuntu Server
Загрузка дампа базы данных на AWS EC2
Сборка. конфигурирование и загрузка ROOT.war на AWS EC2
Демонстрация работы загруженного приложения на удаленном сервере
Вертикальное масштабирование
Простая архитектура web приложения без горизонтального масштабирования
Масштабирование JEE server with application
Масштабирование сервера кэширования данных
Использование очередей задач для масштабирования бизнес логики
Балансировка DNS
Масштабирование файловых серверов
Репликация баз данных
Вертикальный шардинг баз данных
Горизонтальный шардинг баз данных
NoSQL решения
Теорема CAP
Горизонтальное масштабирование MongoDb
Полный обзор первой версии проекта My Resume с детальным пояснением особенно значимых компонентов и модулей
Векторы оптимизации логики при использовании реляционной базы данных
Проверка приложения на устойчивость к известным уязвимостям и атакам
Проверка приложения на производительность
Пример логирования всех запросов генерируемы Hibernate, анализ плана выполнения запросов и кэширования объектов на стороне сервера
Сравнение схемы работы приложения, спроектированной в начале курса с результирующим кодом, который реализует данную схему
Обзор базовых операций при работе с MongoDB
Создание тестовой базы данных
Изменения в проекте, необходимые для миграции с Postgres на MonoDb
Обзор преимуществ Spring Data абстракции при миграции на новый источник данных
Важность чистого кода
Составные чистого кода на примере использования в проекте My Resume
Дополнительные и развернутые источники чистого кода в Java