My Opera is closing 3rd of March

Đường dưới chân ta đi

So sánh Struts 1 và Struts 2

Struts2 là một framework rất mạnh mẽ. Trong bảng dưới đây chúng ta sẽ mô tả những sự khác biệt giữa cơ bản giữa Struts1 và Struts2

Tính năng

Struts 1

Struts 2

Action classes

Nhược điểm của Struts 1 chính là sử dụng lớp abstract chứ không phải interface. Action yêu cầu phải kế thừa từ một lớp abstract nào đó.

Trong Struts 2 Action 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 thực thi interface này không bắt buộc. Một vài đối tượng POJO có thể được sử dụng như là một đối tượng Action trong Struts 2.

Threading Model

Các Action là singleton vì thế chúng phải được thread-safe bởi vì chỉ có một thể hiện của lớp để giữ lại tất cả request đối với Action đó.Trong vấn đề phát triển ứng dụng, đảm bảo tài nguyên Action được thread safe hoặc đồng bộ.

Trong Struts 2 các đối tượng được khởi tạo cho mỗi request ,do đó không có thread-safety.Một servlet container sinh ra nhiều đối tượng throw-away cho mỗi request.

Servlet Dependency

Actions bị phụ thuộc vào thư viện servlet API bởi vì HttpServletRequest và HttpServletResponse được truyền vào phương thức execute khi Action được thực thi.

Action chỉ là một lớp 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. Struts 2 không phụ thuộc vào API của servlet bởi chúng tạo các POJO đơn giả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ó thể truy cập đến các đối tượng request và response nếu cần.Các servlet context thường được biểu diễn bởi đối tượng Map đơn giản.

Testability

Ứng dụng Struts1 có một vấn đề chính trong việc testing bởi vì phương thức execute phụ thuộc vào Servlet API. Struts TestCase cung cấp một tập hợp các đối tượng Mock cho Struts 1.

Các Action có thể test các khởi tạo Action.Các Action là một POJO đơn giản và không phụ thuộc framework,vì thế việc test trở lên đơn giản hơn

Harvesting Input

Struts1 sử dụng một đối tượng ActionForm để giữ các input.Giống như các Action, tất cả các ActionForms cần được thừa kế lớp ActionForm cơ bản . Các JavaBean không thể sử dụng như ActionForms, trong khi các nhà phát triển tạo các lớp không cần thiết để giữ input. Các DynaBean là cách thức tốt nhất để tạo ActionForm chuyển đổi.

Struts2 sử dụng các thuộc tính Action để giới hạn sự cần thiết cho các đôi tượng input thứ 2. Từ đó giảm sự dư thừa. Thêm vào đó, các thuộc tính Action có thể truy cập từ các trang web thông qua các thẻ taglib. Struts2 cũng hỗ trợ các ActionForm tốt hơn là các đối tượng POJO và các Action POJO. Nhiều kiểu đối tượng bao gồm các nghiệp vụ hoặc các đối tượng domain có thể sử dụng như là một đối tượng input/output.

Expression Language

Struts 1 tương tác với JSTL, do đó sử dụng JSTL-EL.EL Struts1 có một đối tượng đồ họa cơ bản, nhưng có quan hệ tập hợp và hỗ trợ chỉ mục thuộc tính yếu.

Struts 2 có thể sử dụng JSTL,nhưng framework cũng hỗ trợ nhiều chức năng mạnh mẽ và ngôn ngữ biểu thức linh hoạt gọi là “Object Graph Notation Language) (OGNL).

Binding values into views

Struts 1 ràng buộc đối tượng bên trong ngữ cảnh của trang bằng cách sử dụng cơ chế JSP chuẩn.

Struts 2 sử dụng công nghệ ValueStack để đảm bảo việc truy cập giá trị bằng taglib không thông qua coupling hoặc rendering. The ValueStack strategy cho phép sử dụng lại các view thông qua một lượng lớn các kiểu mà nó có thể có các tên thuộc tính giống nhau nhưng khác kiểu thuộc tính

Type Conversion

Trong Struts 1 các thuộc tính của ActionForm hầu hết định dạng là String.Việc chuyển đổi dựa trên từng lớp, không được cấu hình dựa trên thể hiện của lớp.

Struts 2 sử dụng OGNL đối với việc chuyển kiểu dữ liệu.

Validation

Struts 1 sử dụng phương thức validate dữ liệu trong lớp ActionForm,hoặc sử dụng thành phần mở rộng của Commons Validator.Các lớp có thể có các ngữ cảnh validate khác nhau cho các lớp tương tự nhau,trong khi đó việc móc nối validate trên các đối tượng con là không được phép.

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.

Control Of Action Execution

Mỗi module trong Struts 1 có sự tách rời Request Processors (vòng đời),trong khi tất cả các Action trong module cần phải chia sẻ cùng vòng đời.

Trong Struts 2 các vòng đời khác nhau được tạo ra dựa trên nền tảng Action thông qua Interceptor Stacks. Các stack tùy biến được tạo ra và sử dụng với Action khác nhau.

Theo Roseindia

CounterEyes on me

Write a comment

New comments have been disabled for this post.