![Часть 1. Что нужно знать перед изучением Spring и JavaEE - 1](https://cdn.javarush.com/images/article/0f024f83-d3b6-4727-b11c-f9abfb1c49bb/original.jpeg)
- Поговорим немного о сети.
- Рассмотрим устройство клиент-серверной и трехуровневой архитектуры.
- Разберемся с HTTP/HTTPS протоколами.
- Узнаем все, что нужно, о Maven.
- Поговорим о сервлетах.
- Контейнерах сервлетов.
- И наконец — об MVC.
Часть 1. Поговорим немного о сети
Начнем с самого главного и поговорим о том, на основе чего строятся все социальные сети, web-сервисы и приложения, мессенджеры и простенькие сайты — о сети (в контексте этого цикла статей под термином “сеть” подразумевается Глобальная сеть Интернет). Сеть состоит из громадного количества компьютеров: они соединены между собой и способны коммуницировать. Важно понимать, как они это делают, потому что web-приложения как раз и занимаются передачей информации от одного компьютера другому.Сетевая модель OSI
Модель OSI (Open Systems Interconnection) создает уровневый подход к построению сети. Она четко показывает как и на каком уровне между собой могут взаимодействовать члены одной сети. Всего данная модель содержит 7 уровней:7 | Прикладной |
6 | Представления |
5 | Сеансовый |
4 | Транспортный |
3 | Сетевой |
2 | Канальный |
1 | Физический |
1. Физический уровень — здесь свое дело делают законы физики, а задача человека — использовать и направлять это в своих целях. Например, создание кабелей и прокладывание их к членам сети.
Нам не интересен.
Канальный уровень — отвечает за передачу данных сетевым узлам, создание каналов передачи данных на физических объектах.
Нам не интересен, если только нет желания писать прошивку для каналообразующей аппаратуры.
Сетевой уровень — для определения адресов отдельных пользователей сети и маршрутов к ним. На этом уровне стоит остановиться подробнее, а именно — на адресе пользователя в сети.
Он определяется специальным протоколом: самый распространённый — IPv4 (Internet Protocol version 4). Именно его нужно использовать веб-программисту для обращения к другому абоненту сети.
IPv4 состоит из четырех байтовых значений, разделенных точкой, например: 192.0.2.235. Стоит помнить, что значения байтовые, а значит, они лежат в пределах 0..255.
IP-адреса, в свою очередь, делятся на классы, и просто так присвоить себе красивую комбинацию циферок не получится, но так сильно углубляться мы не станем. Достаточно понимать, что IP-адрес — это уникальный идентификатор абонента в сети, по которому мы сможем к нему обратиться.
Транспортный уровень — занимается доставкой информации адресату. Для этого используются разные протоколы, которые нам пока не интересны. Гораздо больше нас интересует понятие, которое появляется на этом уровне, — port.
Порты отвечают за идентификацию конкретного приложения на компьютере. Например, ты написал чат на Java, установил на 2 компа и хочешь отправить своему собеседнику. Твое сообщение упаковывается, отправляется по конкретному IP-адресу, доставляется твоему собеседнику, но его ПК не знает, что делать с полученной информацией, так как не понимает, какое приложение должно обработать твое сообщение. Для этого и указываются порты при общении абонентов в сети.
Порт представляет собой число от 0 до 65535. Он добавляется к IP-адресу после двоеточия: 192.0.2.235:8080. Но нельзя использовать все порты из указанного диапазона: часть из них зарезервирована под операционную систему, еще часть принято использовать с конкретно оговоренной целью. В предназначение разных портов углубляться не будем, пока достаточно понимать их роль в процессе общения в сети.
Сеансовый уровень — создает и управляет сеансами связи приложений. На этом уровне становится возможным взаимодействие приложений, отправка запросов служебного уровня. Для нас важно знать, что на этом уровне между двумя абонентами открывается сессия (session), с которой нам часто придется работать.
Сессия — сущность, которая создается при установке связи между двумя пользователями. В ней можно сохранять нужную нам информацию о юзере, об истории их взаимодействия. Важной деталью является то, что при остановке обмена информацией сессия не пропадает, а сохраняет свое состояние на протяжении установленного промежутка времени, поэтому пользователи могут продолжить обмен информацией после перерыва.
Если приложение общается одновременно с несколькими пользователями, устанавливается соответствующее количество соединений, а значит и сессий. У каждой сессии есть уникальный идентификатора (ID), что позволяет приложению различать пользователей, с которыми происходит общение.
Уровень представления — отвечает за кодирование/декодирование данных. Очевидно, что если нам нужно передать другому пользователи строку “Hello web”, сначала она преобразуется (кодируется) в бинарный код, и только потом отправляется. Достигнув адресата, сообщение преобразуется обратно (декодируется), и адресат может увидеть исходную строку. Эти действие происходят на уровне представления.
Прикладной уровень — самый интересный уровень для нас. Он обеспечивает взаимодействие приложений с сетью. На этом уровне мы будем принимать, отправлять сообщения, делать запросы к сервисам и удаленным базам данных.
Существует множество протоколов, которые используются на этом уровне: POP3, FTP, SMTP, XMPP, RDP, SIP, TELNET и, конечно же, HTTP/HTTPS. Протокол — это всеобщее соглашение, которого мы придерживаемся, составляя сообщения. О протоколах HTTP/HTTPS мы обязательно поговорим отдельно и подробнее.
![Часть 1. Что нужно знать перед изучением Spring и JavaEE - 2](https://cdn.javarush.com/images/article/fbd83468-8b60-4d0c-bfb5-f25673c06e45/original.jpeg)
- IP-адрес — адрес абонента в сети;
- Порт — адрес приложения конкретного абонента;
- Сессия — сущность которая существует на протяжении всего общения двух абонентов;
- Прикладные протоколы (HTTP/HTTPS) — правила, которыми мы будем руководствоваться при составлении и отправке сообщений.
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](https://cdn.javarush.com/images/article/b3c41b90-bf86-49cd-bb61-6925463b2bc3/original.jpeg)