User Professor Hans Noodles
Professor Hans Noodles
41 уровень

Часть 1. Что нужно знать перед изучением Spring и JavaEE

Статья из группы Java Developer
Если ты уже закончил изучение Java SE или близок к этому, пришло время задуматься о дальнейших шагах в покорении профессии Java-девелопера. Часть 1. Что нужно знать перед изучением Spring и JavaEE - 1С одной стороны, ты уже неплохо разбираешься в Java: знаешь, как работать с IDE, писать программы и многое другое. Но что с ними, программами, нужно делать дальше? Как сделать их круче и “выпустить в мир”? Становится очевидно, что пора браться за изучение Enterprise-технологий. И тут-то начинается самое интересное. Неважно, с какого стека технологий ты решишь начать. Будь то JavaEE или Spring, ты наверняка столкнешься с массой вещей, которые пока что находятся за пределами твоего понимания. Между основами Java и продвинутыми технологиями есть еще промежуточная ступенька знаний, которые помогут тебе не растерять остатки самообладания и веры себя при чтении объемной документации. Поэтому цель данного цикла статей — дать тебе минимум необходимых теоретических знаний для дальнейшего изучения JavaEE или Spring. Весь материал разбит на 7 частей:
  1. Поговорим немного о сети.
  2. Рассмотрим устройство клиент-серверной и трехуровневой архитектуры.
  3. Разберемся с HTTP/HTTPS протоколами.
  4. Узнаем все, что нужно, о Maven.
  5. Поговорим о сервлетах.
  6. Контейнерах сервлетов.
  7. И наконец — об MVC.

Часть 1. Поговорим немного о сети

Начнем с самого главного и поговорим о том, на основе чего строятся все социальные сети, web-сервисы и приложения, мессенджеры и простенькие сайты — о сети (в контексте этого цикла статей под термином “сеть” подразумевается Глобальная сеть Интернет). Сеть состоит из громадного количества компьютеров: они соединены между собой и способны коммуницировать. Важно понимать, как они это делают, потому что web-приложения как раз и занимаются передачей информации от одного компьютера другому.

Сетевая модель OSI

Модель OSI (Open Systems Interconnection) создает уровневый подход к построению сети. Она четко показывает как и на каком уровне между собой могут взаимодействовать члены одной сети. Всего данная модель содержит 7 уровней:
7 Прикладной
6 Представления
5 Сеансовый
4 Транспортный
3 Сетевой
2 Канальный
1 Физический
Разбивка на уровни абстракции позволяет специалистам, которые работают, например, над транспортным уровнем, не задумываться о деталях реализации сети на сетевом и сеансовых уровнях. Такой подход используется и в программировании. Рассмотрим все уровни модели OSI, и выясним, какие из них нам интересны:
  1. 1. Физический уровень — здесь свое дело делают законы физики, а задача человека — использовать и направлять это в своих целях. Например, создание кабелей и прокладывание их к членам сети.

    Нам не интересен.

  2. Канальный уровень — отвечает за передачу данных сетевым узлам, создание каналов передачи данных на физических объектах.

    Нам не интересен, если только нет желания писать прошивку для каналообразующей аппаратуры.

  3. Сетевой уровень — для определения адресов отдельных пользователей сети и маршрутов к ним. На этом уровне стоит остановиться подробнее, а именно — на адресе пользователя в сети.

    Он определяется специальным протоколом: самый распространённый — IPv4 (Internet Protocol version 4). Именно его нужно использовать веб-программисту для обращения к другому абоненту сети.

    IPv4 состоит из четырех байтовых значений, разделенных точкой, например: 192.0.2.235. Стоит помнить, что значения байтовые, а значит, они лежат в пределах 0..255.

    IP-адреса, в свою очередь, делятся на классы, и просто так присвоить себе красивую комбинацию циферок не получится, но так сильно углубляться мы не станем. Достаточно понимать, что IP-адрес — это уникальный идентификатор абонента в сети, по которому мы сможем к нему обратиться.

  4. Транспортный уровень — занимается доставкой информации адресату. Для этого используются разные протоколы, которые нам пока не интересны. Гораздо больше нас интересует понятие, которое появляется на этом уровне, — port.

    Порты отвечают за идентификацию конкретного приложения на компьютере. Например, ты написал чат на Java, установил на 2 компа и хочешь отправить своему собеседнику. Твое сообщение упаковывается, отправляется по конкретному IP-адресу, доставляется твоему собеседнику, но его ПК не знает, что делать с полученной информацией, так как не понимает, какое приложение должно обработать твое сообщение. Для этого и указываются порты при общении абонентов в сети.

    Порт представляет собой число от 0 до 65535. Он добавляется к IP-адресу после двоеточия: 192.0.2.235:8080. Но нельзя использовать все порты из указанного диапазона: часть из них зарезервирована под операционную систему, еще часть принято использовать с конкретно оговоренной целью. В предназначение разных портов углубляться не будем, пока достаточно понимать их роль в процессе общения в сети.

  5. Сеансовый уровень — создает и управляет сеансами связи приложений. На этом уровне становится возможным взаимодействие приложений, отправка запросов служебного уровня. Для нас важно знать, что на этом уровне между двумя абонентами открывается сессия (session), с которой нам часто придется работать.

    Сессия — сущность, которая создается при установке связи между двумя пользователями. В ней можно сохранять нужную нам информацию о юзере, об истории их взаимодействия. Важной деталью является то, что при остановке обмена информацией сессия не пропадает, а сохраняет свое состояние на протяжении установленного промежутка времени, поэтому пользователи могут продолжить обмен информацией после перерыва.

    Если приложение общается одновременно с несколькими пользователями, устанавливается соответствующее количество соединений, а значит и сессий. У каждой сессии есть уникальный идентификатора (ID), что позволяет приложению различать пользователей, с которыми происходит общение.

  6. Уровень представления — отвечает за кодирование/декодирование данных. Очевидно, что если нам нужно передать другому пользователи строку “Hello web”, сначала она преобразуется (кодируется) в бинарный код, и только потом отправляется. Достигнув адресата, сообщение преобразуется обратно (декодируется), и адресат может увидеть исходную строку. Эти действие происходят на уровне представления.

  7. Прикладной уровень — самый интересный уровень для нас. Он обеспечивает взаимодействие приложений с сетью. На этом уровне мы будем принимать, отправлять сообщения, делать запросы к сервисам и удаленным базам данных.

    Существует множество протоколов, которые используются на этом уровне: POP3, FTP, SMTP, XMPP, RDP, SIP, TELNET и, конечно же, HTTP/HTTPS. Протокол — это всеобщее соглашение, которого мы придерживаемся, составляя сообщения. О протоколах HTTP/HTTPS мы обязательно поговорим отдельно и подробнее.

