- Published on
چرخه حیات یک درخواست HTTP در Spring MVC
- نویسندگان
- نام
- هومن امینی
- توییتر
- @HoomanAmini
چرخه حیات یک درخواست HTTP در Spring MVC
در Spring MVC، هر درخواست HTTP مراحل مشخصی را طی میکند تا پردازش شود و یک پاسخ به کاربر بازگردانده شود. این مراحل شامل ورود درخواست به برنامه، پردازش توسط کنترلرها، و تولید پاسخ است. در ادامه به صورت جزئی مراحل چرخه حیات یک درخواست HTTP در Spring MVC توضیح داده شده است:
1. دریافت درخواست توسط سرور وب
- مرحله ورود به سرور:
- درخواست HTTP از کلاینت (مانند مرورگر) به وبسرور (مانند Apache Tomcat) ارسال میشود.
- وبسرور درخواست را دریافت و آن را به برنامه Spring ارسال میکند.
2. عبور از Front Controller (DispatcherServlet)
- نقش DispatcherServlet:
- در Spring MVC، DispatcherServlet به عنوان Front Controller عمل میکند.
- این Servlet وظیفه دریافت تمام درخواستها و هدایت آنها به بخشهای مناسب (مانند کنترلرها) را دارد.
- مسیردهی درخواستها بر اساس URL Mapping انجام میشود.
3. پردازش درخواست توسط HandlerMapping
- انتخاب کنترلر:
- DispatcherServlet از HandlerMapping برای تعیین اینکه کدام کنترلر باید درخواست را پردازش کند، استفاده میکند.
- HandlerMapping با توجه به آدرس URL درخواست و مپینگهای تعریفشده در کنترلرها (مانند
@RequestMapping
) کنترلر مناسب را پیدا میکند.
4. فراخوانی کنترلر (Controller)
- اجرای متد کنترلر:
- DispatcherServlet کنترلر مشخصشده را فراخوانی میکند.
- کنترلر در Spring معمولاً به صورت یک کلاس با انوتیشن
@Controller
یا@RestController
تعریف میشود. - متدهای کنترلر با استفاده از انوتیشنهایی مانند
@RequestMapping
،@GetMapping
یا@PostMapping
مشخص میشوند.
5. پردازش منطق تجاری (Business Logic)
- تعامل با سرویسها و لایههای داده:
- کنترلر معمولاً از کلاسهای سرویس (Service Layer) برای پردازش منطق تجاری استفاده میکند.
- در صورت نیاز به تعامل با پایگاه داده، کلاسهای سرویس از Repositoryها یا DAOها استفاده میکنند.
6. بازگشت به DispatcherServlet
- برگرداندن نتیجه:
- کنترلر پس از اجرای منطق تجاری، یک شیء یا View را به DispatcherServlet بازمیگرداند.
- اگر از
@ResponseBody
یا@RestController
استفاده شود، دادهها به صورت JSON یا XML در پاسخ قرار میگیرند.
7. پردازش View توسط ViewResolver
- انتخاب View مناسب:
- اگر کنترلر یک View (مانند قالب HTML) را برگرداند، ViewResolver تعیین میکند که کدام فایل View باید برای تولید پاسخ استفاده شود.
- فایل View ممکن است با استفاده از موتورهای قالبسازی مانند Thymeleaf، JSP یا FreeMarker تولید شود.
8. تولید پاسخ HTTP
- ایجاد پاسخ نهایی:
- DispatcherServlet پاسخ نهایی (مانند HTML، JSON، یا XML) را از View یا دادههای بازگرداندهشده توسط کنترلر تولید میکند.
- این پاسخ به وبسرور بازگردانده میشود.
9. ارسال پاسخ به کلاینت
- بازگشت پاسخ به مرورگر:
- وبسرور پاسخ HTTP را به کلاینت بازمیگرداند.
- کلاینت (مثلاً مرورگر) پاسخ را دریافت و به کاربر نمایش میدهد.
نمای کلی چرخه حیات
- درخواست به وبسرور ارسال میشود.
- DispatcherServlet درخواست را دریافت میکند.
- HandlerMapping کنترلر مناسب را پیدا میکند.
- متد کنترلر اجرا میشود.
- منطق تجاری پردازش میشود.
- نتیجه به DispatcherServlet بازگردانده میشود.
- ViewResolver View مناسب را پیدا میکند.
- پاسخ نهایی تولید میشود.
- پاسخ به کلاینت ارسال میشود.
مثال کد
کنترلر:
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/users/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = userService.getUserById(id); // تعامل با لایه سرویس
return ResponseEntity.ok(user); // بازگرداندن پاسخ JSON
}
}
کلاس سرویس:
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User getUserById(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new RuntimeException("User not found"));
}
}
Repository:
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
نتیجهگیری
چرخه حیات یک درخواست HTTP در Spring MVC به صورت سازماندهیشده و ماژولار طراحی شده است. این ساختار باعث میشود توسعهدهندگان بتوانند به راحتی منطق تجاری، مسیریابی، و تولید پاسخ را مدیریت کنند. فهم دقیق این چرخه برای ایجاد برنامههای کارا و قابلاعتماد بسیار مهم است.