Bài đăng nổi bật

MVC là một mô hình kiến trúc phần mềm được tạo ra với mục đích quản lí và xây dựng dự án phần mềm có hệ thống hơn, nói cụ thể thì nó là một mẫu thiết kế nhằm chia tách phần giao diện và phần code của ứng dụng để dễ dàng quản lí, bảo trì và phát triển. MVC được áp dụng trên hầu hết các ngôn ngữ lập trình hướng đối tượng hiện nay như C++, C#, Java, PHP, …
MVC chia ứng dụng phần mềm ra thành 3 phần có tương tác với nhau:
Model: thường là các class chứa thông tin đối tượng (dữ liệu), tương tác truy xuất database. Model sẽ đóng gói dữ liệu của ứng dụng và logic nghiệp vụ.
View: là nơi nhận dữ liệu từ model, database và sắp xếp chúng chính xác nhờ yêu cầu từ controller và truyền về client. View sẽ xử lý hiển thị trên ứng dụng.
Controller: Đóng vai trò trung gian giữa Model và View, nó có nhiệm vụ nhận yêu cầu từ client sau đó xử lý request, load model và gửi data qua view tương ứng với nhau rồi trả kết quả về cho client.


Trong mẫu thiết kế này bạn có một servlet hoặc một bộ lọc hoạt động với vai trò controller. Tất cả các framework hiện tại đều triển khai theo mẫu thiết kế này.
Ở đây, các trang JSP được sử dụng như các view của ứng dụng. Đối với model bạn sử dụng POJO.
Trong một ứng dụng MVC, mọi yêu cầu HTTP phải được chuyển tới controller. URI nó cho controller biết action nào cần thực hiện.
Ví dụ, việc thêm một sản phẩm vào CSDL sẽ yêu cầu 2 hành động:
1. Hiển thị forn Add Product để người dùng nhập thông tin sản phẩm
2. Lưu thông tin sản phẩn vào CSDL
Như đã đề cập, bạn sử dụng URI để báo cho controller biết action nào cần gọi.
Ví dụ để ứng dụng gửi form Add Product, bạn sẽ sử dụng URI như sau:
Để ứng dụng lưu một Product, URI sẽ là:
http://domain/appName/save-product

Controller kiểm tra URI để quyết định action nào cần gọi. Nó cũng lưu trữ đối tượng model ở một nơi có thể được truy cập từ view, để các giá trị phía máy chủ có thể hiển thị trên trình duyệt. Cuối cùng controller sử dụng một RequestDispatcher hoặc HttpServletResponse.sendRedirect() để chuyển tiếp đến một view chính là một trang JSP hoặc một tài nguyên khác. Trong trang JSP bạn sử dụng các thẻ để hiển thị dữ liệu.
Lưu ý: Việc gọi RequestDispatcher.forward() hoặc HttpServletResponse.sendRedirect() không ngăn đoạn mã bên dưới nó được thực thi. Do đó, trừ khi lời gọi phương thức đó là dòng mã cuối cùng, bạn cần phải trả về một cách rõ ràng.

if (action.equals(...)) {
    RequestDispatcher rd = request.getRequestDispatcher(dispatchUrl);    
    rd.forward(request, response);     
    return;  //explicitly return. Or else, the code below will be executed

// do something else

Hầu hết bạn sẽ sử dụng một RequestDispatcher để chuyển tiếp đến một view vì nó nhanh hơn sendRedirect. Điều này là do sendRedirect khiến máy chủ gửi mã trạng thái phải hồi HTTP 302 với một Location Header chứa URL mới cho trình duyệt, khi nhận được mã trạng thái 302, trình duyệt tạo một yêu cầu HTTP mới cho URL được tìm thấy trong Location Header.

Post a Comment

أحدث أقدم