JavaRush /Java блог /Random UA /Частина 1. Що потрібно знати перед вивченням Spring та Ja...
Professor Hans Noodles
41 рівень

Частина 1. Що потрібно знати перед вивченням Spring та JavaEE

Стаття з групи Random UA
Якщо ти вже закінчив вивчення 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-сервера . Коли користувач у браузері вводить, наприклад codegym.cc, його запит відправляється на DNS-сервер, де він перетворюється на реальну адресау. Частина 1. Що потрібно знати перед вивченням Spring та JavaEE - 4Нам важливо це розуміти, тому що в наших додатках ми будемо викликати віддалені сервіси як по доменному імені, так і за реальною адресаою, і це будуть ті самі сервіси. От і все! У цій статті ми розглянули основи пристрою мережі, які стануть у нагоді перед початком вивчення веб-програмування. Наступного разу розглянемо, що таке клієнт-серверна архітектура і чому розумітися на ній так важливо. Частина 2. Поговоримо трохи про архітектуру ПЗ Частина 3. Протоколи HTTP/HTTPS Частина 4. Основи Maven Частина 5. Сервлети. Пишемо просте веб-додаток Частина 6. Контейнери сервлетів Частина 7. Знайомство з патерном MVC (Model-View-Controller) Частина 8. Пишемо невелику програму на spring-boot
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