Часть 1. Что нужно знать перед изучением Spring и JavaEE - 2 Знать, как работает каждый уровень этой модели нам не обязательно. Главное — разбираться в принципах работы элементов, с которыми нам придется сталкиваться при написании веб-приложений, а именно:
  • IP-адрес — адрес абонента в сети;
  • Порт — адрес приложения конкретного абонента;
  • Сессия — сущность которая существует на протяжении всего общения двух абонентов;
  • Прикладные протоколы (HTTP/HTTPS) — правила, которыми мы будем руководствоваться при составлении и отправке сообщений.
Когда мы переходим, скажем, в интернет-магазин, мы указываем его адрес нахождения и порт. При первом посещении создается сессия, в которую магазин может записывать информацию. Например, о товарах, которые мы оставили в корзине. Если мы закроем вкладку с интернет-магазином, а потом опять зайдем в него, наши товары останутся в корзине, потому что они сохранены в сессии. Ну и, естественно, всю информацию, которую мы получаем от магазина, мы получаем по протоколу HTTP/HTTPS, а наш браузер умеет его обрабатывать. Ты можешь возразить и сказать, что никогда не вводил адрес и порт в браузере, и будешь отчасти прав, ведь ты вводил доменное имя, которое преобразовывалось на DNS-сервере. А вот здесь давай разберемся получше, что к чему. Часть 1. Что нужно знать перед изучением Spring и JavaEE - 3

DNS (Domain Name System)

