Web приложение - My Blog

Категория: Java Enterprise Edition
- 31 урок
- Длительность: 7:50:22
- Исходный код
- Обзор результата
- UI макеты
- 4742 просмотра
Описание курса
В рамках данного курса будет написано Web приложение с использованием Java технологий: Servlets, JSP, JSTL, JDBC.
В качестве среды разработки будет использовано IDE Eclipse. В качестве UI будет выбран готовый HTML шаблон и на его базе будет создано полноценное web приложение.
Курс состоит из 31 урока длительностью в среднем около 15 минут каждый, таким образом, выделяя по часу в день (15 минут на просмотр видео и 45 минут на выполнение задания), Вы освоите данный материал за 1 месяц
Выполняя по 5 уроков в день, работая 8 часов, Вы освоите данный материал за одну рабочую неделю (40 часов)
Курс ориентирован на Java разработчиков, которые освоили Java Core и познакомились с Java Servlets & JSP API. Цель курса закрепить практические знания по Servlet & JSP
Life demo: http://blog-devstudy.rhcloud.com (Если открыв ссылку Вы получили Service Temporarily Unavailable ошибку, просто обновите несколько раз страницу. В рамках бесплатного тарифа OpenShift, если приложением долго не пользуются OpenShift выгружает его из оперативной памяти, поэтому и возникает данная ошибка)
Для получения дополнительной информации по теме данного курса, рекомендуем следующие источники информации:
В рамках данного курса Вы научитесь
- Проектировать и создавать реляционные базы данных;
- Создавать web приложение на базе существующего шаблона;
- Использовать шаблон MVC для создания web системы любой сложности;
- Разбивать вашу будущую систему на отдельные модули с четким разграничением ответственности для каждого из них;
- Писать чистый и понятный другому программисту код;
- Использовать инструмент maven для создания web приложения;
- Загружать Java приложение на хостинг OpenShift;
- А также повысите Ваши знания в области Servlets, JSP, JSTL, JDBC, HTML.
Для успешного прохождения курса необходимо
- Java core: (Classes, IO, Collections, Exceptions, JDBC) (Для получения этих знаний рекомендуем курс Основы Java SE - HTTP сервер);
- Базовые знания SQL (select, insert, update, delete, основы транзакций) (Для получения этих знаний рекомендуем курс Основы SQL);
- Знакомство с Servlets и JSP технологиями. (Для получения этих знаний рекомендуем курс Web приложение - IShop);
- Базовые знания HTML, CSS, JavaScript. (Для получения этих знаний рекомендуем курс Макет интернет магазина - IShop).
План курса
-
1Постановка задачи и описание функций web приложения
Длительность урока: 11:53
Создание web приложения "Мой блог" на базе HTML шаблона, найденного в интернете, со следующими функциями:
- Отображение списка категорий статей;
- Отображение списка всех статей, отсортированных по убыванию времени создания;
- Отображение списка статей для выбранной категории, отсортированных по убыванию времени создания;
- Поиск статей по ключевому слову в названии статьи и ее тексту. (Для упрощения подразумеваем поиск по точному слову или словосочетанию);
- Постраничное отображение информации для списка статей и результатов поиска;
- Отображение информации о статье и обновление счетчика просмотров;
- Интеграция с социальными сервисами для шаринга информации о статье;
- Загрузка комментариев к статье;
- Написание нового комментария к статье;
- Аутентификация через социальные сети, как наиболее простой и широко распространенный способ на сегодняшний день, на примере Google+;
- Импорт профиля пользователя (имя, email, аватар) с Google+ при создании комментария;
- Отправка уведомления о новом комментарии на email владельца блога;
- Отправка запроса Contact Form на email владельца блога;
- Обработка ошибок: 404, ошибки времени выполнения, валидация данных;
- Отображение простых страниц на примере about.
-
2Установка и настройка окружения
Длительность урока: 12:33
- 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).
-
3Создание maven проекта
Длительность урока: 14:33
- Создание нового maven проекта в Eclipse;
- Подключение зависимостей servlet-api, jsp-api и jstl;
- Подключение логгера logback;
- Настройка компилятора maven;
- Создание базовых пакетов проекта;
- Создание структуры директории webapp;
- Настройка Servlets 3.1 в web.xml;
- Создание репозитория на github;
- Загрузка проекта на github.
-
4Создание базы данных
Длительность урока: 16:38
- Создание пользователя и базы данных через pgAdmin;
- Создание таблиц: category, article, account, comment;
- Создание последовательностей;
- Создание внешних ключей;
- Создание индексов;
- Создание дампа базы данных;
- Загрузка дампа базы данных на github.
-
5Заполнение тестовыми данными
Длительность урока: 13:48
- Генератор текста на примере http://www.blindtextgenerator.com/lorem-ipsum;
- Генератор имен на примере http://names.mongabay.com/male_names.htm;
- Генератор картинок различного расширения на примере https://placeimg.com/;
- Генератор аватарок на примере https://placeimg.com/;
- Использование социальных сетей для генерации аватарок;
- Загрузка генератора тестовых данных на github.
-
6Создание шаблона страниц и NewsController
Длительность урока: 19:05
- Создание шаблона всех JSP страниц проекта;
- Создание AbstractController;
- Создание NewsController и news.jsp;
- Запуск проекта на Tomcat;
- Настройка Eclipse проекта для запуска без deploy;
- Загрузка всех изменений текущего урока на github.
-
7Создание всех контроллеров проекта
Длительность урока: 11:41
- Создание ApplicationListener;
- Создание ArticleСontroller и article.jsp;
- Создание ContactСontroller и contact.jsp;
- Создание AboutСontroller и about.jsp;
- Создание SearchСontroller и search.jsp;
- Коррекция ссылок в проекте;
- Запуск проекта на Tomcat;
- Загрузка всех изменений текущего урока на github.
-
8Декомпозиция JSP
Длительность урока: 14:39
- Декомпозиция и форматирование page-template.jsp;
- Декомпозиция и форматирование article.jsp;
- Скачивание файлов шрифтов для иконок;
- Запуск проекта на Tomcat;
- Загрузка всех изменений текущего урока на github.
-
9Создание менеджера всех сервисов проекта
Длительность урока: 15:28
- Создание интерфейса BusinessService;
- Создание класса BusinessServiceImpl;
- Создание application.properties;
- Создание singleton ServiceManager;
- Создание AppUtil;
- Получение BusinessService в AbstractControler;
- Запуск проекта на Tomcat;
- Загрузка всех изменений текущего урока на github.
-
10Обработка ошибок в проекте
Длительность урока: 13:33
- Создание ErrorController и error.jsp;
- Реализация ErrorHandlerFilter;
- ApplicationException и ValidateException;
- 404 ошибка;
- Запуск проекта на Tomcat;
- Демонстрация обработки ошибок;
- Загрузка всех изменений текущего урока на github.
-
11Создание сущностей проекта
Длительность урока: 15:00
- Создание AbstractModel;
- Создание AbstractEntity;
- Создание классов сущностей: Category, Article, Account, Comment;
- Создание класса Items<T>;
- Avatar placeholder;
- Запуск проекта на Tomcat;
- Загрузка всех изменений текущего урока на github.
-
12Отображение категорий статей из базы данных
Длительность урока: 15:15
- Использование библиотеки commons-dbutils;
- Добавление зависимости в pom.xml;
- Создание SQLDAO компонента для получение объектов-сущностей из базы данных;
- Создание ResultSetHandler для категорий;
- Создание метода mapCategories в BusinessService;
- Вызов метода в AppContextListener;
- Реализация categories-dropdown.jsp;
- Реализация categories-table.jsp;
- Запуск проекта на Tomcat;
- Загрузка всех изменений текущего урока на github.
-
13Отображение всех статей блога
Длительность урока: 17:20
- Создание метода listArticles в BusinessService;
- Реализация метода getOffset();
- Изменение контроллера NewsController;
- Изменение news.jsp;
- Запуск проекта на Tomcat;
- Загрузка всех изменений текущего урока на github.
-
14Отображение статей по категориям
Длительность урока: 13:18
- Создание listArticles для категорий в BusinessService;
- Создание findCategoryByUrl в BusinessService;
- Изменение контроллера NewsController;
- Изменение categories-dropdown.jsp;
- Изменение categories-table.jsp;
- Запуск проекта на Tomcat;
- Загрузка всех изменений текущего урока на github.
-
15Реализация поиска по статьям
Длительность урока: 11:15
- Создание listArticles для поиска в BusinessService;
- Реализация SearchController;
- Отображение результатов поиска и ранее введенного поискового запроса;
- Изменение action поисковой формы (Важность метода GET при поиске);
- Запуск проекта на Tomcat;
- Загрузка всех изменений текущего урока на github.
-
16Реализация постраничного отображения
Длительность урока: 18:01
- Модель постраничного отображения;
- Класс Pagination, который будет описывать указанную модель;
- Класс PageItem и статические методы;
- Шаблон Builder для Pagination;
- Параметры Builder для Pagination;
- Работа компонента Pagination;
- Создание тега для постраничного отображения;
- Использование объекта Pagination;
- Запуск проекта на Tomcat;
- Загрузка всех изменений текущего урока на github.
-
17Просмотр и отображение статьи
Длительность урока: 15:59
- Создание viewArticle в BusinessService;
- Правила url для статьи и правила их парсинга;
- Создание RedirectToValidUrlException;
- Изменение ArticleController для отображения статей без комментариев;
- Изменение ссылок на статьи;
- Запуск проекта на Tomcat;
- Загрузка всех изменений текущего урока на github.
-
18Навигация по системе
Длительность урока: 9:59
- news для news страницы;
- news для всех остальных страниц;
- news / category для выбранной категории;
- news / category / article для статьи;
- Запуск проекта на Tomcat;
- Загрузка всех изменений текущего урока на github.
-
19Отображение комментариев для статьи
Длительность урока: 15:15
- Создание listComments в BusinessService;
- Изменение ArticleController;
- Изменение article.jsp;
- Логика отображения кнопки loadMore;
- Запуск проекта на Tomcat;
- Загрузка всех изменений текущего урока на github.
-
20Загрузка комментариев для Load More кнопки
Длительность урока: 17:26
- Реализация MoreCommentsController в пакете ajax;
- Индикатор загрузки loading.gif;
- Создание js функции moreComments;
- Запуск проекта на Tomcat;
- Загрузка всех изменений текущего урока на github.
-
21Интеграция с Google+ на стороне клиента
Длительность урока: 15:29
- Создание проекта в google console (https://console.developers.google.com);
- Создание API key и добавление его в application.properties;
- Создание кнопки "Залогиниться" на основании рекомендаций https://developers.google.com/identity/sign-in/web/;
- Создание методов onSignIn и gpLogout();
- google_signin_client_id и meta теги
- submitComment() для логина в Google+;
- Запуск проекта на Tomcat;
- Загрузка всех изменений текущего урока на github.
-
22Проработка UI для создания нового комментария
Длительность урока: 13:20
- Создание CommentForm;
- Mock метод createComment;
- Создание NewCommentController;
- Валидация данных для нового комментария;
- Реализация метода submitComment();
- Запуск проекта на Tomcat;
- Демонстрация работы ajax;
- Загрузка всех изменений текущего урока на github.
-
23Создание социальных сервисов на сервере
Длительность урока: 18:04
- Создание SocialAccount;
- Создание SocialService;
- Реализация GooglePlusSocialService;
- Создание AvatarService;
- Библиотека thumbnailator 0.4.8;
- Реализация FileStorageAvatarService;
- Загрузка всех изменений текущего урока на github.
-
24Логика создание нового комментария
Длительность урока: 18:21
- Создание метода createForm, используя библиотеку commons-beanutils;
- Методы в SQLDAO для создания нового комментария;
- Реализация логики создания нового комментария;
- Запуск проекта на Tomcat;
- Проверка алгоритма создания нового комментария;
- Пошаговая демонстрация работы метода createComment;
- Загрузка всех изменений текущего урока на github.
-
25Логика интернационализации и валидации форм
Длительность урока: 13:55
- Создание i18n/messages;
- Заполнение данными;
- Создание i18nService;
- Создание AbstractForm и метода для валидации;
- Переопределение метода валидации для CommentForm;
- Валидация для createComment;
- Необходимость валидации на стороне сервера при наличии валидации на стороне клиента;
- Запуск проекта на Tomcat;
- Загрузка всех изменений текущего урока на github.
-
26Реализация сервиса уведомлений
Длительность урока: 15:15
- Создание NotificationService;
- Реализация AsyncEmailNotificationService с использованием commons-email 1.4;
- Новые свойства в application.properties;
- ExecutorService для асинхронной отправки;
- Добавление уведомления после создания нового комментария;
- Запуск проекта на Tomcat;
- Загрузка всех изменений текущего урока на github.
-
27Обработка формы обратной связи
Длительность урока: 11:11
- Класс формы обратной связи: ContactForm
- Обработка запроса пользователя;
- Изменение ContactController;
- Добавление поддержки success уведомления на contact.jsp;
- Запуск проекта на Tomcat;
- Загрузка всех изменений текущего урока на github.
-
28Интернационализация JSP/JS и социальные сервисы
Длительность урока: 11:49
- Тег message.tag;
- Демонстрация интернационализации JSP файлов на примере использование тега на error.jsp;
- Файл динамических js сообщений - messages.jsp;
- Использование сервиса addthis.com для интеграции с социальными сервисами;
- Запуск проекта на Tomcat;
- Загрузка всех изменений текущего урока на github.
-
29Рефакторинг и FAQ по архитектуре проекта
Длительность урока: 23:28
- Рефакторинг кода на примере созданных классов в рамках проекта;
- Загрузка изменений на github;
- Сортировка по id для статей и комментариев и ее несоответствие времени создания;
- Отличие констант в файле app.properties и классе Constants;
- Использование приставки Abstract в некоторых классах проекта;
- Порядок следования методов в ServiceManager и BusinessServiceImpl;
- Аргументация создания ValidateException checked исключением
- Отличие преобразования ValidateException в ApplicationException на контроллере от SQLException в ApplicationException в сервисе
- Причина отсутствия DAO интерфейса
- Аргументация игнорирования i18nService в валидации форм
- Причина наличия комментариев только для двух методов в BusinessService
- Отличие приставки get от find
- Использование конструкторов и классов сервисов с модификатором package
- Использование модификаторов package и final для полей ServiceManager
-
30Обзор архитектуры и подготовка к загрузке на хостинг
Длительность урока: 17:37
- Сравнение реализации бизнес метода createComment и диаграммы, на базе которой проектировалось приложение;
- Возможности компонентного подхода при изменении логики работы приложения;
- Создание DemoNotificationService
- Создание DemoBusinessService
- Демонстрация работы изменений;
- Загрузка всех изменений текущего урока на github.
-
31Загрузка проекта на хостинг OpenShift
Длительность урока: 19:14
- Ценовая политика хостинга OpenShift https://www.openshift.com/pricing/plan-comparison.html;
- Создание домена на OpenShift;
- Создание публичного ключа на OpenShift;
- Использование Putty, Puttygen, Pageant (http://www.putty.org/) и WinSCP http://winscp.net
- Создание приложения на OpenShift;
- Добавление базы данных Postgresql на OpenShift;
- Формирование и загрузка дампа базы данных Postgresql на OpenShift;
- Загрузка приложения на OpenShift;
- Демонстрация работы приложения: http://blog-devstudy.rhcloud.com