First Spring MVC Controller | اولین کنترلر در اسپرینگ MVC
توضیحات جلسه
جزوه و مستندات
مفاهیم کلیدی
- 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 برای تصاویر و اسکریپتها) شرط کارکرد صحیح رندر صفحات است.
