جلسه شماره 121رایگان

First Spring MVC Controller | اولین کنترلر در اسپرینگ MVC

00:27:01

توضیحات جلسه

🎥 این ویدیو قسمت صد و نهم از بوت‌کمپ رایگان جاوا و هشتمین ویدیو از پلی‌لیست آموزش اسپرینگ است. 📚 در این جلسه از مسیر یادگیری فریم‌ورک اسپرینگ، وارد دنیای وب می‌شویم و اولین قدم‌ها برای ساخت یک اپلیکیشن وب واقعی با Spring MVC را برمی‌داریم. در ابتدای ویدیو یک پیش‌زمینه ضروری از مفاهیم شبکه بررسی می‌کنیم؛ مفاهیمی مثل IP، Port، DNS و پروتکل HTTP که بدون درک آن‌ها، فهم نحوه ارتباط کلاینت و سرور در اپلیکیشن‌های وب دشوار است. سپس اولین Controller را می‌سازیم، یک Endpoint تعریف می‌کنیم و در ادامه با استفاده از موتور قالب Thymeleaf (دقیقاً مطابق کتاب Spring in Action) ویوی صفحه اصلی را طراحی می‌کنیم. در نهایت اپلیکیشن را Run می‌کنیم و خروجی نهایی کار را در مرورگر مشاهده می‌کنیم. در این جلسه یاد می‌گیریم: 🌐 مفاهیم پایه شبکه: IP، Port، DNS و پروتکل HTTP 🎮 ساخت اولین Controller و مدیریت درخواست‌های ورودی با @Controller و @GetMapping 🔗 تعریف Endpoint و نگاشت مسیرها (Request Mapping) در اسپرینگ MVC 🖼️ ساخت View با موتور قالب Thymeleaf و اتصال آن به کنترلر 🚀 اجرای اپلیکیشن Spring Boot و مشاهده خروجی نهایی در مرورگر 🧠 جمع‌بندی نکات کلیدی چرخه کامل یک درخواست وب از کلاینت تا View اگر در حال یادگیری Spring Boot هستید، این ویدیو نقطه شروع ورود شما به دنیای توسعه وب سمت سرور با جاوا است و پایه‌ای محکم برای مباحث پیشرفته‌تر Spring MVC خواهد بود. 📌 یوتیوب: https://youtube.com/@farzadafi 📌 آپارات: https://aparat.com/farzadafi 📌 وب سایت: https://farzadafi.ir 💬 گروه پرسش و پاسخ تلگرام: programmingByFarzadAfi@ 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi هر سوالی داشته باشید می‌توانید داخل گروه بپرسید تا خودم یا مربی‌هایی که در گروه حضور دارند کمکتان کنیم :) 🎯 بوت‌کمپ رایگان جاوا – آموزش کاملاً پروژه‌محور برای یادگیری عمیق جاوا و ورود به بازار

جزوه و مستندات

مفاهیم کلیدی

  • IP Address

نشانی رقمیِ منحصر‌به‌فرد هر دستگاه در شبکه است که برای شناسایی و مسیریابی داده‌ها بین سیستم‌ها استفاده می‌شود.

  • Port

شماره‌ای اختصاصی برای تفکیک و هدایت ترافیک شبکه به یک برنامه یا سرویس مشخص روی یک سامانه؛ برای مثال وب‌سرور Tomcat به‌صورت پیش‌فرض روی پورت 8080 اجرا می‌شود.

  • DNS

سیستم «دفترچه تلفن اینترنتی» که نام‌های متنی و خوانا برای انسان (مانند نام دامنه‌ها) را به نشانی‌های IP قابل فهم برای شبکه تبدیل می‌کند.

  • HTTP Methods

دستورهای استاندارد پروتکل HTTP برای تعیین نوع عملیات درخواستی روی منابع سرویس‌دهنده:

  • GET

برای خواندن و واکشی اطلاعات از سرور بدون ایجاد هیچ‌گونه تغییری در داده‌ها.

  • POST

برای ارسال اطلاعات جدید به سرور و ایجاد داده تازه.

  • PUT

برای به‌روزرسانی کامل یا بازنویسی کلی یک داده موجود.

  • DELETE

برای حذف داده مشخص‌شده از روی سرور.

  • Spring MVC

فریم‌ورک قدرتمند وب در اکوسیستم Spring که بر اساس الگوی Model-View-Controller درخواست‌های وب را مدیریت و پاسخ می‌دهد.

  • Controller

کلاسی در مرکز Spring MVC که مسئولیت دریافت درخواست‌های HTTP را بر عهده دارد و در پاسخ، اطلاعات یا نمای (View) مناسبی را بازمی‌گرداند.

  • @Controller

انوتیشن Stereotype که کلاس را به‌عنوان یک کامپوننت وب معرفی می‌کند؛ هدف اصلی آن شناسایی کلاس توسط فرآیند Component Scanning و ساخت نمونه bean از آن در ApplicationContext است.

  • @GetMapping

