MS Lesson3: Demo App with Spring Boot

1. spring-boot-starter-web 

spring-boot-starter-web Spring Boot-da web tətbiqi yazmaq üçün əsas starter dependency-dir.
Qısa desək, bu dependency-ni əlavə edəndə sənə avtomatik verir:
  • Spring MVC (@RestController, @GetMapping, və s.)
  • Embedded server (Tomcat— ayrıca server qurmağa ehtiyac olmur
  • JSON serialize/deserialize (Jackson— Java object ⇄ JSON
  • HTTP request/response işləmə infrastrukturu
  • Validation ilə inteqrasiya üçün baza (digər starter-lərlə birlikdə)
Yəni API yazmaq üçün lazım olan minimum “web stack”-i bir paket gətirir.

Məsələn, GET /students endpoint-i yazıb app-i run edəndə artıq localhost:8080 üzərində işləyir — bunu məhz bu starter təmin edir. 



2. Tomcat

Tomcat Java üçün web server + servlet container-dır.
Sadə dillə:
  • Sənin Spring Boot app-in HTTP request alır (/api/students kimi).
  • O request-i qəbul edib Java koduna çatdıran “mühit” Tomcat-dir.
  • Cavabı yenidən HTTP response kimi client qaytarır.
Spring Boot-da adətən embedded Tomcat gəlir, yəni:
  • ayrıca Tomcat quraşdırmırsan,
  • app-i run edəndə Tomcat də içində qalxır.
Yəni “server nədir?” sualında cavab:
Tomcat app-i internetdən gələn sorğularla danışdıran motordur.



3. Web server

Web server HTTP sorğularını qəbul edib cavab qaytaran proqramdır.
Məsələn:
  • Browser GET /students göndərir
  • Web server bu sorğunu alır
  • Ya statik fayl qaytarır (HTML/CSS/JS), ya da backend kodunu işə salıb JSON cavabı qaytarır
Qısa analoq:
web server “qapıdakı qəbul masası”
request-ləri qəbul edir, doğru yerə yönndirir, cavabı geri verir.
NümunələrTomcat, Nginx, Apache HTTP Server.
Spring Boot-da çox vaxt embedded Tomcat bu rolu oynayır.



4. Servlet container

Servlet container Java web tətbiqləri üçün runtime mühitidir — yəni servlet-ləri işlədən sistem.
Sadə dildə nə edir:
  • HTTP request-i qəbul edir
  • onu HttpServletRequest/HttpServletResponse obyektlərinə çevirir
  • uyğun servlet/filter-ə yönləndirir
  • lifecycle-i idarə edir (init, service, destroy)
  • session, security, thread management kimi məsələləri aparır
Spring MVC-də sən birbaşa servlet yazmasan da, DispatcherServlet adlı əsas servlet bu container içində işləyir.
Qısa fərq:
  • Web server: request qəbul edən “server
  • Servlet container: Java servlet-lərini işlədən “Java engine
Tomcat hər ikisini verir: həm web server, həm servlet container.




┌──────────────────────────────┐

│        Client (Browser)      │

│   GET /api/students          │

└───────────────┬──────────────┘

                │ HTTP Request

                ▼

┌─────────────────────────────────────────────────────┐

│                Spring Boot Application              │

│                                                     │

│  ┌───────────────────────────────────────────────┐  │

│  │ Embedded Tomcat                                                                                                      │  │

│  │                                               │  │

│  │  ┌─────────────────────────────────────────┐ │  │

│  │  │ Web Server hissəsi                     │ │  │

│  │  │ - port dinləyir (8080)                 │ │  │

│  │  │ - HTTP request qəbul edir              │ │  │

│  │  └─────────────────────────────────────────┘ │  │

│  │                                               │  │

│  │  ┌─────────────────────────────────────────┐ │  │

│  │  │ Servlet Container hissəsi               │ │  │

│  │  │ - DispatcherServlet-i işlədir           │ │  │

│  │  │ - filter/lifecycle/session idarə edir   │ │  │

│  │  └─────────────────────────────────────────┘ │  │

│  └───────────────────────────────────────────────┘  │

│                                                     │

│  Spring MVC Layer                                  │

│  - @RestController                                 │

│  - @Service                                        │

│  - business logic                                  │

└─────────────────────────────────────────────────────┘

                │

                ▼

         HTTP Response (JSON)



1. Web Server (Məkan və İnfrastruktur)

Web Server bir proqram təminatı və ya aparatdır (məsələn: Apache, Nginx, Tomcat). Onun əsas işi internet üzərindən gələn HTTP sorğularını qəbul etmək və onlara cavab olaraq faylları göndərməkdir.

  • Nəyi qaytarır? Əsasən HTML, CSS, JavaScript faylları və şəkillər.

  • Kimin üçündür? İnsanlar üçün (brauzerdə vizual olaraq görmək üçün).

  • Nümunə: Sən google.com yazanda Web Server sənə Google-un ana səhifəsinin dizaynını (HTML) göndərir.

2. Web Service (Funksiya və Məlumat)

Web Service isə iki proqramın (maşının) bir-biri ilə internet üzərindən ünsiyyət qurması üçün yaradılmış bir xidmətdir. O, dizaynla maraqlanmır, yalnız məlumat (data) ötürür.

  • Nəyi qaytarır? JSON və ya XML formatında təmiz məlumat.

  • Kimin üçündür? Digər proqramlar/tətbiqlər üçün (Məsələn, mobil proqramın serverdən məlumat çəkməsi).

  • Nümunə: Sən bir saytda hava proqnozuna baxırsan. O sayt özü hava proqnozunu bilmir, başqa bir proqramdan (Web Service-dən) JSON formatında "Bakı: 20 dərəcə" məlumatını alır.



Real həyatdan misal (Restoran analogiyası):

  • Web Server: Restoranın özüdür. Binadır, masalardır, menyudur. Sən ora daxil olursan və hər şeyi vizual görürsən.

  • Web Service: Restoranın "Çatdırılma (Wolt/Bolt Food)" xidmətidir. Sən restoranın binasını görmürsən, masada oturmursan. Sənə sadəcə paketdə yemək (məlumat/data) gəlir. Sən o yeməyi (datanı) istədiyin qabda (istədiyin dizaynda) yeyə bilərsən.

Spring Boot-da bu necə görünür?

Əgər sən @Controller yazıb geriyə bir index.html qaytarırsansa, bu Web Server kimi davranır. Amma @RestController yazıb geriyə bir User obyekti (JSON) qaytarırsansa, sən bir Web Service (API) yaratmış olursan.





əsəvvür elə ki, əlində bir-birinin içinə keçən qutular var:

1. Ən böyük qutu: Spring Boot (Framework)

Bu, sənin bütün layihəndir. Sən proqramı işə salanda (məsələn, main metodunu run edəndə) əslində bu böyük qutu açılır.

2. Onun içindəki qutu: Embedded Tomcat (Server)

Spring Boot-u işə salan kimi, o dərhal öz daxilindəki Tomcat-ı "oyadır". Sən kənardan heç bir server proqramı yükləmirsən, o artıq Spring Boot-un kitabxanalarının içində bir proqram (dependency) kimi var.

3. Tomcat-ın iki əsas funksiyası (İki bölməli qutu):

Tomcat özü iki işi eyni anda görür:

  • Web Server hissəsi: İnternetdən (brauzerdən) gələn "qapı döymələrini" (HTTP sorğularını) eşidir.

  • Servlet Container hissəsi: Həmin qapını döyən adamı içəri buraxır və onu sənin yazdığın Java koduna (Servlet-ə) yönləndirir.





1. Mərhələ: Sorğunun Yola Düşməsi (Client Side)

  • Brauzer: Sən https://api.mysite.com/users yazırsan. Brauzer bunu bir HTTP Request paketinə bükür.

  • İnternet: Bu paket TCP/IP protokolu ilə sənin serverinə (kompyuterinə) çatır.

2. Mərhələ: Qapıçı (Web Server - Tomcat Connector)

  • Tomcat (Connector): Serverin "qapısında" (məsələn, 8080 portunda) Tomcat-ın Connector-u dayanır. O, gələn elektrik siqnallarını (baytları) oxuyur və görür ki, "Hə, bu bir HTTP sorğusudur".

  • İşi: Şəbəkə paketini götürüb Java dilində başa düşülən bir obyektə (HttpServletRequest) çevirməkdir.

3. Mərhələ: İdarəetmə Mərkəzi (Servlet Container)

  • Tomcat (Container): Sorğunu içəri (mətbəxə) buraxır. Burada o, sorğunun hansı "Servlet"-ə getməli olduğunu təyin edir. Spring Boot-da demək olar ki, bütün sorğular tək bir nəfərə — DispatcherServlet-ə gedir.

4. Mərhələ: Spring Boot-un Ürəyi (DispatcherServlet)

Bu, Spring-in ən vacib hissəsidir (Front Controller). O, sorğunu əlinə alır və "Xəritəyə" (Handler Mapping) baxır:

  • "Bu adam /users istəyir. Görəsən mənim hansı Controller-im buna cavabdehdir?"

5. Mərhələ: Sənin Kodun (Controller & Service)

  • Controller: DispatcherServlet sorğunu sənin yazdığın @GetMapping("/users") metoduna ötürür.

  • Business Logic: Sənin kodun işə düşür: "Bazaya get, istifadəçiləri tap, onları siyahı halına sal".

  • Nəticə: Kodun bir nəticə (məsələn, istifadəçi listi) qaytarır.


GERİ DÖNÜŞ: Cavabın (Response) Səyahəti

İndi isə proses tərs mütənasib şəkildə qayıdır:

  1. Controller: "Buyur, istifadəçi siyahısı hazırdır" deyir və datanı DispatcherServlet-ə qaytarır.

  2. DispatcherServlet: Bu datanı (Java obyektini) götürür. Əgər bu bir API-dırsa, onu JSON formatına (yəni mətnə) çevirmək üçün bir çeviriciyə (Message Converter) verir.

  3. Servlet Container (Tomcat): Sənin JSON datanı götürür və onu rəsmi bir HTTP Response paketinin (Header-lər, Status Code 200 OK və s.) "bədəninə" (Body) qoyur.

  4. Web Server (Tomcat Connector): Bu Java obyektini yenidən baytlara (0-lar və 1-lər) çevirib internet kabeli vasitəsilə brauzerə yola salır.

  5. Brauzer (End User): Gələn paketi açır, JSON-u oxuyur və sənin ekranında siyahını göstərir.



















































Комментарии

Популярные сообщения из этого блога

Interview questions

Lesson1: JDK, JVM, JRE

Lesson_2: Operations in Java