Spring MVC - Hiểu nó theo cách đơn giản

Trong bài viết này mình xin chia sẻ chút kiến thức nền tảng của Spring MVC, giúp các bạn có thể hiểu được luồng đi của nó.

  • Cơ chế xử lí Request và Response trong SpringMVC:
  • Một ngày nọ bạn lướt web xem phim, bạn vô tình nhập vào đường link trong trình duyệt với nội dung là webgirlxinh.com, mục đích của bạn chỉ để ngắm gái xinh. Đồng thời với đó, bạn đã yêu cầu server trả về trang girl cho bạn. Thao tác này gọi là request.
  • Thằng server tiếp nhận, nó xử lí, làm lung ta lung tung gì đó. Bụp một cái và trả về ngay cho bạn trang web gril xinh mà bạn cần. Việc trả về như vậy là response. Server tiếp nhận và xử lí như thế nào nhỉ? Nhìn hình sẽ rõ!

Trên mô hình này có request và response là mình nói ở trên rồi.

Quay lại chỗ thằng server nó nhận yêu cầu của bạn. Nó sẽ có một thằng tên là DispatcherServlet. Bạn có thể đọc là Đít ba che sờ lép.

DispatcherServlet là cổng chính của nhà bạn. Cổng chính chính này tiếp nhận mọi thứ, ví dụ khách vào nhà bạn, cổng chính phải mở thì khách mới có thể vào chứ.

Trong SpringMVC thì nói gọi là lớp, tầng tiếp nhận và xử lí mọi yêu cầu. Nó có thể khóa, đóng mở tùy mình. Nó được cấu hình trong file web.xml. Nói nôm na thì nó là cái điều khiển của spring.

Rồi thằng DispatcherServlet này tiếp nhận yêu cầu rồi thì nó hỏi thằng Handler Mapping. “Người dùng gửi yêu cầu như thế thì mình làm gì Handler nhỉ”. Thằng Handler này nó biết người dùng gửi yêu cầu vậy là phải hỏi (ánh xạ) đúng người này. Người này khá quan trọng trong nhà Spring của chúng ta.

Đó là Controller. Thằng này là phần xử lí logic của ứng dụng. Ví dụ khi người dùng muốn đặt hàng ABC thì Controller sẽ làm gì. Tầng này là tầng bạn viết code business logic.

Controller làm gì? DispatcherServlet nhận được yêu cầu vậy thì Controller nó liên lạc trực tiếp xuống Model, kéo dữ liệu ra và trả về dưới dạng ModelAndView object cho DispatcherServlet.

Rồi cuối cùng DisatcherServlet trả về response cho người dùng và hiển thị lên View.

Một điều thú vị là mọi hoạt động đều thông qua DispatcherServlet.