Trong bài viết dưới đây chúng ta sẽ cùng nhau so sánh những đặc tính quan trọng của Struts 2 so với Struts 1:
1. Phụ thuộc vào Servlet API
Các Action trong Struts 1 bị phụ thuộc vào servlet API bởi vì các đối tượng HttpServletRequest và HttpServletResponse được truyền vào phương thức execute của Action khi Action được thực thi. Trong trường hợp của Struts 2, Action chỉ là một class bình thường và chúng ta không cần truyền đối tượng HttpServletRequest và HttpServletResponse cho phương thức execute.
Do Struts 2 không phụ thuộc vào API của servlet nên chúng ta có thể dễ dàng test các Action mà không cần chạy chúng trong web container. Mặc dù vậy các Action của Struts 2 vẫn có cách để truy cập đến các đối tượng request và response khi cần.
2. Các lớp Action
Tư tưởng lập trình dựa trên việc extends từ class có sẵn chứ không phải dựa vào việc sử dụng interface chính là nhược điểm của Struts 1.
Action của Struts 1 được quy định phải extends một lớp abstract của Struts 1, trong khi đó trong Struts 2 Action của bạn có thể là bất kỳ một lớp Java nào.
Struts 2 cũng cung cấp một interface chung cho các Action là interface ActionSupport, tuy vậy việc implement interface này không bắt buộc.
3. Validate dữ liệu
Struts1 and Struts 2 both supports the manual validation via a validate method.
Cả Struts 1 và 2 đều hỗ trợ validate dữ liệu thông qua phương thức validate.
Struts 1 sử dụng phương thức validate dữ liệu trong class ActionForm, hoặc validate dựa vào thành phần mở rộng Common Validator. Struts 2 hỗ trợ validate bằng phương thức validate và sử dụng XWork Validation. XWORK Validation hỗ trợ việc validate dữ liệu bằng việc kết hợp một chuỗi các bộ validate và validate dữ liệu dựa vào kiểu của thuộc tính và ngữ cảnh.