JavaRush /Курсы /Модуль 3. Java Professional /Проект по теме: фронтенд

Проект по теме: фронтенд

Модуль 3. Java Professional
7 уровень , 9 лекция
Открыта

Проект опциональный и делать его не обязательно.

Задание: Нужно сделать UI для CRUD бэкенда, используя HTML, CSS, JS, jQuery. Делать будем админ-панель для управления аккаунтами онлайн-игры.

  1. Сделать fork из репозитория: https://github.com/vasylmalik/project-front.git
  2. Скачать свою версию проекта к себе на компьютер.
  3. Скачать себе Tomcat: https://tomcat.apache.org/download-90.cgi. Важно: Tomcat нужен именно версии 9, а не 10.
  4. Настроить запуск приложения через Идею: Alt + Shift + F9 -> Edit Configurations… -> Alt + insert -> tom (в строку поиска) -> Local.
    • После этого нужно нажать CONFIGURE и указать, куда скачан и распакован архив с Tomcat.
    • Во вкладке Deployment: Alt + insert -> Artifact… -> rpg:war exploded -> OK.
    • В поле Application context: оставить только / (слеш).
    • Нажать APPLY.
    • Закрыть окно настройки.
  5. Запустить приложение. Для этого: Alt + Shift + F9 -> (имя конфигурации, я назвал 'App" у себя) -> Run.
  6. После деплоя приложения откроется новая вкладка в выбранном при конфигурации браузере. Отлично, сервер настроен, дальше нужно работать с двумя файлами:
    • <project_dir>/src/main/webapp/html/my.html – здесь будет разметка и скрипты.
    • <project_dir>/src/main/webapp/css/my.css – здесь будет стили. Все что касается стилей – на твое усмотрение, никаких требований к ним нет.
  7. В разметку (my.html) добавить таблицу (не забудь ей указать id), в которой указать названия колонок:
    • #
    • Name
    • Title
    • Race
    • Profession
    • Level
    • Birthday
    • Banned
  8. Добавить парный тег <script> – здесь будем писать функции.
  9. Первая функция должна отправлять GET запрос на URL "/rest/players" – получить список. Результат нужно добавить к таблице из п.7 (вот и пригодился id таблицы). Если все сделал правильно – после перезапуска сервера у тебя на странице будет отображаться таблица на 4 строки. В первой строке – имена колонок, в остальных – данные, которые пришли с сервера.
  10. Теперь, желательно, добавить таблице границы ячеек, а то информация вообще нечитаемая.
  11. Теперь займемся пейджингом. Для этого нужно:
    • Под таблицей добавить секцию, например, <div>, в которой будут кнопки пейджинга.
    • Добавить функцию, которая отправит GET запрос на сервер, который возвращает общее количество аккаунтов на сервере. URL: "/rest/players/count".
    • Добавить выпадающий список на 3-4 числовых значения, сколько показывать аккаунтов за раз. Числа должны быть в диапазоне от 3 до 20 включительно.
    • В методе отображения списка аккаунтов (п.9) добавим расчет количества страниц, которые нужны при заданном количестве аккаунтов на страницу, чтоб можно было просмотреть все аккаунты.
  12. В функцию показа списка аккаунтов добавь параметр, который будет отвечать за номер страницы, которую показывать. Откорректируй URL, чтоб он параметрами запроса передавал "pageNumber" и "pageSize". Теперь при смене количества на страницу в выпадающем списке, должно показываться запрошенное количество аккаунтов:
  13. Теперь давай подкрасим номер текущей страницы, а то неудобно…
  14. Добавим в таблицу еще 2 колонки: Edit и Delete. Для каждой строки давай добавим иконки, которые будут отвечать за редактирование и удаление каждой записи. Можешь использовать либо картинки, которые есть в <project_dir>/src/main/webapp/img/, либо используй свои.
  15. Напиши функцию, которая будет отвечать за удаление аккаунта. Для этого нужно отправлять DELETE запрос на сервер на URL "/rest/players/{id}". При клике на картинку корзины – вызывай эту функцию. После вызова – не забудь обновлять список аккаунтов на текущей странице.
    • До удаления аккаунта с id=23
    • После удаления аккаунта с id=23. Обрати внимание, никаких кнопок, кроме корзины, не нажималось.
  16. Теперь напиши функцию, которая отвечает за редактирование аккаунта. При клике на нее давай скроем кнопку “Delete”, а картинку кнопки “Edit” поменяем на “Save”.
  17. Теперь добавим функционал для редактирования аккаунта. По клику на кнопку “Edit”, кроме смены картинки, нужно делать поля редактируемыми:
    • Name
    • Title
    • Race
    • Profession
    • Banned

    Обрати внимание, что значение в полях для редактирования должны быть те, что есть в аккаунте.

  18. Теперь сделаем отправку изменений по клику на кнопку “Save”. Для этого нужно отправить POST запрос на URL “/rest/players/{id}” и в качестве тела запроса передать значения всех пяти полей, которые можно изменять в виде JSON. Используй JSON.stringify({…}); После изменения, не забудь перезагрузить данные на текущей странице.
  19. Итак, из CRUD на данный момент должно быть сделано все, кроме “C” (Create). После кнопок пейджинга, добавь горизонтальную линию и текст о том, что здесь можно создать новый аккаунт. Кроме этого, добавь блоки текста и поля для ввода для параметров аккаунта:
    • Name – текст, от 1 до 12 символов.
    • Title – текст, от 1 до 30 символов.
    • Race – выпадающий список, допустимые значения смотри в API.
    • Profession – выпадающий список, допустимые значения смотри в API.
    • Level – число от 0 до 100.
    • Birthday – дата (<input type="date" …).
    • Banned – булевое значение.
  20. Теперь добавь кнопку, по клику на которую все введенные данные будут отправляться на сервер. Используй POST запрос на URL /rest/players. После ответа сервера, не забудь очистить поля для ввода данных и перезапросить список аккаунтов на текущей странице.
  21. Теперь можно добавить "красоты" через стили – здесь все на твое усмотрение. У меня вышло так:

Полезное: API сервера:

Get players list

URL /rest/players
Method Optional: Integer pageNumber, Integer pageSize
Data Params None
Success Response

Code: 200 OK
Code: 200 OK
Content: [
 {
  “id”:[Long],
  “name”:[String],
  “title”:[String],
  “race”:[Race],
  “profession”:[Profession],
  “birthday”:[Long],
  “banned”:[Boolean],
  “level”:[Integer]
 },
 …
]
Notes

pageNumber – параметр, который отвечает за номер отображаемой страницы при использовании пейджинга. Нумерация начинается с нуля.

pageSize – параметр, который отвечает за количество результатов на одной странице при пейджинге


public enum Race {
    HUMAN,
    DWARF,
    ELF,
    GIANT,
    ORC,
    TROLL,
    HOBBIT
}

public enum Profession {
    WARRIOR,
    ROGUE,
    SORCERER,
    CLERIC,
    PALADIN,
    NAZGUL,
    WARLOCK,
    DRUID
}

Get players count

URL /rest/players/count
Method GET
URL Params None
Data Params None
Success Response

Code: 200 OK

Content: Integer

Notes

Delete player

URL /rest/players/{id}
Method DELETE
URL Params id
Data Params None
Success Response Code: 200 OK
Notes

Если игрок не найден - ответ ошибкой с кодом 404.

Если значение id не валидное- ответ ошибкой с кодом 400.

Update player

URL /rest/players/{id}
Method POST
URL Params id
Data Params

{
  “name”:[String],       --optional
  “title”:[String],     --optional
  “race”:[Race], --optional
  “profession”:[Profession], --optional
  “banned”:[Boolean]    --optional
}
Success Response

Code: 200 OK
Content: {
  “id”:[Long],
  “name”:[String],
  “title”:[String],
  “race”:[Race],
  “profession”:[Profession],
  “birthday”:[Long],
  “banned”:[Boolean],
  “level”:[Integer]
 }

Notes

Обновляются только те поля, которые не null.

Если игрок не найден в БД - ответ ошибкой с кодом 404.

Если значение id не валидное - ответ ошибкой с кодом 400.

Create player

URL /rest/players
Method POST
URL Params None
Data Params

{
  “name”:[String],
  “title”:[String],
  “race”:[Race],
  “profession”:[Profession],
  “birthday”:[Long],
  “banned”:[Boolean], --optional, default=false 
  “level”:[Integer]
}

Success Response

Code: 200 OK
Content: {
  “id”:[Long],
  “name”:[String],
  “title”:[String],
  “race”:[Race],
  “profession”:[Profession],
  “birthday”:[Long],
  “banned”:[Boolean],
  “level”:[Integer]
 },

Notes

Мы не можем создать игрока, если:

  • указаны не все параметры из Data Params (кроме banned);
  • длина значения параметра “name” или “title” превышает размер соответствующего поля (12 и 30 символов);
  • значение параметра “name” пустая строка;
  • уровень находится вне заданных пределов (от 0 до 100);
  • “birthday”:[Long] < 0;
  • дата регистрации находятся вне заданных пределов.

В случае всего вышеперечисленного - ответ ошибкой с кодом 400.


Разбор проекта. Смотреть после выполнения!

Комментарии (36)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Виктор Уровень 109
1 декабря 2024
Сделал. Но я поседел и постарел, а потом ещё и полысел! Как же трудно быть джавасквиртизёром... Важная информация: Если первому игроку немножко изменить Name и Title - будет самое то!:)
Ислам Уровень 62 Expert
28 августа 2024
Несколько часов мучался, не получалось запустить сервер. Использовал версию TomCat 9.0.93, вроде соответствует условию, это же 9 версия, но нет оказывается и она не подходит. Устанавливайте только версию 9.0.31
Aliransa Уровень 109
26 ноября 2024
запустилась с 9.0.97. я мучалась с другими вещами))
Иван Корниенко Уровень 109
11 июля 2024
Александр Уровень 106 Expert
4 июня 2024
Проект довольно интересный, почти понравился. НО... очень опечалил тот факт, что в условии ни одного слова не сказано о том, что при создании аккаунта есть ограничение на дату рождения (она должна быть между 2000 и 3000 годами) . В итоге функцию написал, пытаюсь создать аккаунт, ввожу свой ДР (80-е гг.), у меня прилетает ошибка 400. А так как у аккаунта 7 полей, промучался часа три, но самостоятельно проблему не смог локализовать. Расстроился, что до конца решить задачу своим умом не смог, и пошел смотреть видео с решением. И тут я вижу, как лектор ставит в инпуте ограничения на ввод. Создаю аккаунт с "валидной" датой, и о чудо, всё работает. Произошло возгорание моего пукана, матерился несколько минут. Уважаемые модераторы, пожалуйста, добавьте упоминание об ограничениях даты рождения в аккаунте!!! Уверен, это сбережет время и нервы многих
Aliransa Уровень 109
26 ноября 2024
я прочитала этот коммент еще до проекта.. а в конце час не могла сохранить персонажа 1990 года, так как в дате же сама сделала в инпуте норм календарь.. а оказывается там во внутренностях самой джава-программы стояло ограничение
Филипп Уровень 106 Expert
2 мая 2024
Чтобы выполнить этот проект нужно пройти отдельный курс на JS т.к. тут в лекциях этого даже и близко нет. Пытался выполнить 4 дня, в итоге закончил делая одновременно с разбором.
Aliransa Уровень 109
26 ноября 2024
так же несколько суток параллельно с гуглением, жпт чатом и разбором проекта кое как собрала свой. ощущения мерзопакостные, будто пропустила целый курс перед проектом.. ну хоть понимание небольшое появилось куда и что засовывать
Евгений Уровень 106 Expert
22 апреля 2024
Если у кого-то сильное жжение сделать все в отдельном файлики на .js то чтобы подключить нужно найти WebConfig.java и добавить там registry.addResourceHandler("/js/**").addResourceLocations("/js/");
Дмитрий Уровень 106 Expert
25 апреля 2024
Боже, святой человек... А почему автоматически директории, которые мы создаём, не подтягиваются? В чём загадка?
Андрей Уровень 109
22 апреля 2024
в хроме если кликнуть на обновление страницы с зажатым Ctrl, сбросится и кэш тоже (полезно для применения стилей)
Сергей Уровень 106 Expert
20 апреля 2024
По аяксу туториал: w3schools.com
Роман Уровень 92
17 января 2024
Задание хорошее, но довольно сложное. Делал 2 недели каждый день по 2 часа, суммарно заняло 28 часов. Самые большие сложности вызвали пункты 11,12,14 и 15. Всем рекомендую разобрать джавовский код. Это помогает понять чего на некоторые запросы оно возвращает Bad request. Всем успехов, кто решит сделать эту задачу.
Антон Уровень 110 Expert
31 октября 2023
друзья у меня на пунктике когда нужно было делать разграничение в таблице, был ступор и обновлял и код проверял, никак не хотели появляться границы таблицы. Оказалось нужно чистить кэш!!!!