Struts 2 là gì

 - 

Đối với các bạn lập trình viên java web. Chắc hẳn đã từng nghe khá nhiều về Apache Struts. vậy Apache Struts là gì, sự khác nhau giữa Struts 1 và Struts 2 là như thế nào? Ứng dụng Struts 2 vào dự án thực tế. Các bạn hãy cùng mình tìm hiểu ngay trong bài viết này.

Bạn đang xem: Struts 2 là gì

Apache Struts là gì?

Apache Struts là một framwork mã nguồn mở cho việc phát triển các ứng dụng web bằng J2EE. Nó sử dụng và mở rộng Java Servlet API để giúp cho các lập trình viên áp dụng kiến trúc MVC (Model-view-controller).

Các thành phần của Struts Framework

Basic: hỗ trợ các thành phần cơ bản để xây dựng ứng dụng web trên nền tảng MVC2Tag Libraries: hỗ trợ một số tag library để xây dựng ứng dụng nhưng Struts có khả năng không cần dùng tag library này mà dùng trực tiếp luôn HTML controlTiles Plugins: hỗ trợ việc xây dựng ứng dụng theo dạng Master Page để áp dụng trên toàn trang webValidator Plugins: hỗ trợ validation trên phía server thông qua việc cấu hình thông tin các form và control nhập liệu trên xml.

Cơ chế hoạt động của Struts Framework.

*

Khi user gửi yêu cầu truy xuất ứng dụng web, request được chuyển đến ActionServlet, đây là Servlet được tạo sẵn trong Framework để làm chức năng như ControllerAction Server trích xuất thành phần request nhận được để so sánh với nội dung được mapping trong tập tin cấu hình struts-config.xml để tìm ra các thành phần tương ứng cấn xử lýNếu không tìm thấy sẽ báo lỗi 404 hay lỗi tương ứng. Ngược lại, nếu tìm thấy sẽ xác định action và View tương ứng của phần xử lý. View ở đây bao gồm form đón giá trị nhập và kết xuất để trả về người dùngGiá trị tương ứng của form nhập được lưu trữ vào Form Bean, thực tế là một Java Object (Action Form) có chứa các thuộc tính – state và các phương thức truy cập get, set. Tại đây, nếu có áp dụng validation thì dữ liệu được checking, checking thành công thì mới được lưu trữ vào form bean và kích hoạt chuyển dữ liệu của FormBean đến Action tương ứng để xử lýAction khi đón nhận FormBean sẽ gọi thành phần xử lý tương ứng tư Java Bean hay Java Object tương ứng hay kết nối lấy dữ liệu từ DB về nếu có để xử lýSau khi xử lý hoàn tất, Action sẽ phải trả kết quả trở về Action Servlet đồng thời mapping trong struts-config.xml để xác định view kết xuất cho người dùng dựa trên kết quả xử lý trên struts-config.Khi xác định xong, dữ liệu từ kết quả xử lý Action và Form Bean sẽ được đổ vào trang JSP kêt xuất tương ứng và kết quả thành công chuyển về Action ServletAction Servlet response kết quả về client – hoàn tất quá trình xử lý.Tổng quan về Struts 2 Framework.

Struts2 là framework được sử dụng để tạo ứng dụng web dựa trên mẫu thiết kế MVC. Struts2 không chỉ là phiên bản tiếp theo của Struts1, mà nó là bản nâng cấp hoàn chỉnh của kiến trúc Struts, đơn giản hóa hơn mô hình Struts 1 Framework như là rút gọn tập tin cấu hình hay sử dụng annotation thay thế cho tập tin cấu hình.

Xem thêm: Những Điều Về Ý Nghĩa Tên Tú Là Gì & Gợi Ý Bộ Tên Đệm Hay Cho Con Yêu

Một số đặc tính cải tiến của Strut2 FrameworkJavaBeans được sử dụng thay thế Action form và có phương thức chỉ định để kích hoạt thực thi (mặc định là phương thức execute không có tham số truyền và kiểu trả về là kiểu String) nhằm tăng khả năng tái sử dụng của các object trong các ứng dụng và các framework khác. Đặc biệt, chúng dễ dàng thuật tiện cho testing từng thành phần chức năng và thành phầnSử dụng cả annotation và tập tin cấu hình XML rút gọnSử dụng ngôn ngữ mới Object Graphic Notation Language (OGNL) thay thế cho EL của JSPSử dụng bộ taglib duy nhất thay cho 4-5 bộ taglib trong Struts 1 Framework và JSTL 1.1 trong JSP.Các POJO form và POJO action: Struts2 đã loại bỏ các Form Action mà là một phần không thể tách rời của Struts framework. Với Struts2, bạn có thể sử dụng bất kỳ POJO nào để nhận dữ liệu từ form. Tương tự như vậy, với Struts2 bạn có thể xem bất kỳ POJO nào làm lớp Action.Hỗ trợ thẻ: Struts2 đã cải tiến các thẻ form và các thẻ mới nhằm giúp các nhà phát triển viết mã ít hơn.Hỗ trợ AJAX: Struts2 đã công nhận sự tiếp quản của các công nghệ Web2.0 và đã tích hợp hỗ trợ AJAX vào sản phẩm bằng cách tạo các thẻ AJAX có chức năng rất giống với các thẻ Struts2 tiêu chuẩn.Tích hợp dễ dàng: Việc tích hợp Struts2 với các framework khác như Spring, Tiles và SiteMesh giờ đây đã trở nên dễ dàng hơn.Hỗ trợ Template: Hỗ trợ tạo ra các view bằng việc sử dụng các tamplate.Hỗ trợ Plugin: Các hành vi của core Struts2 có thể được cải tiến bằng cách sử dụng các plugin. Hiện nay có khá nhiều plugin có sẵn cho Struts2.Profiling: Struts2 cung cấp tích hợp profiling để gỡ lỗi ứng dụng. Ngoài ra, Struts cũng cung cấp gỡ lỗi được tích hợp với sự trợ giúp của công cụ gỡ lỗi được xây dựng bên trong.Dễ dàng sửa đổi các thẻ Tag markups trong Struts2 có thể được tinh chỉnh bằng cách sử dụng các mẫu Freemarker. Điều này không yêu cầu kiến ​​thức JSP hoặc java. Bạn có kiến thức cơ bản về HTML, XML và CSS đủ để sửa đổi các thẻ.Cấu hình ít hơn: Struts2 giúp bạn cấu hình ít hơn với sự trợ giúp của việc sử dụng các giá trị mặc định cho các cài đặt khác nhau. Bạn không cần phải cấu hình một cái gì đó trừ khi bạn muốn thiết lập khác các thiết lập mặc định được thiết lập bởi Struts2.Các công nghệ View: Struts2 có một sự hỗ trợ tuyệt vời cho nhiều lựa chọn view (JSP, Freemarker, Velocity và XSLT)

