{"id":21711298,"url":"https://github.com/maxbarsukov-itmo/web-4","last_synced_at":"2026-04-05T21:36:02.054Z","repository":{"id":209285814,"uuid":"717843253","full_name":"maxbarsukov-itmo/web-4","owner":"maxbarsukov-itmo","description":"🕸️ Веб-программирование: Лабораторная работа №4","archived":false,"fork":false,"pushed_at":"2023-11-28T04:57:22.000Z","size":2109,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-03-20T18:17:38.765Z","etag":null,"topics":["itmo","java","laboratory-work","maxbarsukov","spring-boot","vuejs","web"],"latest_commit_sha":null,"homepage":"https://se.ifmo.ru/~s367081/web/lab4","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maxbarsukov-itmo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-12T19:15:29.000Z","updated_at":"2024-09-09T21:35:08.000Z","dependencies_parsed_at":"2024-11-26T00:17:40.474Z","dependency_job_id":null,"html_url":"https://github.com/maxbarsukov-itmo/web-4","commit_stats":null,"previous_names":["maxbarsukov-itmo/web-4"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/maxbarsukov-itmo/web-4","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxbarsukov-itmo%2Fweb-4","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxbarsukov-itmo%2Fweb-4/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxbarsukov-itmo%2Fweb-4/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxbarsukov-itmo%2Fweb-4/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maxbarsukov-itmo","download_url":"https://codeload.github.com/maxbarsukov-itmo/web-4/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxbarsukov-itmo%2Fweb-4/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31451444,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T21:22:52.476Z","status":"ssl_error","status_checked_at":"2026-04-05T21:22:51.943Z","response_time":75,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["itmo","java","laboratory-work","maxbarsukov","spring-boot","vuejs","web"],"created_at":"2024-11-25T23:21:11.842Z","updated_at":"2026-04-05T21:36:02.019Z","avatar_url":"https://github.com/maxbarsukov-itmo.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Лабораторная работа 4\n\n## Вариант `14`\n\n\u003cimg alt=\"anime\" src=\"./.resources/anime.gif\" height=\"200\"\u003e\n\n\u003e I had a problem, so I thought to use Java.\n\u003e \n\u003e Now I have a `ProblemFactory`\n\n[![Made with: Spring](https://img.shields.io/badge/Spring-white?style=for-the-badge\u0026logo=spring\u0026logoColor=6DB33F)](https://rubyonrails.org/)\n[![Made with: Spring Boot](https://img.shields.io/badge/Spring%20Boot-white?style=for-the-badge\u0026logo=springboot\u0026logoColor=6DB33F)](https://rubyonrails.org/)\n[![Made with: Spring Security](https://img.shields.io/badge/Spring%20Security-white?style=for-the-badge\u0026logo=springsecurity\u0026logoColor=6DB33F)](https://rubyonrails.org/) \\\n[![Made with: Java](https://img.shields.io/badge/Java-176579?style=for-the-badge\u0026logo=coffeescript\u0026logoColor=E78A2A)](https://www.ruby-lang.org/)\n[![Made with: JavaMail](https://img.shields.io/badge/JavaMail-DD344C?style=for-the-badge\u0026logo=maildotru\u0026logoColor=white)](https://www.ruby-lang.org/)\n[![Made with: Liquibase](https://img.shields.io/badge/Liquibase-2962FF?style=for-the-badge\u0026logo=liquibase\u0026logoColor=white)](https://rubyonrails.org/)\n[![Made with: SOAP](https://img.shields.io/badge/SOAP-1261FE?style=for-the-badge\u0026logo=ibmcloud\u0026logoColor=white)](https://rubyonrails.org/) \\\n[![Made with: PostgreSQL](https://img.shields.io/badge/PostgreSQL-4169E1?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white)](https://rubyonrails.org/)\n[![Made with: Docker](https://img.shields.io/badge/docker-2496ED?style=for-the-badge\u0026logo=docker\u0026logoColor=white)](https://rubyonrails.org/)\n[![Made with: Vue.js](https://img.shields.io/badge/Vue.js-11C38C?style=for-the-badge\u0026logo=vue.js\u0026logoColor=2F465A)](https://rubyonrails.org/)\n\n|.pdf|.docx|\n|-|-|\n| [report](./docs/report.pdf) | [report](./docs/report.docx) |\n\n\nПереписать приложение из [предыдущей лабораторной работы](https://se.ifmo.ru/courses/web#lab3) с использованием следующих технологий:\n\n- Уровень **back-end** должен быть основан на [Spring](https://spring.io/).\n- Уровень **front-end** должен быть построен на [Vue.js](https://vuejs.org/) с использованием обычных полей ввода HTML\n- Взаимодействие между уровнями **back-end** и **front-end** должно быть организовано посредством **REST API**.\n\nПриложение по-прежнему должно включать в себя 2 страницы - _стартовую_ и _основную_ страницу приложения. Обе страницы приложения должны быть адаптированы для отображения в 3 режимах:\n- **\"Десктопный\"** - для устройств, ширина экрана которых равна или превышает **1210** пикселей.\n- **\"Планшетный\"** - для устройств, ширина экрана которых равна или превышает **773**, но меньше **1210** пикселей.\n- **\"Мобильный\"**- для устройств, ширина экрана которых меньше **773** пикселей.\n\n### Дополнительное задание:\n\n1. При регистрации и входе в аккаунт отправлять пользователю письмо на почту (**JavaMail**).\n2. Переписать REST сервис в **SOAP** сервис.\n\n\u003cimg alt=\"Areas\" src=\"./.resources/areas.png\" height=\"350\"\u003e\n\n### Стартовая страница должна содержать следующие элементы:\n\n- \"**Шапку**\", содержащую ФИО студента, номер группы и номер варианта.\n- **Форму для ввода логина и пароля**. Информация о зарегистрированных в системе пользователях должна храниться в отдельной таблице БД (пароль должен храниться в виде хэш-суммы). Доступ неавторизованных пользователей к основной странице приложения должен быть запрещён.\n\n### Основная страница приложения должна содержать следующие элементы:\n\n- Набор полей ввода для задания координат точки и радиуса области в соответствии с вариантом задания: `Radio {'-4','-3','-2','-1','0','1','2','3','4'}` для координаты по **оси X**, `Text (-5 ... 5)` для координаты по **оси Y**, и `Radio {'-4','-3','-2','-1','0','1','2','3','4'}` для задания **радиуса области**. Если поле ввода допускает ввод заведомо некорректных данных (таких, например, как буквы в координатах точки или отрицательный радиус), то приложение должно осуществлять их _валидацию_.\n- **Динамически обновляемую картинку**, изображающую область на координатной плоскости в соответствии с номером варианта и точки, координаты которых были заданы пользователем. Клик по картинке должен инициировать сценарий, осуществляющий определение координат новой точки и отправку их на сервер для проверки её попадания в область. Цвет точек должен зависить от факта попадания / непопадания в область. Смена радиуса также должна инициировать перерисовку картинки.\n- **Таблицу** со списком результатов предыдущих проверок.\n- Ссылку, по которой аутентифицированный пользователь может **закрыть свою сессию** и вернуться на стартовую страницу приложения.\n\n### Дополнительные требования к приложению:\n\n- Все результаты проверки должны сохраняться в базе данных под управлением СУБД `Oracle`.\n- Для **доступа к БД** необходимо использовать `Spring Data`.\n\n### Вопросы к защите лабораторной работы:\n\n**Ответы**: [*новые*](https://github.com/EgorMIt/ITMO/blob/master/2%20-%20%D0%92%D0%B5%D0%B1-%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/Lab4.md) и [*старые*](https://github.com/AppLoidx/Web-Development-Cheats/blob/master/itmo-university/labs/Lab4.md)\n\n1. Платформа `Java EE`. Спецификации и их реализации.\n2. Принципы `IoC`, `CDI` и `Location Transpanency`. Компоненты и контейнеры.\n3. Управление жизненным циклом компонентов. Дескрипторы развёртывания.\n4. `Java EE API`. Виды компонентов. Профили платформы `Java EE`.\n5. Компоненты `EJB`. `Stateless` \u0026 `Stateful` `Session Beans`. `EJB Lite` и `EJB Full`.\n6. Работа с электронной почтой в `Java EE`. `JavaMail API`.\n7. `JMS`. Реализация очередей сообщений. Способы доставки сообщений до клиента. `Message-Driven Beans`.\n8. Понятие транзакции. Управление транзакциями в `Java EE`. `JTA`.\n9. Веб-сервисы. Технологии `JAX-RS` и `JAX-WS`.\n10. Платформа `Spring`. Сходства и отличия с `Java EE`.\n11. Модули `Spring`. Архитектура `Spring Runtime`. `Spring Security` и `Spring Data`.\n12. Реализация `IoC` и `CDI` в `Spring`. Сходства и отличия с `Java EE`.\n13. Реализация `REST API` в `Java EE` и `Spring`.\n14. `React JS.` Архитектура и основные принципы разработки приложений.\n15. Компоненты `React`. `State` \u0026 `props`. \"Умные\" и \"глупые\" компоненты.\n16. Разметка страниц в `React`-приложениях. `JSX`.\n17. Навигация в `React`-приложениях. `ReactRouter`.\n18. Управление состоянием интерфейса. `Redux`.\n19. `Angular`: архитектура и основные принципы разработки приложений.\n20. `Angular`: модули, компоненты, сервисы и `DI`.\n21. `Angular`: шаблоны страниц, жизненный цикл компонентов, подключение `CSS`.\n22. `Angular`: клиент-серверное взаимодействие, создание, отправка и валидация данных форм.\n\n### Как запустить?\n\nЭкспорт переменных окружения:\n\n    export $(cat .env | xargs)\n\nБаза данных:\n\n    docker compose up\n\nЗапуск **back-end**:\n\n    ./gradlew genJaxb\n    ./gradlew bootRun\n\nЗапуск **front-end**:\n\n    cd frontend\n    npm run dev\n\n\n## Лицензия \u003ca name=\"license\"\u003e\u003c/a\u003e\n\nПроект доступен с открытым исходным кодом на условиях [Лицензии MIT](https://opensource.org/licenses/MIT).\n*Авторские права 2023 Max Barsukov*\n\n**Поставьте звезду :star:, если вы нашли этот проект полезным.**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxbarsukov-itmo%2Fweb-4","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaxbarsukov-itmo%2Fweb-4","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxbarsukov-itmo%2Fweb-4/lists"}