Как мы уже выяснили, у каждого абонента в сети есть уникальный адрес. Если речь идет о приложении, его уникальным адресом будет IPv4:port. Зная этот адрес, можно напрямую обратиться к приложению. Представим, что мы написали веб-приложение, которое отображает среднюю температуру воздуха во всех странах в режиме реального времени. Мы развернули его на сервере с адресом 226.69.237.119 и на порту 8080. Чтобы пользователь смог получить от нас информацию, ему нужно ввести в браузере 5 чисел: 226.69.237.119:8080. Люди не очень любят запоминать наборы чисел: далеко не все из нас помнят больше двух телефонным номеров. Вот поэтому и была придумана система доменных имен. Мы можем создать “псевдоним” нашего адреса — например, world-temperature.com, и пользователь вместо того, чтобы искать нас по адресу из пяти сложных чисел, может ввести в адресной строке браузера наше доменное имя. Для сопоставления доменных имен и реальных адресов существуют DNS-сервера. Когда пользователь в браузере вводит, например, javarush.ru, его запрос отправляется на DNS-сервер, где он превращается в реальный адрес. Часть 1. Что нужно знать перед изучением Spring и JavaEE - 4Нам важно это понимать, потому что в наших приложениях мы будем вызывать удаленные сервисы как по доменном имени, так и по реальному адресу, и это будут одни и те же сервисы. Вот и все! В этой статье мы рассмотрели основы устройства сети, которые пригодятся перед началом изучения веб-программирования. В следующий раз рассмотрим, что такое клиент-серверная архитектура и почему разбираться в ней так важно. Часть 2. Поговорим немного об архитектуре ПО Часть 3. Протоколы HTTP/HTTPS Часть 4.Основы Maven Часть 5. Сервлеты. Пишем простое веб-приложение Часть 6. Контейнеры сервлетов Часть 7. Знакомство с паттерном MVC (Model-View-Controller) Часть 8. Пишем небольшое приложение на spring-boot
Комментарии (19)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ СДЕЛАТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Valua Sinicyn Уровень 41, Харьков, Украина
11 марта 2021
Сетевые модели на человеческом.
LindX Уровень 4, moscow, Россия
8 февраля 2021
А разве модель OSI не упразднена ?
Хорс Уровень 41, Харьков
19 октября 2020
Протокол — это всеобщее соглашение, которого мы придерживаемся, составляя сообщения -вот за это отдельное спасибо, просто и сразу понятно спасибо за статью! кто еще набрал в адресной строке браузера 18.196.51.113 ? )))
Андрей Петрович Уровень 18, Медвежьегорск, Россия
6 февраля 2020
Насколько мне известно, полностью модель взаимодействия открытых телекоммуникационных систем (пресловутая модель OSI) не используется. Реально эксплуатируется стек протоколов TCP/IP - 4-х уровневая модель: 4. Прикладной уровень (Ну тут все понятно. Здесь все, как описано в стандарте модели OSI. Реализуется работа сетевых протоколов HTTP/HTTPS, FTP, SSH и т.п.). 3. Транспортный (Реализация взаимодействия телекоммуникационных систем по протоколу UDP, TCP. Работает с датаграммами/пакетами. На этом уровне в зависимости от типа передаваемых данных (для работы с различными данными используются разные протоколы, например для передачи потокового видео используют UDP, а для передачи архивов (электронных документов) - TCP) обеспечивается гарантированная доставка данных до адресата путем проверки целостности данных и повторного запроса потерянных (поврежденных) данных. Мульплексирование данных - объединение нескольких потоков в один. На этом уровне уже осуществляется программная обработка данных, а не аппаратная. Пример взаимодействия: браузер - веб-сервер.) 2. Сетевой (Реализация взаимодействия телекоммуникационных систем по IP протоколу для передачи данных из одной сети в другую, от конкретного узла (компьютера) к конкретному узлу. Железо: коммутаторы, маршрутизаторы. Работают с битами/кадрами, объединенными в пакеты. На данном уровне отсутствует гарантированная доставка пакета до адресата.). 1. Канальный (Отвечает за физический уровень приема-передачи битов/кадров, за кодирование информации с использованием линейных методов кодирования: код RZ, NRZ, Манчестерский код и т.п. На этом уровне взаимодействует железо, отвечающее только за передачу сигналов по линии связи, оно не понимает что передает - для него это всего лишь изменение уровня напряжения электрического сигнала. Пример железки: сетевые хабы для Ethernet сетей, ретранслируют принимаемые биты в сеть, не определяя кому конкретно они должны прийти. Еще один пример - wi-fi модуль, модуль GSM).
ディマ_オゾリン Уровень 33, Киев, Украина
4 февраля 2020
Как раз делаю 3-ю попытку постичь Spring… Как раз по Maven-у, у меня назрел вопрос, ответ на который не могу найти. Поэтому хочу спросить, может это раскроют в будущих статьях: я ищу более глубокого понимания процессов в <dependencies> и <build> разделах. Проблема -> в большинстве уроков на ю-тубе или в интернете по Мавену мало что рассказывают о том почему вставляют такие плагины или зависимости. Просто копи-пастят. То что стоит у меня сейчас: IDE: NetBeans, Java 13(в её состав уже не входит JavaFX) Ситуация: видео-уроки про JavaFX(делают без Maven), я делаю через Maven. Методами тыка, извращений и поиска определил, что для основных классов JavaFX нужны 2 зависимости с <artifactId>javafx-controls и <artifactId>javafx-fxml. В одном из след.уроков использовали класс SwingFXUtils, которого в этих зависимостях нету. Сам Maven кстати тоже может помочь с поиском нужной зависимости, но тогда я этого не знал и нашёл решение скачав JavaFX jar-ники c mvnrepository.com -> открывал их WinRar-ом и искал нужный мне класс. Если с зависимостями более-менее понятно, можно нагуглить информацию и как-то понять, то с плагинами <build> мрак... Запустить JavaFX под Maven-ом мне помогла эта инструкция. Заменив в конфигах проекта: process-classes org.codehaus.mojo:exec-maven-plugin:1.5.0:exec exec.args=-classpath %classpath ${packageClassName} exec.executable=java на clean javafx:run. И прописав код в pom.xml. Без JavaFX обычные классы запускаются и с первоначально-сгенерированными кодо-инструкциями.
Роман Данишевский Уровень 22, Павлодар, Казахстан
3 февраля 2020
Хорошая подача материала! Так держать!
ram0973 Уровень 41, Набережные Челны, Россия
3 февраля 2020
Издалека зашли 😂
Roman Doroshenko Уровень 16, Гомель, Беларусь
3 февраля 2020
Жду продолжения! Спасибо!
3 февраля 2020
Легко читается и все понятно.
Aleksandr Pavlenko Уровень 5, Киев
3 февраля 2020
Все круто изложено, спасибо! Автор, маленькая опечатка в описании 4. Транспортного уровня - "Гораздо болmit нас интересует понятие..." На слове "больше" переключилась раскладка)