Các bạn hãy xem hình dưới đây để hiểu rõ hơn về sự khác biệt giữa Struts 1 va Struts 2.

*

Cơ chế hoạt động của Struts 2 Framework.

Cơ chế hoạt động tương tự như mô hình MVC của Struts1 Framework nhưng điểm khác biệt nó là pull-framework nghĩa là dữ liệu được lấy trực tiếp từ action để đưa đến view.

Controller: FilterDispatcher là servlet Filter có nhiệm vụ đón nhận request và dựa trên cấu hình (có thể là xml hay annotation) để xác định action cụ thể để đón nhận request cho xử lýModel: Action là một java class đảm bảo đặc tính của một object trong mô hình hướng đối tượng và thỏa tính chất của JavaBeanView: Result là một kết xuất hay một dạng xác định action hay trang chuyển về và trình bày trên Web Browser.
*

Dựa trên digram ở trên, có thể giải thích vòng đời của một request của người dùng trong Struts2 như sau:

Người dùng gửi request tới máy chủ để yêu cầu một số tài nguyên (ví dụ các trang).FilterDispatcher xem xét yêu cầu và sau đó xác định action thích hợp.Chức năng interceptor đã cấu hình được áp dụng như xác nhận hợp lệ, upload file, vvAction đã chọn được thực thi để thực hiện thao tác được yêu cầu.Một lần nữa, interceptor đã cấu hình được áp dụng để thực hiện bất kỳ post-processing nếu cần thiết.Cuối cùng kết quả được chuẩn bị bởi view và trả kết quả cho người dùng.Ứng dụng hello world với Struts 2.

Xem thêm: Trải Nghiệm Imax Cgv Là Gì Cgv Việt Nam, Xem Phim Bằng Công Nghệ Imax Ở Đâu

Sau đây mình sẽ hướng dẫn các bạn tạo ứng dụng hello world với Struts 2 trên IDE Intellij.

Tạo project maven với cấu trúc như sau:
*
nội dung file pom.xml 4.0.0 com.sun.struts.example struts-example war 0.0.1-SNAPSHOT Simple Struts CRUD Simple in-memory CRUD Struts 2 example application UTF-8 2.3.16.1 org.apache.struts struts2-core ${struts2.version} log4j log4j 1.2.17 javax.servlet servlet-api 2.4 provided javax.servlet jsp-api 2.0 provided struts-crud maven-compiler-plugin 3.1 1.6 1.6 org.mortbay.jetty jetty-maven-plugin 8.1.7.v20120910 CTRL+C 8999 10 src/main/webapp/WEB-INF/web.xml Nội dung file web.xml Struts Simple CRUD struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* Tạo file Employee.javapackage com.sun.struts.example.model;import java.io.Serializable;public class Employee implements Serializable { private Integer employeeId;private Integer age;private String firstName;private String lastName;public Employee() {}public Employee(Integer employeeId, String firstName, String lastName, Integer age) {this.employeeId = employeeId;this.firstName = firstName;this.lastName = lastName;this.age = age;}public Integer getEmployeeId() {return employeeId;}public void setEmployeeId(Integer employeeId) {this.employeeId = employeeId;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}}Tạo file EmployeeDao.javapackage com.sun.struts.example.dao;import com.sun.struts.example.model.Employee;import java.util.List;public interface EmployeeDao { public List getAllEmployees(); public Employee getEmployee(Integer id); public void update(Employee emp); public void insert(Employee emp); public void delete(Integer id);}Tạo file InMemoryEmployeeDao.javapackage com.sun.struts.example.dao;import com.sun.struts.example.model.Employee;import java.util.ArrayList;import java.util.List;public class InMemoryEmployeeDao implements EmployeeDao { private static ArrayList employees; static { employees = new ArrayList(); employees.add(new Employee(1, "Quang", "Hòa", 26)); employees.add(new Employee(2, "Quang", "Thuận", 18)); }