|
Thiết kế MVC và Java Web Mail

Phương pháp thiết kế MVC bắt nguồn từ việc
phát triển giao diện người dùng trong ngôn ngữ lập trình Smalltalk, đây
là một trong những phương pháp thiết kế thành công nhất trong các
phương pháp thiết kế hướng đối tượng. Hiện nay, MVC được dùng rộng rãi
trong nhiều hệ thống phần mềm hướng đối tượng, bất kể được viết bằng
ngôn ngữ hướng đối tượng nào.
Bài viết này giới thiệu tổng quan
về phương pháp thiết kế MVC, và minh họa cách sử dụng MVC trong thiết
kế hướng đối tượng bằng việc xây dựng chương trình Java Web Mail. Bạn
đọc phải quen thuộc với ngôn ngữ lập trình Java, các khái niệm về JSP,
Servlet, Java Mail API.
Thiết kế MVC và Java MVC
là viết tắt của Model-View-Controller. Phương pháp thiết kế MVC (MVC
Design Pattern)[1] là phương pháp chia nhỏ một ứng dụng nhiều lớp hoặc
chia nhỏ phần giao diện người dùng (user interface) của một ứng dụng
thành ba thành phần chính là Model, View và Controller (hình 1).
-
Model (tạm dịch là phần “Mô hình” [2]): Là một đối tượng hoặc 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ụ các dữ
liệu được lưu trong cơ sở dữ liệu (CSDL) hay từ các hệ thống ứng dụng
khác (như mail...). - View (tạm dịch là phần “Hiển thị”): 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 đối với dữ liệu trong
hệ thống. - Controller (tạm dịch là phần “Điều khiển”): Là phần điều
khiển toàn bộ logic về hoạt động của giao diện, tương tác với thao tác
của người dùng (từ chuột, bàn phím và các thiết bị ngoại vi khác) và
cập nhật, thao tác trên dữ liệu theo đầu vào nhận được và điều khiển
việc chọn phần “Hiển thị” thích hợp để truyền dữ liệu tới người dùng.
Với
phương pháp thiết kế này, các chức năng hiển thị, chức năng logic điều
khiển và chức năng truy cập dữ liệu của chương trình được chia làm các
phần tách biệt. Java là một ngôn ngữ lập trình hướng đối tượng
thuần túy nên việc áp dụng MVC vào các phần mềm viết bằng Java rất dễ
dàng và hiển nhiên. Có hai hình mẫu chính của phương pháp thiết kế MVC
trong Java là MVC model 1 (hình 2) và MVC model 2 (hình 3). 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 vai
trò khác nhau. Thao tác của người dùng trên trình duyệt web được gửi tới một trang JSP. Trang
JSP này sẽ khởi tạo một hoặ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 (không phải Enterprise Java Bean).
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 đóng
luôn vai trò View), hoặc chọn một trang JSP khác để hiện dữ liệu từ
Bean (JSP ban đầu đóng luôn vai trò Controller). Trong một thiết kế
tốt, để bảo đảm việc tách rời phần trình bày và logic của chương trình,
trang JSP nhận yêu cầu chỉ đóng vai trò “Điều khiển” (Controller).
MVC
model 1 có một nhược điểm là phần logic điều khiển được viết trong
trang JSP, như vậy phần chương trình Java phứ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ó phát triển và bảo trì. Hơn nữa,
trong các dự án phức tạp, phần hiển thị do người thiết kế web giỏi về
HTML và đồ họa thực hiện, còn phần điều khiển được người chuyên về lập
trình thực hiện. Dùng JSP làm phần điều khiển sẽ khó phân ranh giới
trách nhiệm giữa nhóm thiết kế đồ họa và nhóm lập trình. Để khắc phục
nhược điểm này, MVC model 2 ra đời.
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àn trong
các servlet (chương trình Java). Phần hiển thị chỉ gồm các trang JSP
vớ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ể giao cho người thiết kế web. Các yêu cầu của
người dùng được gửi từ trình duyệt web tới servlet. Servlet sẽ khởi tạo
Java Bean (nếu cần thiết), ra lệnh thu thập, cập nhật thông tin. Khi
Java Bean hoàn thành công việc, servlet sẽ chọn trang JSP thích hợp để
hiện thông tin trong Java Bean cho người dùng.
Đây là một cách
sử dụng MVC rất hiệu quả trong Java. Tất nhiên, 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ài trường hợp kém hiệu quả,
nhất là khi các yêu cầu từ trình duyệt web chỉ đòi hỏi việc hiển thị
thông tin. Trong trường hợp này, gửi thẳng yêu cầu hiển thị từ trình
duyệt web tới trang JSP sẽ hiệu quả hơn (hình 4).
Trong cách áp
dụng MVC này, các yêu cầu có liên quan đến logic chương trình hoặc truy
cập dữ liệu sẽ được gửi tới servlet controller, còn các yêu cầu chỉ
liên quan tới hiển thị sẽ được gửi tới JSP controller.
Chương trình Java Web Mail Chương
trình Java Web Mail được thiết kế theo MVC model 2. Yêu cầu của chương
trình chỉ là hiện màn hình đăng nhập username và password, không có
logic, nên nó có thể được gọi thông qua servlet controller hoặc JSP
controller. Sau đó, tùy theo các yêu cầu mà HTTP request sẽ được chuyển
đến servlet controller hoặc JSP controller cho phù hợp.
Chương trình gồm các chức năng sau: - Sử dụng HTTP để đọc và gửi mail từ bất kỳ một mail server nào dùng POP3 protocol trên Internet hoặc trong intranet. -
Có thể truy cập mail qua bất kỳ proxy server nào có chức năng HTTP
proxy. Chức năng này rất có ích khi người dùng kết nối vào Internet từ
một mạng intranet phía sau một tường lửa (firewall), và firewall này
ngăn chặn các máy tính trong intranet truy cập POP server bên ngoài,
trong khi đó, người dùng muốn gửi và nhận mail từ một POP server trên
Internet. - Sử dụng khả năng xử lý các loại dữ liệu của trình duyệt web để hiện attachment. Chương trình gồm các thành phần sau:
Một
servlet controller MailUtilServlet, dùng để nhận các yêu cầu: log in,
log out, gửi mail, hiện tập tin đính kèm (attachment). Những yêu cầu
này sẽ được xử lý về mặt logic rồi gửi tới Java Bean để thực sự làm
công việc truy cập mail server. Sau khi Java Bean thực hiện việc truy
cập dữ liệu xong, MailUtilServlet sẽ chọn trang JSP thích hợp để hiển
thị dữ liệu. Một Java Bean MailUserBean dùng để truy cập mail server, lấy danh sách và mội dung mail trong mail box, xóa mail trong server.
Trang
JSP index.jsp đóng vai trò JSP controller, dùng để nhận các yêu cầu:
hiện danh sách các mail trong hộp thư, hiện nội dung của một mail được
chọn trong danh sách, hiện trang soạn thảo mail để người dùng soạn thảo
và gửi mail. Những thông tin cần để hiển thị đã có sẵn trong
MailUserBean, vì MailUserBean đã lấy những thông tin này khi nhận được
yêu cầu log in từ MailUtilServlet. Vì thế, những loại yêu cầu này thuộc
về loại yêu cầu hiển thị, không có logic phức tạp, nên không cần phải
gửi qua MailUtilServlet.
Tập hợp các trang JSP: * menu.jsp dùng để hiện menu lệnh bao gồm Log in, Inbox, Compose và Exit. * first.jsp là trang để nhập username, password, mailserver cho việc login. * messageheaders.jsp là trang hiện danh sách mail có trong mail box để người dùng chọn xem và xóa mail. * messagecontent.jsp là trang để hiện nội dung của mail đã chọn từ danh sách. * compose.jsp là trang để soạn thảo mail cần gửi. *
status.jsp là trang dùng để báo về lỗi khi log in, log out không thành
công, và thông báo về kết quả gửi mail thành công hay không. *
errordetails.jsp là trang dùng để cung cấp thông tin chi tiết mỗi khi
có lỗi log in, log out, gửi mail không thành công. Thông tin trong
trang này bao gồm cả Stack Trace của exception khi sinh ra lỗi, chủ yếu
dành cho lập trình viên dùng để xem chi tiết về vấn đề đã xảy ra. * logout.jsp là trang hiện ra khi người dùng log in ra khỏi hệ thống mail. Một vài trang JSP và text file khác dùng để trang trí. * Một CSS (Cascade Style Sheet) tên là styleSheet.txt, dùng để định dạng về font và màu sắc cho tất cả các file JSP. Trong
hệ thống này, không có database sever. MailUserBean lấy và cập nhật dữ
liệu từ POP mail server, gửi mail từ SMTP server, sử dụng Java Mail API. Đây
là một ứng dụng web sử dụng JSP/Servlet nên phải được cài đặt trên một
web server có hỗ trợ servlet engine (ví dụ BEA WebLogic, IBM Web
Sphere, Sun One, JBoss, Tomcat, Alaire JRun...) hoặc một web server kết
nối với servlet engine (ví dụ như IIS + Tomcat, Apache + Tomcat, IIS +
JRun, Apache + Jrun...). Bạn đọc có thể tải về toàn bộ mã nguồn chương trình (trong đó có phần hướng dẫn triển khai ứng dụng) ở website TGVT-PCW VN.
Châu Hồng Lĩnh chauhonglinh@hanoian.com
|
|

 08.54077596 (ext 108) Mr Mười : 0908134772


|
|