MS Lesson3: Demo App with Spring Boot
1. spring-boot-starter-web
- 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ə)
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
- 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.
- ayrıca Tomcat quraşdırmırsan,
- app-i run edəndə Tomcat də içində qalxır.
3. Web server
- 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
4. Servlet container
- 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
- Web server: request qəbul edən “server”
- Servlet container: Java servlet-lərini işlədən “Java engine”
┌──────────────────────────────┐
│ 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.comyazanda 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/usersyazı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
/usersistə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:
Controller: "Buyur, istifadəçi siyahısı hazırdır" deyir və datanı DispatcherServlet-ə qaytarır.
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.
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.
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.
Brauzer (End User): Gələn paketi açır, JSON-u oxuyur və sənin ekranında siyahını göstərir.
Комментарии
Отправить комментарий