انوتیشن در سطح متد که مشخص می‌کند اگر یک درخواست HTTP GET برای مسیر مشخص‌شده (مانند /) دریافت شود، آن متد باید درخواست را هندل کند.

  • Logical View Name

رشته‌ای که یک متد Controller بازمی‌گرداند و به‌عنوان نام منطقی نمای موردنظر تفسیر می‌شود؛ پیاده‌سازی واقعی این نمای به موتور قالب موجود در classpath بستگی دارد.

  • Thymeleaf

موتور قالب‌سازی (Template Engine) سمت سرور برای رندر صفحات HTML در Spring Boot که پوشه پیش‌فرض قالب‌های آن مسیر src/main/resources/templates است.

  • Context-Relative Path

روش آدرس‌دهی منابع (مانند تصاویر) نسبت به ریشه‌ی اپلیکیشن با استفاده از عبارت @{...} و ویژگی‌های Thymeleaf مانند th:src.

  • Embedded Tomcat

وب‌سرور Tomcat که به‌صورت تعبیه‌شده داخل خود اپلیکیشن Spring Boot قرار دارد؛ برنامه نیازی به دیپلوی روی یک Application Server جداگانه ندارد.

موارد مصاحبه ای

  • عملکرد اصلی انوتیشن @Controller چیست؟

این انوتیشن به‌تنهایی کار خاصی انجام نمی‌دهد؛ هدف اصلی آن شناسایی کلاس به‌عنوان یک کامپوننت در فرآیند Component Scanning است تا Spring به‌طور خودکار از آن نمونه‌ای به‌عنوان bean در ApplicationContext بسازد.

  • اگر به‌جای @Controller از @Component استفاده کنیم چه می‌شود؟

از نظر عملکردی برنامه کار می‌کند، زیرا همه این انوتیشن‌ها (@Component، @Service، @Repository) هدف مشابهی دارند؛ اما انتخاب @Controller نقش کلاس را در معماری اپلیکیشن واضح‌تر و توصیفی‌تر بیان می‌کند.

  • مقدار بازگشتی یک متد Controller به‌صورت String چه معنایی دارد؟

این رشته به‌عنوان Logical View Name تفسیر می‌شود و Spring MVC بر اساس آن و موتور قالب موجود در classpath (مانند Thymeleaf) صفحه نهایی را رندر می‌کند.

  • چرا در اپلیکیشن Spring Boot به دیپلوی روی سرور Tomcat جداگانه نیازی نیست؟

زیرا Spring Boot مدل بسته‌بندی متفاوتی دارد: وب‌سرور Tomcat به‌صورت تعبیه‌شده (Embedded) بخشی از خود اپلیکیشن است و برنامه همه وابستگی‌های لازم را همراه خود می‌آورد.

  • تفاوت عملکردی متدهای GET و PUT در پروتکل HTTP چیست؟

GET فقط برای خواندن داده‌ها بدون تغییر در سرور است، در حالی که PUT برای به‌روزرسانی کامل یا بازنویسی یک داده موجود به کار می‌رود.

سناریو کاربردی

  • ساخت یک Controller ساده برای صفحه اصلی و اتصال آن به نمای Thymeleaf

۱. تعریف Controller برای مسیر ریشه (/):

@Controller
public class HomeController {

    @GetMapping("/")
    public String home() {
        // بازگرداندن نام منطقی نمای صفحه اصلی
        return "home";
    }
}

Spring پس از اجرا، کلاس را با Component Scanning کشف می‌کند و درخواست‌های GET به مسیر / را به متد home هدایت می‌کند.

۲. تعریف قالب Thymeleaf: فایل home.html در مسیر src/main/resources/templates قرار می‌گیرد. برای نمایش تصویر لوگو از مسیر نسبی استفاده می‌شود:

<img th:src="@{/images/TacoCloud.png}" />

فایل تصویر نیز باید در مسیر src/main/resources/static/images/TacoCloud.png قرار داشته باشد.

۳. اجرا و تست: با اجرای اپلیکیشن (مثلاً از طریق Spring Boot Dashboard در IDE)، در خروجی کنسول پیام Tomcat started on port(s): 8080 (http) ظاهر می‌شود و با مراجعه به آدرس http://localhost:8080 صفحه اصلی رندر شده نمایش داده می‌شود.

بیشتر بدانید

  • اجرا از طریق Spring Boot Dashboard

در IDEهایی مانند IntelliJ، پنل Spring Boot Dashboard امکان اجرای سریع اپلیکیشن با یک کلیک روی دکمه Start (آیکون مثلث سبز) را فراهم می‌کند.

  • نکته مربوط به محل قرارگیری فایل‌ها

قرار دادن قالب‌ها و فایل‌های استاتیک در مسیر صحیح (templates برای قالب‌های Thymeleaf و static برای تصاویر و اسکریپت‌ها) شرط کارکرد صحیح رندر صفحات است.