21 October 2016

So sánh Struts 1 và Struts 2


Struts 1
Struts 2
Sử dụng ActionServlet làm Controller
Sử dụng FilterDispatcher làm Controller
Dùng HTML form kết hợp với ActionFormobject để đón nhận giá trị nhập và xử lý validation nếu cần
Các thuộc tính trong Action class (cụ thể là Java class) để đón nhận giá trị nhập từ form và thực hiện xử lý cùng với validation nếu cần
Action bắt buộc implement Action interface
Action class không cần bắt buộc implement Action interface
Duy nhất một instance của Action đón nhận để xử lý mọi request. Cơ chế để đảm bảo xử lý đồng bộ (thread-safe) đòi hỏi phức tạp hơn
Một request sẽ có một instance đón nhận xử lý
Cung cấp rất nhiều taglib gây khó khăn cho người dung khi tiếp cận và sử dụng
Cung cấp duy nhất một taglib duy nhất đảm bảo đầy đủ các thành phần hỗ trợ xử lý từ đơn giản đến nâng cao, kể cả JSTL
Sử dụng EL và JSTL
Sử OGNL để xử lý
Dùng cơ chế biên dịch của JSP để kết nối các thành phần trong xử lý
Sử dụng ValueStack để cho phép taglib truy vập giá trị trong quá trình xử lý
Chia thành module để chuyển đổi thao tác và đòi hỏi kết hợp của switchAction để tạo sự kết hợp giữa các thành phần khi làm việc theo nhóm
Sử dụng cơ chế interceptor để đảm bảo tích hợp nhiều thành phần và nâng cấp ứng dụng một cách uyển chuyển linh hoạt, đặc biệt là tích hợp mà không làm ảnh hưởng các thành phần có sẵn khi làm việc theo nhóm
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ốngnhư 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.

0 nhận xét:

Post a Comment

 

BACK TO TOP

Xuống cuối trang