TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG BÀI TẬP LỚN MÔN KIẾN TRÚC PHẦN MỀM Nghiên cứu, tìm hiểu và xây dựng tài liệu kiến trúc của Framework nguồn mở Yii Giáo viên hướng dẫn: TS. Cao Tuấn Dũng Học viên thực hiện : Vũ Văn Soái CB120109 Phạm Văn Phong CB120103 Nguyễn Quỳnh Vân CB120123 Lê Thị Trang CB120118 Nguyễn Văn Chiến CB121349 Nguyễn Văn Thông CB121357 Lớp: Công nghệ thông tin 2 (KT) Chuyên ngành: Công nghệ thông tin (KT) HÀ NỘI 04 – 2013 MỤC LỤC LỜI NÓI ĐẦU 2 CHƯƠNG 1. TỔNG QUAN VỀ YII 3 1.1. Yii là gì? 3 1.2. Đặc tính 3 1.3. Ưu Điểm 5 1.4 Cài đặt Yii 7 CHƯƠNG 2. CÁC TÍNH NĂNG CỦA YII FRAMEWORK 8 2.1. Mô hình thiết kế ModelViewController (MVC) 8 2.2. Database Access Objects (DAO), Query Builder, Active Record, DB Migration 16 2.3. Form nhập và kiểm tra (validate) 16 2.4. Các widget hỗ trợ Ajax(AJAXenabled widgets) 18 2. 5. Xác thực và phân quyền 20 2. 6. Giao diện 20 2. 7. Dịch vụ Web 21 2. 8. Đa ngôn ngữ (I18N) và địa phương hóa (L10N) 21 2.9. Lớp hỗ trợ cache 21 2.10. Xử lý lỗi và Log 22 2.11. Bảo mật 22 2.12. Kiểm thử 22 2.13. Tự động tạo code (Automatic code generation) 22 2.14. Tuân thủ theo XHTML 22 2.15. Thuần hướng đối tượng 23 2.16. Dễ dàng sử dụng với code của bên cung cấp thứ 3 23 2.17. Tài liệu chi tiết 23 2.18. Hệ thống thư viện mở rộng 23 CHƯƠNG 3. SO SÁNH YII VÀ CÁC FRAME KHÁC 25 CHƯƠNG 4. TỔNG KẾT 32 LỜI NÓI ĐẦU Nhiều năm qua đã đánh dấu “sự bùng nổ của các Framework”, và hầu như tất cả mọi người tham gia phát triển ứng dụng web ngày nay là một phần của thế hệ Framework”. Một Framework PHP dễ dàng hơn, mở rộng hơn và hiệu quả hơn để đáp ứng nhu cầu ngày càng tăng của các nhà phát triển ứng dụng Web là điều cần thiết. Vì vậy Yii Framework đã ra đời để đáp ứng các nhu cầu trên. Cho dù là một developer, phát triển một website nhỏ, đơn giản hay một nhóm developer phát triển một website đòi hỏi sự phức tạp cao, thì sử dụng Yii framework cũng có thể tăng thêm cho nhóm phát triển về các kinh nghiệm bổ sung, sự chuyên nghiệp và nguồn tài nguyên hiệu quả. Tất cả đều miễn phí. Chúng ta chỉ tập trung giải quyết tốt các nhiệm vụ cụ thể được yêu cầu mà không phải quan tâm vào việc viết các đoạn code. Qua đây, chúng em xin gửi lời cảm ơn sâu sắc đến TS Cao Tuấn Dũng đã hướng dẫn, tạo điều kiện tốt để chúng em hoàn thành tiểu luận của mình. Hà Nội, ngày 2 tháng 4 năm 2013 Nhóm trưởng Vũ Văn Soái CHƯƠNG 1. TỔNG QUAN VỀ YII 1.1. Yii là gì? Yii là một PHP framework được xây dựng để phát triển các ứng dụng web quy mô lớn dựa trên nền tảng component (thành phần sử dụng lại). Yii cho phép tái sử dụng tối đa các thành phần của hệ thống (ứng dụng) để tăng tốc độ viết ứng dụng. Tên Yii (phát âm là `i:`) theo tiếng Anh là easy, efficient và extensible. Yii được viết bằng PHP5, chủ yếu tập trung vào highperformance, componentbased cho phép dễ dàng tạo cũng như bảo trị các ứng dụng web, giúp làm việc hiệu quả hơn. Yii nói chung là một framework phát triển ứng dụng Web nên có thể dùng để viết mọi loại ứng dụng Web. Yii rất nhẹ và được trang bị giải pháp cache tối ưu nên nó đặc biệt hữu dụng cho ứng dụng web có dung lượng dữ liệu trên đường truyền lớn như web portal, forum, CMS, ecommerce... 1.2. Đặc tính Easy: Để phát triển ứng dụng trên Yii cần biết PHP và OOP, ứng dụng được viết và bảo trì dựa trên các PHP class được thừa kế từ core Yii Framework Efficient: Ứng dụng Yii được viết theo mô hình MVC (ModelViewController) điều này giúp tăng khả năng tái sử dụng code, dễ dàng bảo trì cũng như nâng cấp sau này mà không ảnh hưởng nhiều đến hệ thống hiện tại. Việc tách biệt giữa business logic và presentation tăng khả năng tùy biến cho các site khác nhau. Extensible: Hệ thống hỗ trợ sẵn ajax, web service, ADO, Active Record, cache, i18n, RBAC, theme… Ngoài các thư viện được cung cấp kèm theo, có thể dễ dàng phát triển các extension theo nhu cầu hoặc sử dụng các thư viện khác như Zend chẳng hạn. Security: Tăng cường khả năng bảo mật, tránh các kiểu tấn công như SQL injection, crosssite scripting (XSS), crosssite request forgery (CSRF), and cookie tampering Yii tốt hơn các framework khác bởi tính hiệu quả, nhiều tính năng và có tài liệu hướng dẫn đầy đủ (tài liệu từ nhà phát hành). Yii được thiết kế cẩn thận từ ban đầu để đáp ứng nhu cầu phát triển ứng dụng Web nghiêm ngặt. Yii không phải là sự trộn lẫn của các dự án đã qua hay tập hợp các 3rd party library. Nó là kết quả của kinh nghiệm phát triển ứng dụng Web lâu năm của các tác giả và sự phân tích kỹ lưỡng, tận dụng những điểm mạnh của các framework khác. Yii là một Framework dễ phát triển
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BÀI TẬP LỚN MÔN: KIẾN TRÚC PHẦN MỀM
Nghiên cứu, tìm hiểu và xây dựng tài liệu kiến trúc của Framework
nguồn mở Yii
Giáo viên hướng dẫn: TS Cao Tuấn Dũng
Học viên thực hiện : Vũ Văn Soái CB120109
Chuyên ngành: Công nghệ thông tin (KT)
HÀ NỘI 04 – 2013
Trang 2MỤC LỤC
LỜI NÓI ĐẦU 2
CHƯƠNG 1 TỔNG QUAN VỀ YII 3
1.1 Yii là gì? 3
1.2 Đặc tính 3
1.3 Ưu Điểm 5
1.4 Cài đặt Yii 7
CHƯƠNG 2 CÁC TÍNH NĂNG CỦA YII FRAMEWORK 8
2.1 Mô hình thiết kế Model-View-Controller (MVC) 8
2.2 Database Access Objects (DAO), Query Builder, Active Record, DB Migration 16
2.3 Form nhập và kiểm tra (validate) 16
2.4 Các widget hỗ trợ Ajax(AJAX-enabled widgets) 18
2 5 Xác thực và phân quyền 20
2 6 Giao diện 20
2 7 Dịch vụ Web 21
2 8 Đa ngôn ngữ (I18N) và địa phương hóa (L10N) 21
2.9 Lớp hỗ trợ cache 21
2.10 Xử lý lỗi và Log 22
2.11 Bảo mật 22
2.12 Kiểm thử 22
2.13 Tự động tạo code (Automatic code generation) 22
2.14 Tuân thủ theo XHTML 22
2.15 Thuần hướng đối tượng 23
2.16 Dễ dàng sử dụng với code của bên cung cấp thứ 3 23
2.17 Tài liệu chi tiết 23
2.18 Hệ thống thư viện mở rộng 23
CHƯƠNG 3 SO SÁNH YII VÀ CÁC FRAME KHÁC 25
CHƯƠNG 4 TỔNG KẾT 32
Trang 3LỜI NÓI ĐẦU
Nhiều năm qua đã đánh dấu “sự bùng nổ của các Framework”, và hầu nhưtất cả mọi người tham gia phát triển ứng dụng web ngày nay là một phần của thế
hệ "Framework” Một Framework PHP dễ dàng hơn, mở rộng hơn và hiệu quảhơn để đáp ứng nhu cầu ngày càng tăng của các nhà phát triển ứng dụng Web làđiều cần thiết Vì vậy Yii Framework đã ra đời để đáp ứng các nhu cầu trên
Cho dù là một developer, phát triển một website nhỏ, đơn giản hay mộtnhóm developer phát triển một website đòi hỏi sự phức tạp cao, thì sử dụng Yiiframework cũng có thể tăng thêm cho nhóm phát triển về các kinh nghiệm bổsung, sự chuyên nghiệp và nguồn tài nguyên hiệu quả Tất cả đều miễn phí.Chúng ta chỉ tập trung giải quyết tốt các nhiệm vụ cụ thể được yêu cầu màkhông phải quan tâm vào việc viết các đoạn code
Qua đây, chúng em xin gửi lời cảm ơn sâu sắc đến TS Cao Tuấn Dũng đãhướng dẫn, tạo điều kiện tốt để chúng em hoàn thành tiểu luận của mình
Hà Nội, ngày 2 tháng 4 năm 2013
Nhóm trưởng
Vũ Văn Soái
Trang 4CHƯƠNG 1 TỔNG QUAN VỀ YII 1.1 Yii là gì?
Yii là một PHP framework được xây dựng để phát triển các ứng dụng webquy mô lớn dựa trên nền tảng component (thành phần sử dụng lại) Yii cho phéptái sử dụng tối đa các thành phần của hệ thống (ứng dụng) để tăng tốc độ viếtứng dụng Tên Yii (phát âm là `/i:/`) theo tiếng Anh là easy, efficient vàextensible
Yii được viết bằng PHP5, chủ yếu tập trung vào high-performance,component-based cho phép dễ dàng tạo cũng như bảo trị các ứng dụng web,giúp làm việc hiệu quả hơn
Yii - nói chung là một framework phát triển ứng dụng Web nên có thể dùng
để viết mọi loại ứng dụng Web Yii rất nhẹ và được trang bị giải pháp cache tối
ưu nên nó đặc biệt hữu dụng cho ứng dụng web có dung lượng dữ liệu trênđường truyền lớn như web portal, forum, CMS, e-commerce
1.2 Đặc tính
Easy: Để phát triển ứng dụng trên Yii cần biết PHP và OOP, ứng dụng
được viết và bảo trì dựa trên các PHP class được thừa kế từ core Yii Framework
Efficient: Ứng dụng Yii được viết theo mô hình MVC
(Model-View-Controller) điều này giúp tăng khả năng tái sử dụng code, dễ dàng bảo trì cũngnhư nâng cấp sau này mà không ảnh hưởng nhiều đến hệ thống hiện tại Việctách biệt giữa business logic và presentation tăng khả năng tùy biến cho các sitekhác nhau
Extensible: Hệ thống hỗ trợ sẵn ajax, web service, ADO, Active Record,
cache, i18n, RBAC, theme… Ngoài các thư viện được cung cấp kèm theo, cóthể dễ dàng phát triển các extension theo nhu cầu hoặc sử dụng các thư viện
Trang 5Security: Tăng cường khả năng bảo mật, tránh các kiểu tấn công như SQL
injection, cross-site scripting (XSS), cross-site request forgery (CSRF), andcookie tampering
Yii tốt hơn các framework khác bởi tính hiệu quả, nhiều tính năng và có tàiliệu hướng dẫn đầy đủ (tài liệu từ nhà phát hành) Yii được thiết kế cẩn thận từban đầu để đáp ứng nhu cầu phát triển ứng dụng Web nghiêm ngặt Yii khôngphải là sự trộn lẫn của các dự án đã qua hay tập hợp các 3rd party library
Nó là kết quả của kinh nghiệm phát triển ứng dụng Web lâu năm của cáctác giả và sự phân tích kỹ lưỡng, tận dụng những điểm mạnh của các frameworkkhác
Yii là một Framework dễ phát triển
Để chạy một ứng dụng web Yii, tất cả những gì cần là download YiiFramework phiên bản mới nhất và một máy chủ hỗ trợ PHP 5.1.0 hoặc cao hơn
Để phát triển với Yii, chỉ cần biết PHP và lập trình hướng đối tượng (OOP).Không cần phải học bất kỳ hệ điều hành hoặc ngôn ngữ lập trình mới nào Xâydựng một ứng dụng Yii chủ yếu liên quan đến việc viết và duy trì các lớp PHPcủa theo yêu cầu dự án, một số trong đó sẽ mở rộng từ các lớp thành phần chínhcủa Yii Framework
Yii kết hợp rất nhiều các ý tưởng tuyệt vời và tích lũy từ các Framework vàứng dụng web nổi tiếng khác Vì vậy, nếu đang tìm hiểu Yii sau khi đã sử dụngcác Framework phát triển khác, đây là điều kiện để có thể đánh giá Frameworknào ưu điểm hơn và định hướng cho dự án phù hợp
Yii cũng bao gồm một quy ước cấu hình, góp phần để dễ sử dụng Điều này
có nghĩa rằng Yii đã quy ước cho hầu như tất cả các hệ thống ứng dụng Nếuthực hiện theo các quy ước, sẽ code ít hơn và tốn ít thời gian phát triển ứng dụngcủa hơn Nếu muốn, Yii cho phép tùy biến và linh hoạt mà không phải theo quyước của Yii
Trang 6Yii có hiệu xuất cao
Yii đã được thiết kế cẩn thận để cho phép gần như tất cả đoạn code đượcphát triển và chỉnh sửa để đáp ứng bất kỳ yêu cầu nào Nếu muốn phát triểncode mở rộng hơn thành các công cụ hữu ích cho các nhà phát triển khác sửdụng, Yii cung cấp theo các bước và hướng dẫn để giúp bạn dễ dàng phát triển.Điều này cho phép đóng góp vào danh sách ngày càng tăng các tính năng củaYii và tích cực tham gia trong việc mở rộng Điều gì đáng chú ý về Yii ? là dễ
sử dụng, hiệu suất cao, và chiều sâu mở rộng không tốn kém Yii được đóng góivới các tính năng giúp bạn đáp ứng những nhu cầu cao trên ứng dụng web hiệnnay AJAX cho phép web tích hợp các widgets, thực thi của một kiến trúc MVC,DAO và quan hệ lớp ActiveRecord, kiểm soát truy cập, xem video chuyênnghiệp, quốc tế (I18N),và nội địa hoá (l10n), đây là các tính năng vượt trội củaYii Với phiên bản 1.1, Framework chính bây giờ là được đóng gói với một thưviện mở rộng chính thức được gọi là Zii Những mở rộng được phát triển và duytrì bởi các thành viên chủ chốt tiếp tục mở rộng tính năng của Yii
1.3 Ưu Điểm
Yii tốt hơn các Framework khác bởi tính hiệu quả, nhiều tính năng Yiiđược thiết kế cẩn thận từ ban đầu để đáp ứng nhu cầu phát triển ứng dụng Webnghiêm ngặt Yii là kết quả của sự kết hợp những gì tốt nhất của các Framework
đi trước Nó là kết quả của kinh nghiệm phát triển ứng dụng Web lâu năm củacác tác giả và sự phân tích kỹ lưỡng, tận dụng những điểm mạnh của cácFramework khác
Trước đó, Qiang đã từng phát triển PRADO nhiều năm Những năm kinhnghiệm và đánh giá của người sử dụng, cần một Framework PHP dễ dàng hơn,
mở rộng hơn và hiệu quả hơn để đáp ứng nhu cầu ngày càng tăng của các nhàphát triển ứng dụng web Số liệu cực kỳ ấn tượng khi so sánh với các
Trang 7Framework PHP khác dựa trên hiệu suất của nó ngay lập tức đã thu hút sự chú
ý rất tích cực
Khả năng tái sử dụng và mở rộng của Yii rất cao Yii là 1 Framework hoàntoàn hướng đối tượng Mọi thứ trong Yii đều có thể tái sử dụng và mở rộng rất
dễ dàng
Yii hỗ trợ trên tất cả các DBMS bởi PDO (PHP Data Object)
Hiệu suất xử lý của ZendFramework khá là chậm, vì kiến trúc của nó quá
đồ sộ và phức tạp
Hiện tại có rất nhiều người ưa thích sử dụng Wordpress hay Joomla nhưngchỉ phù hợp xây dựng các website nhỏ, cần làm nhanh, vì có sẳn nhiều thứ, cộngđồng và tài liệu nhiều Khi nâng cấp và bảo trì rất khó khăn, tốn nhiều thờigian
Hiệu suất xử lý của Framework Yii hiệu quả cao Biểu đồ dưới đây chothấy hiệu quả hơn hẳn so với các Framework PHP khác RPS là viết tắt của
“Request per second” nhằm mô tả việc làm mới ứng dụng có thể xử lý trong mỗigiây Số càng cao thì tính hiệu quả càng lớn của Framework Sự thuận lợi nàycủa Yii rất cần thiết cho người sử dụng khi tương tác với ứng dụng
Trang 81.4 Cài đặt Yii
Yêu cầu
Sau khi cài đặt Yii, kiểm tra máy chủ có đáp ứng các yêu cầu Có thể làmnhư vậy bằng cách truy cập kiểm tra kịch bản yêu cầu tại followingURL trongmột trình duyệt web:
Cài đặt Yii qua 2 bước sau:
• Tải về Yii Framework từ yiiframework.com
Trang 9• Giải nén Yii vào một thư mục Web có thể truy cập.
CHƯƠNG 2 CÁC TÍNH NĂNG CỦA YII FRAMEWORK
2.1 Mô hình thiết kế Model-View-Controller (MVC)
Yii framework sử dụng kiến trúc đã được kiểm chứng MVC, hỗ trợ việcphân tách các phần liên quan với nhau
MCV (Model View Controller) là tên một phương pháp chia nhỏ một ứngdụng thành ba thành phần để cài đặt, mỗi thành phần đóng một vai trò khác nhau
và ảnh hưởng lẫn nhau, đó là models, views, và controllers
Trang 10Hình 2.1 Mô hình MVC
Models (Tầng dữ liệu): là một đối tượng hoặc một tập hợp các đối tượng
biểu diễn cho phần dữ liệu của chương trình, ví dụ như các dữ liệu được lưutrong database, dữ liệu từ một hệ thống các ứng dụng khác như legacy system,file system, mail system …
Thông thường trong kiến trúc MVC, Model là phần rất quan trọng trong cả
dự án, nó có quan hệ mật thiết với cơ sở dữ liệu
Yii có 2 loại model: form model là lớp (CFormModel) và active recordmodel là lớp (CActiveRecord) Cả hai được mở rộng từ lớp (CModel).CFormModel đại diện cho mô hình dữ liệu do người dùng nhập vào ở dạngHTML Sau đó lưu dữ liệu này vào bộ nhớ và thông qua CActiveRecord dữ liệuđược lưu vào CSDL
Trang 11ActiveRecord (AR) là một mô hình được sử dụng để truy cập cơ sở dữ liệutheo hướng đối tượng Mỗi đối tượng AR trong Yii là một thể hiện củaCActiveRecord là kết quả của 1 dòng dữ liệu của bảng được tạo trong CSDL.
Views (Tầng giao diện): là phần giao diện với người dùng, bao gồm việc
hiện dữ liệu ra màn hình, cung cấp các menu, nút bấm, hộp đối thoại, chọn lựa
…, để người dùng có thể thêm, xóa, sửa, tìm kiếm và làm các thao tác khác đốivới dữ liệu trong hệ thống Thông thường, các thông tin cần hiển thị được lấy từthành phần Models
Nó có thể chứa câu lệnh PHP nhưng nó được khuyến cáo không nên thayđổi mô hình dữ liệu nên vẫn còn tương đối đơn giản
Các câu lệnh PHP trong View thường có các điều kiện và vòng lặp rất đơngiản, và được hỗ trợ bởi các phương thức HTML và Widget là lớp có thể tái sửdụng nhiều lần
Controllers (Tầng điều khiển)
Controller là một thể hiện của CController Nó được tạo ra bởi các ứngdụng khi người dùng yêu cầu Controller là thiết bị điều khiển chính cho các yêucầu từ người sử dụng, và nó sẽ tương tác với cơ sở dữ liệu Một lớp trongController có tên bắt đầu là “action” Khi tạo mới một ứng dụng Yii thì mặcđịnh trong Controller là có lớp actionIndex, actionContact
Code dưới đây nó định nghĩa 1 SiteController gồm 1 index action và 1 contact action:
class SiteController extends CController
{
public function actionIndex()
{
//
Trang 12Trong kiến trúc MVC, view chỉ có tác dụng hiển thị giao diện, còn điềukhiển dòng nhập xuất của người dùng vẫn do Controllers đảm trách Trong phântích/ thiết kế hướng đối tượng (OOA/OOD), khi nói đến MVC, người ta thườngdùng các thuật ngữ MVC Design Pattern, MVC Framework, MVC Paradigm.
Có người lại nói, về thiết kế chương trình, vẽ diagram về cấu trúc của chươngtrình, MVC là một phương pháp thiết kế (Design Pattern) Khi có một bộ công
cụ tiện ích lập trình hỗ trợ cho lập trình viên viết chương trình theo phương phápMVC (ví dụ như Jakarta Struts ), thì bộ công cụ tiện ích lập trình đó gọi là MVCFramework implementation Còn từ Paradigm dùng cho MVC mang tính chấtchỉ chung chung Hiện nay, tại Mỹ, các thuật ngữ trên thường được dùng lẫn,tùy theo tác giả và hoàn cảnh
Sau đây là quy trình hoạt động:
Lược đồ sau đây mô tả một workflow tiêu biểu của 1 ứng dụng Yii khiđang xử lý request từ user
Trang 13Hình 2.2 Quy trình hoạt động
Trang 141 user gửi một request với một
2 url http://www.example.com/index.php?r=post/show&id=1, WebServer sẽ xử lý request đó bằng cách thực thi script bootstrap(index.php)
3 Script bootstrap sẽ tạo một thể hiện (instance) của Application vàchạy nó
4 Application lấy thông tin trong request từ một component ứng dụng
có tên là request
5 Ứng dụng sẽ xác định controller và action phù hợp với sự giúp đỡ củamột component ứng dụng có tên là urlManager VD: Từ url trên, tathấy controller cần gọi là post và trong controller này action ta cần gọi
là show, ứng dụng sẽ tìm đến function actionShow() có trong classPostController
6 Ứng dụng sẽ tạo một thể hiện của controller cần gọi để tiếp tục xử lýrequest từ user Controller sẽ xác định được request sẽ chuyển đếnmột phương thức có tên là actionShow(), nó tạo và thực thi các filter(vi dụ như access control, benchmarking) kết hợp với action được gọi.Action được thực thi nếu đúng với filter
7 Action sẽ đọc model Post với ID là 1 từ cơ sở dữ liệu
8 Action sẽ render ra một view có tên là show với model Post
9 View đọc và hiển thị các thuộc tính của model Post
10.View thực thi các widget
11.View sẽ render kết quả được nhúng trong layout
12.Action hoàn tất việc render và hiển thị kết quả cho người dùng
Trong tiểu luận này, nhóm chúng em xin đưa ra 2 mô hình MVC thamkhảo:
Trang 15MVC 1: Trong MVC model 1, các trang JSP đóng vai trò Hiển thị (View)
và Điều khiển (Controller) Có thể có nhiều trang JSP khác nhau đóng các vaitrò khác nhau
Hình 2.3 Sơ đồ MVC 1
Khi người sử dụng dùng các nút bấm, menu hoặc link … trên trình duyệtWeb (Web browser) để thực hiện một thao tác, một lệnh (có thể kèm theo cáctham số) được gửi tới một trang JSP tương ứng Trang JSP này sẽ khởi tạo mộthoặc nhiều Java Bean (nếu cần thiết), truyền các lệnh cần thi hành tới Java Bean.Chú ý rằng đây là các Java Bean thông thường, chứ không phải Enterprise JavaBean (EJB) Sau khi Java Bean thực hiện xong việc truy xuất hoặc cập nhật dữliệu, trang JSP ban đầu có thể hiển thị dữ liệu lấy từ Bean (JSP ban đầu đóngluôn vai trò View), hoặc chọn một trang JSP khác để hiện dữ liệu từ Bean (JSPban đầu đóng luôn vai trò Controller) Trong một thiết kế tốt, để bảo đảm việctách rời phần trình bày và logic của chương trình, trang JSP nhận request chỉđóng vai trò Điều khiển (Controller) MVC model 1 có một nhược điểm là phầnlogic điều khiển được viết trong trang JSP, như vậy phần chương trình Javaphức tạp dùng để điều khiển sẽ bị lẫn vào trong mã HTML dùng để trình bày
Độ phức tạp của chương trình càng cao, thì trang JSP càng khó bảo trì Hơn nữatrong các dự án phần mềm phức tạp, thì phẩn hiển thị của trang JSP thườngđược làm bởi người thiết kế Web, giỏi về HTML và đồ họa, còn phần chương
Trang 16trình Java được viết bởi lập trình viên chuyên về lập trình Trong các dự án phứctạp, dùng JSP làm phần điều khiển sẽ làm lẫn lộn việc phân chia ranh giới tráchnhiệm giữa nhóm thiết kế đồ họa và nhóm lập trình, đôi khi dẫn đến việc bảo trì
và phát triển trở nên rất khó khăn, gần như không thể làm được
MVC 2: Trong MVC model 2, một hoặc nhiều servlet (thường là một)
đóng vai trò điều khiển, các Java Bean đóng vai trò Mô hình và các trang JSPđóng vai trò hiển thị
Trong model 2, các logic phức tạp của chương trình được viết hoàn toàntrong các servlet, là các chương trình Java Phần hiển thị chỉ gồm các trang JSPvới một vài mã đơn giản để lấy dữ liệu có sẵn, không có logic phức tạp, vì thếhoàn toàn có thể được tạo ra bằng những người thiết kế Web Các yêu cầu củangười dùng được gửi từ trình duyệt Web tới servlet Servlet sẽ khởi tạo JavaBean (nếu cần thiết), ra lệnh thu thập, cập nhật thông tin Khi Java Bean hoànthành công việc, servlet sẽ chọn trang JSP thích hợp để hiện thông tin trong JavaBean cho người dùng Đây chính là một cách sử dụng MVC rất hiệu quả trongJava
Tất nhiên là sử dụng MVC model 2 một cách hoàn toàn cứng nhắc, phầnĐiều khiển chỉ dùng servlet, phần Hiển thị chỉ dùng JSP sẽ dẫn đến một vàitrường hợp kém hiệu quả, nhất là khi có các request từ trình duyệt Web chỉ đòihỏi việc hiển thị thông tin
Ví dụ: Một trang Web đang hiện các mail trong mail box từ mail thứ 20đến mail thứ 40 Danh sách các mail này đã có sẵn phần mô hình khi người dùnglogin và phần điều khiển ra lệnh cho phần; mô hình lấy danh sách các mail cótrong mail box trong POP server Từ trang Web này, người dùng phát ra mộtyêu cầu “Next” để xem tiếp danh sách các mail từ mail thứ 40 đến mail thứ 60 Đây đơn thuần chỉ là đòi hỏi thông tin hiển thị, do đó, nếu gửi qua servletđiều khiển , servlet sẽ không làm gì cả, mà chỉ gửi yêu cầu hiển thị tới trang JSP