Tìm hiểu sự khác nhau giữa Struts và JSF

Nếu nói đến framework của java , chúng ta sẽ nghĩ ngay đến Struts và JSF . Cả 2 framework đều dựa trên công nghệ của java, có những phần support khá giống nhau. Vậy chúng ta nên chọn framework nào ?Hôm nay, chúng ta sẽ cùng so sánh những điểm tổng quan về 2 framework này

Struts là gì ?

Struts Framework là một framework hỗ trợ xây dựng ứng dụng Web áp dụng MVC Pattern dựa trên công nghệ J2EE(Servlet、JSP、JavaBeans)

JSF là gì ?

JSF là JavaServer Faces framework, dùng JSF và model MVC để xây dựng ứng dụng Web

Thành phần của Struts

1. Model

Model là một thành phần được cho là quan trọng nhất trong các ứng dụng MVC. Model bao gồm các business entities và một tập các qui tắc để quản lí việc tổ chức và thao tác dữ liệu. Struts không cung cấp các Model Component chuyên dụng, tuy nhiên chúng ta có thể sử dụng lại các Model của các ứng dụng khác hoặc tự xây dựng các model của riêng mình.

2. View

Mục đích của thanh phần Struts View này cũng giống y như một thành phần view trong các ứng dụng theo mô hình MVC: chịu trách nhiệm trình bày thông tin được cung cấp bởi Model. Struts sử dụng JSP để thiết kế thành phần View. Ngoài ra, để hỗ trợ và mở rộng khả năng của View, chúng ta cũng có thêm thư viện Taglib, sử dụng HTML, JS… cho mục đích trình bày thông tin.

3. Controller

Struts cung cấp hai thành phần rất quan trọng đó là ActionServlet và Action để điều khiển và quản lí mọi yêu cầu của người dùng cũng như việc thao tác với dữ liệu ActionServlet chịu trách nhiệm nhận và xử lí các request từ phía người dùng, chỉ định Action thực thi tương ứng với từng yêu cầu cụ thể. Action chịu trách nhiệm thao tác với Model, nó kết hợp rất chặt chẽ với ActionServlet. Cả hai thành phần này đóng vai trò làm Controller trong Struts. Struts taglib cung cấp một tập các tag library cho việc phát triển ứng dụng, bao gồm cả các taglib hỗ trợ thiết kế HTML và JSP taglib. Struts Config: File cấu hình của ứng dựng Struts.

Thành phần của JSF

1.Managed Bean( Backing Bean)

Bản chất là Java Beans được dùng kết hợp với các thành phần UI interface – các phương thức hàm hỗ trợ trình bày giao diện cho người dùng, trao đổi dữ liệu với các thành phần khác trong ứng dụng, lưu trữ và chuyển xử lý khi người dùng tương tác Backing beans phải được đăng ký với tập tin cấu hình (faces-config.xml) của ứng dụng để ứng dụng có thể cơ chế để lưu trữ và tương tác với bean Tương tác giữa form, UI component với Backing Beans sử dụng EL language với syntax #{EL expression} (dùng dấu # thay cho dấu $) Beans có khả năng hỗ trợ Biến cố - Event Handling, hỗ trợ chuyển trang – Navigation, thực hiện Validation

2.UI Component

Hỗ trợ trình bày giao diện để người dùng tương tác trực tiếp và trình bày kết quả về phía người dùng

3. Renderer

Hỗ trợ tính toán, xử lý kết quả để kết xuất trình bày giá trị trong các thành phần UI để trình bày giao diện chính xác và hợp lý từ kết xuất của chương trình trong lúc thực thi Hỗ trợ cơ chế “Look and Feel”

4.Events và Listeners

Hỗ trợ cơ chế đón nhận biến cố và xử lý biến cố (Event Handling) trên khái niệm của M (Model) trong MVC kết hợp với Managed Bean

5.Navigation

Cung cấp cơ chế chuyển trang, chuyển xử lý trong quá trình ứng dụng thực hiện tượng tự khái niệm C (Controller) trong mô hình MVC Có 02 loại mô hình Static và Dynamic Model Static Model: di chuyển đến duy nhất một trang cụ thể và không thay đổi hay không thể thay đổi từ lúc lập trình hay trong quá trình trang thực thi (trang chuyển đến đã được xác định chính xác) Dynamic Model: cấu hình để chuyển đến trang tương ứng tùy theo kết quả xử lý của ứng dụng

6.Validator

Hỗ trợ cơ chế kiểm tra dữ liệu trên các thành phần UI để đảm bảo dữ liệu được nhập đúng và có ràng buộc theo đúng yêu cầu của ứng dụng

7.Converter

Hỗ trợ cơ chế ép kiểu dữ liệu trong quá trình xử lý

8.Message

Hỗ trợ trình bày các thông tin – message về phía người dùng, thông báo lỗi hay hỗ trợ cơ chế I18N – hỗ trợ ứng dụng đa ngôn ngữ

Flow xử lý của Struts

  1. ActionServlet nhận request từ client

  2. ActionForm có kèm path request ứng với setting trong file config Struts được instance hóa, data request được set trong ActionForm

  3. Trong trường hợp có setting xác thực giá trị nhập vào thì sẽ tiến hành xác thực

  4. Call method execute() của class Action đã đính kèm path request ứng với setting trong file config Struts

  5. Tiến hành di chuyển màn hình ứng với setting trong file config Struts

