Struts vs Struts2
Struts (còn được gọi là Apache Struts hoặc Struts 1) là một khung công tác mã nguồn mở đa nền tảng được viết bằng Java, nhằm phát triển các ứng dụng web Java EE. Nó là một trong những khung ứng dụng web Java EE ban đầu. Nhưng vài năm sau, Struts2 (hoặc Struts phiên bản 2) đã xuất hiện và đó là một khung ứng dụng web hoàn toàn khác biệt và được cải tiến cao. Nó đã giải quyết một số vấn đề được coi là thiếu sót trong phiên bản ban đầu. Bây giờ, Struts2 đang được sử dụng rất nhiều để phát triển các ứng dụng Java EE trên thế giới.
Struts là gì?
Khung Struts (Struts 1) là một trong những khung ứng dụng web ban đầu để phát triển các ứng dụng web Java EE. Khung Struts khuyến khích sử dụng kiến trúc MVC (Model-View-Controller). Nó là một phần mở rộng của API Java Servlet. Craig McClanahan là người sáng tạo ban đầu của Struts. Ban đầu, nó được gọi là Jakaratha Struts và được duy trì trong Dự án Jakarta của Quỹ phần mềm Apache. Nó được phát hành theo Giấy phép Apache 2.0. Khung Struts được gọi là khung dựa trên yêu cầu và nó được tạo thành từ ba thành phần chính: trình xử lý yêu cầu, trình xử lý phản hồi và thư viện thẻ. URI tiêu chuẩn (Mã định danh tài nguyên đồng nhất) được ánh xạ tới trình xử lý yêu cầu. Xử lý đáp ứng có trách nhiệm chuyển giao quyền kiểm soát. Để tạo các ứng dụng tương tác với các biểu mẫu, các tính năng được cung cấp bởi thư viện thẻ có thể được sử dụng. Struts hỗ trợ các ứng dụng REST và các công nghệ khác nhau như SOAP, AJAX, v.v..
Struts2 là gì?
Khung công tác Struts được coi là có một số hạn chế nhất định (chủ yếu là thiếu sự tách biệt giữa lớp trình bày, lớp xử lý yêu cầu và mô hình) bởi các nhà phát triển Java EE tại thời điểm đó và do đó vài năm sau Struts2 xuất hiện. Thật ra, Struts2 hoàn toàn khác với Struts. Trên thực tế, họ thậm chí không chia sẻ cùng một cơ sở mã vì Struts2 đơn giản là kết quả của việc đổi tên khung WebWork 2.2 (tức là các cộng đồng WebWork và Struts đã làm việc riêng trong một thời gian cuối cùng đã hợp tác để đưa ra Struts2). Bản phát hành ổn định hiện tại của nó là phiên bản 2.2.3, được phát hành vào tháng 5 năm 2011.
Sự khác biệt giữa Struts và Struts2 là gì?
Một trong nhiều vấn đề của khung Struts là nhu cầu lập trình cho các lớp trừu tượng thay vì giao diện. Điều này đã được giải quyết bằng khung Struts2. Ví dụ, khung Struts yêu cầu các lớp Hành động được mở rộng từ các lớp cơ sở trừu tượng, nhưng Hành động Struts2 có thể thực hiện giao diện Hành động. Do sự khác biệt trong mô hình luồng giữa hai phiên bản, các vấn đề an toàn luồng xảy ra trong khung Struts liên quan đến các đối tượng Hành động không xảy ra trong khung Struts2. Lý do là các đối tượng Hành động Struts2 được khởi tạo cho mỗi yêu cầu, trong khi khung Hành động trong Struts chỉ có một phiên bản để xử lý tất cả các yêu cầu cho Hành động đó. Không giống như khung Hành động trong Struts, Hành động Struts2 không phụ thuộc vào API của Servlet.
Khả năng kiểm tra của khung Struts2 tương đối cao hơn khung Struts. Bạn có thể kiểm tra các hành động Struts2 chỉ cần làm theo ba bước: khởi tạo, thiết lập các thuộc tính và gọi các phương thức. Thu hoạch đầu vào dễ dàng hơn trong khung Struts2 vì các thuộc tính Hành động được sử dụng làm thuộc tính đầu vào mà không phải giữ đối tượng đầu vào thứ hai. Ngoài việc hỗ trợ tích hợp JSTL (có trong Struts), khung Struts2 có thể sử dụng OGNL mạnh mẽ và biểu cảm hơn (Ngôn ngữ ký hiệu đồ thị đối tượng). Để chuyển đổi loại, Strut và Strut2 sử dụng Commons-Beanutils và OGNL tương ứng. Do những cải tiến này, khung công tác Struts2 được coi là khung công tác rất thành công và nó rất phổ biến trong các lập trình viên Java EE. Mặt khác, khung Struts hiện bị coi là lỗi thời.