JavaRush /Java блог /Java Developer /Часть 1. Что нужно знать перед изучением Spring и JavaEE
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-сервере. А вот здесь давай разберемся получше, что к чему.

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
Комментарии (31)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Maksim Makarov Уровень 1
29 ноября 2023
В java используется модель TCP/IP, а не OSI.
Никита Уровень 14
20 октября 2023
А с чем связно то, что на последней картинке указан только адрес и не указан порт сайта javarush?
Sergey Уровень 1
5 октября 2023
Отличная статья: просто и доходчиво о сложном
jvatechs Уровень 111 Expert
2 июня 2023
Очень доходчиво!
Nik Уровень 44
15 июля 2022
А на картинку это всё нанести нельзя? Мне, например, не совсем понятно, где-что.
LuneFox Уровень 41 Expert
1 апреля 2022
Круто, когда ты админ и всё это и так уже знаешь :)
Андрей Уровень 28
16 декабря 2021
TCP находится на транспортном уровне
Андрей Уровень 28
16 декабря 2021
Подача материала супер! Все по полочкам, красота!
Valua Sinicyn Уровень 41
11 марта 2021
Сетевые модели на человеческом.
LindX Уровень 12
8 февраля 2021
А разве модель OSI не упразднена ?