Flow xử lý của JSF

  1. FacesServlet sẽ nhận request từ client

  2. Set data request trong UI component ứng với màn hình ban đầu

  3. Tiến hành xác thực trong trường hợp có setting xác thực giá trị input

  4. Data được lưu trong UI componet được copy sang BackingBean

  5. Xử lý event (click button chẳng hạn ).Call method gắn kèm với event

  6. Set UI component của màn hình tiếp theo, generate màn hình, tiến hành di chuyển màn hình ứng với setting trong file faces-config.xml

Struts chú trọng vào Controller

Ở web application, việc nhận request từ client , check validate giá trị nhập vào, gọi logic business hay di chuyển màn hình ứng với kết quả xử lý thì bất kì ứng dụng nào cũng giống nhau phần xử lý được tiến hành ở Controller . Với Struts thì có một điểm cần chú ý là framework được phát triển theo mục đích cung cấp Controller để đảm nhận các xử lý chung.Với bất kì ứng dụng nào giả định là sẽ cung cấp framework để hoàn thành các setting xử lý chung mà không cần thiết phải thực thi. Người phát triển thực thi các xử lý vốn có của logic business và màn hình, framwork cung cấp các component tiến hành xử lý chung , di chuyển màn hình hay liên kết giữa các component này sẽ được định nghĩa trong file config . Có thể coi Struts một framework cung cấp các thành phần trụ cột , bộ khung của ứng dụng

JSF chú trọng vào UI(View)

Gần đây kéo theo việc mở rộng phát triển ứng dụng web dựa vào Java, làm sao để giảm thời gian , công sức maintain , test , thực thi UI dựa vào JSP đang là vấn đề khá đau đầu. Để giải quyết vấn đề này , JSF được phát triển với mục tiêu EoD của phát triển UI Trong JSF, người ta bắt đầu đưa vào các khái niệm UI component, áp dụng các kiến trúc có khả năng tái sử dụng, mở rộng các thành phần cấu trúc màn hình như "Button" "Text box" "Table" "Tree" chẳng hạn。Vòng tiến trình xử lý của JSF là lưu các giá trị nhập vào bởi đơn vị UI component 、tiến hành check giá trị nhập vào , handling event và tiến hành mô tả lại。Thông qua chuẩn của JSF, UI component có khả năng tự động tạo dựa vào các UI component khác đã được sinh ra 。 Hơn nữa , đặc trưng rất lớn của JSF là có thể sử dụng các tool phát triển như IDE. Vì có thể cung cấp API dùng chung cho các UI component của JSF như JavaBeans trong Swing, nên có khả năng phát triển UI dựa vào drug && drop ngay trên IDE

Không sử dụng Servlet API trong phát triển ứng dụng JSF

Một đặc trưng lớn của JSF là code của ứng dụng JSF theo nguyên tắc là không sử dụng Servlet API(interface hoặc clas bao gồm packet javax.servlet/javax.servlet.http)。 Nếu không sử dụng Servlet API, thì mặc dù không hiểu cách xử lý của 、Servlet API thì vẫn coding được. Hơn nữa, class mà sử dụng Servlet API sẽ không hoạt động khi deployment container Servlet mà không gọi class từ container nhưng nếu không sử dụng Servlet API vẫn có thể hoạt động trên JVM trên local. Với JSF , có khả năng sử dụng các tool test tự động như JUnit .Điều này góp phần làm tăng hiệu quả phát triển , được coi như ưu điểm rất lớn của JSF Ngược lại ,vì ở Struts sử dung Servlet API bởi class Action nên việc test class Action là không tránh khỏi nhưng việc test này lại khá mất thời gian

Khi tạo ứng dụng

Giả sử tạo một ứng dụng có 2 màn hình 1- màn hình nhập thông tin input 2- màn hình hiển thị kết quả vừa nhập chúng ta sẽ xem sự khác nhau về môi trường và component giữa 2 framwork

1. Set up môi trường thực thi ứng dụng Struts、JSF

Struts JSF
JVM >= 1.2 >=1.3.1_04
container Servlet >= Servlet2.2/JSP1.1 >=Servlet2.3/JSP1.2
library thực thi được cung cấp từ các project Apache Struts được cung cấp từ vendor của tool phát triển

2.Tạo component

Tạo component Struts JSF
Deployment descriptor web.xml web.xml
component lưu giá trị nhập WelcomeForm.java (ActionForm) WelcomeBean.java(BackingBean)
component thực thi logic bussiness WelcomeAction.java(Action) WelcomeBean.java(BackingBean)
screen index.jsp(input),welcome.jsp(hiển thị ) index.jsp(input),welcome.jsp(hiển thị )
file setting struts-config.xml faces-config.xml
file resouce message setting name resouce message trong struts-config.xml setting name resouce message trong faces-config.xml

Source tham khảo

http://lynh510.blogspot.com/2016/11/struts-jsf.html http://www.itmedia.co.jp/enterprise/articles/0501/19/news010.html


All Rights Reserved