Giới thiệu về Apache Struts 1

Mặc dù Apache Struts version 1.x đã không còn được hỗ trợ từ rất lâu rồi nhưng mình vẫn quyết định sẽ viết một bài về Struts 1. Đó là bởi vì, có thể một số bạn, khi làm việc với những khách hàng mà hệ thống của họ đã có từ rất lâu rồi và họ đang sử dụng Struts 1, sẽ có nhu cầu tìm hiểu xem Struts 1 là gì, cách hoạt động của nó ra sao để hiểu về hệ thống khách hàng. Trong bài viết này, mình sẽ giới thiệu với các bạn một số điểm cơ bản của Struts 1 và làm một ví dụ nhỏ để xem cách hoạt động của Struts 1 là như thế nào các bạn nhé!

Điều đầu tiên các bạn cần biết về Apache Struts là … nó là một open-source framework sử dụng Java Servlet API giúp các bạn hiện thực các ứng dụng Java web theo mô hình MVC (Model-View-Controller). Nó cung cấp cho chúng ta tất cả các thành phần cần thiết để xây dựng một web application bao gồm các web form components, validator, đa ngôn ngữ, error handling.

Version cuối cùng nhất của Apache Struts 1 là 1.3.10 và các bạn có thể sử dụng Java 8 để chạy các ứng dụng Apache Struts 1.

Để làm ví dụ, mình sẽ tạo mới một Jakarta EE sử dụng Maven trong Eclipse như sau:

Nội dung của tập tin pom.xml của mình như sau:

Ngoài Apache Struts 1 dependencies, mình còn khai báo sử dụng Java Servlet API để làm việc với Java Servlet.

Mình cũng sử dụng Jetty server plugin phiên bản 9.x để chạy ứng dụng Java web sử dụng Java version 8!

Tương tự như các Java web framework khác như DispatcherServlet của Spring MVC, Apache Struts 1 cũng định nghĩa một class Java Servlet tên là ActionServlet extends từ class HttpServlet của Java EE để làm front controller handle tất cả các request tới ứng dụng.

Chúng ta cần khai báo ActionServlet này trong tập tin web.xml của project để đăng ký nó với Server runtime.

Ví dụ, mình khai báo như sau:

Ở đây, mình đang cấu hình để tất cả các request URL kết thúc với extension là .do sẽ được handle bởi ActionServlet của Apache Struts 1. Đây là extension được suggest bởi Apache Struts 1 các bạn nhé!

Để class ActionServlet handle request từ người dùng, chúng ta cần định nghĩa cho class ActionServlet này biết controller nào sẽ handle request nào để khi nhận được request của người dùng, nó sẽ forward request cho controller đó cho đúng.

Các bạn có thể định nghĩa các thông tin này trong tập tin struts-config.xml ở thư mục src/main/webapp/WEB-INF:

sau đó thì cấu hình để ActionServlet sử dụng tập tin này như sau trong tập tin web.xml:

Trước khi mình nói về nội dung của tập tin struts-config.xml, mình cần nói một số điều với các bạn trước:

Thứ nhất là, trong Apache Struts 1 thì các bạn định nghĩa controller bằng cách tạo mới một class extend class Action của nó.

Ví dụ mình định nghĩa một class HelloWorldAction như sau:

Các bạn cần hiện thực phương thức execute() của class Action để thêm code xử lý business logic trước khi forward request tới trang hiển thị kết quả. Trong tập tin struts-config.xml, chúng ta sẽ định nghĩa request nào do controller HelloWorldAction này đảm nhận.

Thứ hai là, trong Apache Struts 1 thì class ActionForm đóng vai trò là Model trong mô hình MVC. Nó là một JavaBean class được đi kèm với một Action chứa thông tin dùng để hiển thị ở View đó các bạn!

Trong phương thức execute() trên, các bạn có thể định nghĩa một class HelloWorldForm để định nghĩa một message “Hello World from Huong Dan Java” như sau:

Dùng class HelloWorldForm này để set message “Hello World from Huong Dan Java” trong class HelloWorldAction như sau:

Sau khi đã set data vào Model xong, các bạn cần select View để trả kết quả về cho user. Chúng ta sẽ định nghĩa View này trong tập tin struts-config.xml các bạn nhé!

Nội dung của tập tin struts-config.xml, mình định nghĩa như sau:

Các thông tin cấu hình của Apache Struts 1 được nằm trong thẻ <struts-config>. Các bạn sử dụng thẻ <action-mapping> để mapping request và controller handle request đó. Như các bạn thấy ở trên, mình đang định nghĩa một action với path là “/helloworld” được handle bởi controller có type là HelloWorldAction. Thuộc tính name là tên của ActionForm được định nghĩa với request này. Bên trong thẻ <action>, mình còn định nghĩa thêm thẻ <forward> với tên là “success” để chỉ định sau khi xử lý thành công thì View “/helloworld.jsp” sẽ được trả về.

Các ActionForm các bạn định nghĩa trong thẻ <form-beans> như mình làm ở trên các bạn nhé!

Tập tin View helloworld.jsp có nội dung như sau:

Mình đang sử dụng taglib <bean> của Apache Struts 1 để hiển thị nội dung của property message của Model HelloWorldForm. Tuỳ nhu cầu và nội dung website mà các bạn có thể sử dụng các taglib khác Apache Struts 1. Chi tiết các taglib mà Apache Struts 1 hỗ trợ, các bạn có thể tìm thấy ở đây.

Giờ thì các bạn có thể sử dụng class ActionMapping để chọn View sẽ trả về cho user như sau:

Đến đây thì các bạn có thể chạy ứng dụng với Maven Jetty plugin và đi đến địa chỉ http://localhost:8080/helloworld.do, các bạn sẽ thấy kết quả như sau:

Tất cả các request kết thúc với extension là .do sẽ được Apache Struts 1 handle và trả về kết quả như các bạn thấy!

Add Comment