Nhƣ chúng ta biết, java là một trong số những ngôn ngữ lập trình phổ biến nhất hiện nay. Với một số ƣu điểm nhƣ: Java rất dễ học, nó là một trong những ngôn ngữ mà những ngƣời mới bắt đầu học lập trình hầu hết sẽ học qua và dễ dàng nắm đƣợc, do nó đƣợc thiết kế dễ sử dụng, trình viên dịch và gỡ lỗi dễ dàng hơn các ngôn ngữ khác. Java là một ngôn ngữ hƣớng đối tƣợng an toàn và mạnh mẽ. Bên cạnh đó, Java là nền tảng độc lập, điều này cho phép một chƣơng trình đƣợc tạo từ một máy tính này (ví dụ chạy trên nền tảng windows) có thể dễ dàng chạy trên những hệ thống máy tính nền tảng khác (ví dụ nhƣ Linux, Mac OS,…). Khả năng chạy các chƣơng trình giống nhau trên nhiều hệ thống khác nhau là rất rất quan trọng trong các ứng dụng web[1][19]. Nó còn cung cấp một hệ thống thƣ viện đồ sộ để làm việc với nhiều đối tƣợng khác nhau, trong đó có các giao thức HTTP, nó cung cấp API để tƣơng tác với Internet nhằm mục đích request và nhận response.
Hệ thống đƣợc xây dựng dựa trên Framework Struts 2 là một framework mở dùng cho việc tạo các ứng dụng web bằng java.
Apache Struts2 đƣợc phát triển từ WebWork 2. Sau khi làm việc độc lập trong một vài năm, cộng đồng webWork và Struts liên kết với nhau để tạo thành Struts 2.
Hình 2.2: Kiến trúc của Struts2
Struts 2 là framework theo mô hình MVC với các tầng Model, Controller, View đƣợc phân rõ ràng. Nhƣ trong hình 2.2, là cấu trúc của một chƣơng trình đƣợc xây dựng bằng framework Struts2, trong đó:
- Model đƣợc thực hiện với các Actions. Lớp action chứa toàn bộ các logic nghiệp vụ và điều khiển sự tƣơng tác giữa ngƣời dùng, lớp Model và lớp View.
- Controller là lớp gồm bộ lọc Dispatcher Filter sẽ dựa vào yêu cầu đƣợc gửi đến để xác định Action thích hợp. Và bộ Interceptors có chức năng áp dụng nhƣ tiền xử lý xác nhận (validation), file upload, và hậu xử lý nếu cần.
- Phần View trong Struts 2 đƣợc đánh giá cao và nó hỗ trợ nhiều kiểu kết quả khác nhau nhƣ Velocity, FreeMaker, JSP, … là trang hiển thị các thông báo cũng nhƣ kết quả cho ngƣời dùng.
Khi ngƣời dùng muốn yêu cầu đến chƣơng trình thì vòng đời của quá trình yêu cầu đó tƣơng ứng với kiến trúc bên trên nhƣ sau: Trƣớc tiên ngƣời dùng gửi yêu cầu đến cho server để yêu cầu về một vài tài nguyên nhƣ trang kết quả nào đó. Sau đó FilterDispatcher sẽ xem xét yêu cầu và quyết định Action thích hợp. Cấu hình các interceptors sẽ tiền xử lý xác nhận, file upload, … Action đƣợc chọn sẽ đƣợc thực thi để thực hiện yêu cầu. Sau đó các interceptor sẽ hậu xử lý nếu nhƣ cần thiết. Cuối cùng kết quả đƣợc chuẩn bị bằng View và trả lại kết quả cho ngƣời dùng[22].