7.2.1.Sự hình thành Struts Framework
7.2.2.2.Phân tích chi tiết bài toán
việc sử dụng Struts framework chổ nào. Phần này chúng ta khám phá các thành phần của nó.
Các package của Struts
Struts framework được xây dựng từ khoảng 200 lớp Java, được chia làm 15 packages. Sự xấp xỉ là tương đối vì framework đang tiếp tục được mở rộng và phát triển nữa. Ở đây chúng ta chỉ tập trung vào các package ở mức cao. Sau đây là các package ở tầng trên của Struts framework và sự phụ thuộc giữa chúng.
Hình 7.4 - 7 package ở tầng cao của Struts framework
Các thành phần của framework không được sắp xếp bởi vai trò như thế nào trong mô hình. Chúng được sắp xếp hơi bừa bãi một chút. Ví dụ package action, chứa các lớp hổ trợ cho controller, một số được sử dụng bởi view domain, và thậm chí nó còn có mặt trong package util. Có một số package mức cao cũng chứa các package con.
Thành phần Controller
Như chúng ta đã xét ở trên, thành phần controller trong mô hình MVC có một số nhiêm vụ. Các nhiệm vụ đó bao gồm nhận đầu vào từ client, gọi toán tử nghiệp vụ, và tìm thành phần view để trã về cho phía client. Tât nhiên, rất nhiều hàm mà controller có thể thực hiện.
Trong Struts framework servlet trở thành điểm trung tâm cho ứng dụng web. Servlet điều khiển sẽ ánh xạ giữa action của user với các hàm nghiệp vụ và hổ trợ lựa chọn view trã về dựa trên thông tin của request đã được xử lý. Tham khảo lại hình 1.4, đấy chính là mô hình sử dụng servlet của Struts framework.
Tuy nhiên trong Struts framework, nhiệm vụ của controller được thực hiện bởi một vài thành phần khác, một trong số đó được thực hiện trong lớp ActionServlet.
Là mở rộng của HttpServlet. ActionServlet không phải là trừu tượng và do đó có thể sử dụng nó như là controller riêng lẽ bởi ứng dụng bất kỳ. Nhiệm vụ của lớp này là nhận request và xử lý nó sau đó gọi tới handler phù hợp. Trong version 1.1, một lớp mới gọi là RequestProcessor được xây dựng nhằm xử lý thông tin của controller. Lý do tách biệt phần xử lý khỏi ActionServlet là để cung cấp nhà phát triển sự linh động cho các lớp con của RequestProcessor. Với ví dụ online banking, ta sử dụng các lớp mặc định của RequestProcessor và ActionServlet cung cấp bởi framework.
Cũng giống như Java Servlet khác, ActionServlet cũng phải được config trong phần deployment descriptor của ứng dụng web.
Khi controller nhận đựơc request từ phía client, nó chuyển giao điểu khiển request cho lớp helper. Lớp helper thực hiện chạy toán tử nghiệp vụ, nó tương ứng với request action. Trong Struts framework, lớp helper là con của lớp Action.
Lớp Action
Lớp Action trong Struts framework là một mở rộng của thành phần controller. Nó hoạt động như là cầu nối giữa user action và một toán tử nghiệp vụ. Lớp Action còn có thể thực nhiều hàm khác, như là kiểm chứng, logging, validation, trước khi gọi các toán tử nghiệp.
Struts Action có chứa môt số phương thức, nhưng quan trọng nhất là phương thức execute().Phương thức execute() đựơc gọi trong một đối tượng lớp Action bởi bộ phận controller khi một request được nhận từ client. Controller sẽ tạo ra một instance của lớp Action nếu nó chưa tồn tại. Struts framework chỉ tạo duy nhất một instance của một lớp trong một ứng dụng.Từ đó instance này sẽ được dùng với mọi user, bạn phải chắc chắn rằng tất cả lớp Action của hoạt động trong môi trường đa tiến trình. Mặc dù phương thức execute() không phải là trừu tượng nhưng nó chỉ trã về null vì vậy ta cần tạo ra lớp Action của riêng mình và override phương thức này. Quả trình gọi hàm execute()được mô tả như hình sau:
Hình 7.5: Quá trình gọi hàm execute()
Như đã nói ở trên, có nhiều cách tổ chức các lớp Action. Ví dụ như ứng dụng banking, chúng ta tạo một Action duy nhất cho mỗi action của user. Do đó, chúng ta cần tạo ra các actions sau:
Login