– Chúng tôi hướng tới việc cung cấp các tutorial và lý thuyết liên quan đến công nghệ Java, đặc biệt là J2EE/JavaEE- Chúng tôi không chủ trương cung cấp source code, video trên web site này bởi vì chúng tôi mong muốn các bạn làm từng bước một để cảm nhận được kiến thức, hiểu biết và kết quả. Cách tiếp cận của chúng tôi là làm từng bước bằng hướng dẫn- Hướng tiếp cận của chúng tôi theo hướng thể hiện các lý thuyết thông qua ví dụ để giúp tiết kiệm thời gian

Đang xem: Kieu trong khanh: tổng quan về struts 2 là gì, struts2 là gì

*

Tổng quan về Struts 2 Framework – một Framework hỗ trợ xây dựng ứng dụng Web áp dụng MVC Pattern nâng cao từ Struts 1.x Framework, xây dựng ứng dụng đầu tiên áp dụng Struts 2 Framework

Xem thêm:

Tổng quan vềStruts 2 Framework – một Framework hỗ trợ xây dựng ứngdụng Web áp dụng MVC Pattern nâng cao từ Struts 1.x Framework,xây dựng ứng dụng đầu tiên áp dụng Struts 2 Framework

Mục đích: Chủđề của bài này đề cập đến khái niệmtổng quát của Struts 2.x Framework. Chúng tôi sẽ tiếp cậntổng quát khái niệm từng thành phần của Struts dựatrên tổng quát mô hình MVC Pattern và nền tảng căn bảncủa Struts1 Framework để chúng ta tiếp cậnFramework này một cách nhanh chóng dự trên kiến thứccơ bản mà chúng ta đã có về Struts 1. Dựa trên kháiniệm này, chúng ta sẽ áp dụng Struts 2 Framework này trong phầnphân tích và thiết kế ứng dụng web cụ thểđể thấy rõ cách thức thiết kế, cách càiđặt ứng dụng cụ thể sử dụngStruts 2 trong việc xây dựng ứng dụng Web

Tổng quan về Struts 2 Framework

Đây là Framework hỗ trợ thiết kế và xây dựng ứng dụng web theo mô hình MVC 2 thông qua việc cung cấp hàng loạt các thư viện và tiện ích để hỗ trợ người dùng phát triên ứng dụng Web theo mô hình MVC một cách nhanh chóng và dễ dàng Struts 2 Framework hỗ trợ việc xây dựng ứng dụng Web theo mô hình MVC2 nhưng đơ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 Một số đặc tính cải tiến của Strut2 Framework JavaBeans đượ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ần Sử dụng cả annotation và tập tin cấu hình XML rút gọn Sử dụng ngôn ngữ mới Object Graphic Notation Language (OGNL) thay thế cho EL của JSP Sử dụng bộ taglib duy nhất thay cho 4-5 bộ taglib trong Struts 1 Framework và JSTL 1.1 trong JSP Để nhanh chóng tiếp cận Struts2 chúng ta sẽ so sánh điểm khác biệt trên Struts1

Xem thêm: Khác Biệt Giữa Stroke Là Bệnh Gì, Hiểu Stroke

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 ActionForm object để đó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

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 JavaBean View: 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 Cơ chế hoạt động của Struts 2 Framework

*

Khi user gửi yêu cầu truy xuất ứng dụng web, request được chuyển đến FilterDispatcher, đây là Filter được tạo sẵn trong Framework để làm chức năng như Controller FilterDispatcher dựa trên tập tin cấu hình xác định xem action có được ứng dụng Interceptor hay không Nếu có, framework sẽ gọi Interceptor theo tuần tự. Khi gọi xong một Interceptor, framework sẽ checking tiếp Interceptor trong stack cho đến khi Interceptor cuối cùng Nếu không có áp dụng interceptor hay interceptor cuối cùng được thực thi thì framework sẽ gọi action Action đón nhận dữ liệu, thực hiện xử lý và kích hoạt phương thức chỉ định thực thi (mặc định là phương thức execute – người dùng có thể định nghĩa phương thức tên khác và chỉ định trong tập tin cấu hình) Sau khi hàm execute xử lý hoàn tất, phương thức sẽ trả ra Result – có thể nhãn tương tự như ActionMapping bên Struts1. Tại bước này, nếu ứng dụng có áp dụng interceptor là Result sẽ được apply theo chiều ngược chiều gọi ban đầu để trả kết quả trở về hay chuyển đến action tiếp theo Nhìn tổng quan mô hình hoạt động giống hoàn toàn khái niệm Struts1 và MVC2, điểm khác biệt ở đây là tất cả mọi thứ phải thông qua struts.xml hay annotation và một phần nào đó Struts che dấu FilterDispatcher đối với người lập trình để tạo nên tính linh hoạt trong việc xây dựng và bảo trì ứng dụng  Web, đặc biệt là việc mapping kết xuất giữa các trang không còn lệ thuộc và đặt trong code servlet dẫn đến việc mapping trở nên linh hoạt và uyển chuyển hơn Điểm đặc biệt của Struts2 áp dụng FilterDispatcher so với Struts1 với Action Servlet theo đánh giá chủ quan của tác giả bài viết là Filter có thể lọc 02 chiều so với Servlet và đặc biệt làm giảm tải việc xử lý cuối cùng và nó cũng là điểm ứng dụng của DispatcherAction trong Struts1

*

Các thành phần chính yếu và thường dùng của Struts2 Framework FilterDispatcher Khởi tạo Action class Thực thi phương thức chỉ định theo tập tin cấu hình hay annotation Đọc giá trị string trả về sau khi thực thi để xác định result hay view về phía người dùng Trong quá trình thực thi, Filter thực hiện Tìm kiếm phương thức execute() hay phương thức được chỉ định trong cấu hình Phát sinh result hay view tương ứng dựa trên kết quả String trả về của hàm execute hay phương thức chỉ định Cú pháp mapping trong web.xml

filter>

    filter-name>struts2filter-name>

    filter-class>org.apache.struts2.dispatcher.FilterDispatcher

filter>

filter-mapping>

    filter-name>struts2

    /*

filter-mapping>

Action Class hay ActionSupport Class Chứa đựng các thuộc tính mapping trên form và các thành phần xử lý của object (business logic) và phương thức chỉ định thực thi Là java class bình thường và không cần thiết phải extends Action hay ActionSupport class Struts2 Framework cung cấp cơ chế tự động mapping các tham số trong request trong form đến các thuộc tính trong Action với các thuộc tính cùng tên và có phương thức setXxx Trong quá trình mapping struts2 framework sử dụng OGNL thay thế EL để ép kiểu tự động từ form đến kiểu dữ liệu của Action property – do vậy, không nhất thiết lúc nào cũng khai báo kiểu dữ liệu là String và thực hiện ép kiểu bằng tay Struts Config (struts.xml)

 

      <>

         

           

                   /pageView

                   …

           

      

  

package: nhóm thông tin cấu hình của những thành phần có chung thuộc tính name: xác định tên của package namespace: phân biệt giữa các package khác tránh xung đột giữa các action với nhau extends: xác định class cha tương tự như khái niệm kế thừa abstract: bằng true nếu lớp là kế thừa action: ánh xạ một action với một class action name: xác định tên action class: xác định java class để xử lý action method: xác định phương thức được gọi khi request được chuyển tới. Nếu tham số này không tồn tại thì phương thức execute mặc định được tìm kiếm và thực thi result: xác định tên result hay page kết xuất của một action name: xác định tên result. Nếu không có mặc định là giá trị success type: xác định loại result. Nếu không có mặc định là FilterDispatcher thực hiện forward đến trang kết quả chain: chuyển đến action tiếp theo và copy giá trị đế valueStack và chuyển sang Action mới redirect: chuyển trang như gọi response.sendRedirect redirectAction: chuyển đến Action khác sử dụng phương thức response.sendRedirect include: Cho phép nhúng nhiều module hay tích hợp nhiều module vào trong ứng dụng file: xác định tên file được include vào tập tin struts.xml ActionSupport class mở rộng từ Action và được hỗ trợ validation và I18n và nhiều thành phần khác vì nó được implement từ nhiều thành phần như Validateable, ValidationAware, TextProvider, LocalProvider, and Serializable interfaces Result và ResultType Result được gửi làm hai thành phần Result Định nghĩa action tiếp theo trong việc xử lý khi Action hoàn tất xử lý Result type Xác định chi tiết của việc chuyển Result như chain, redirect, redirectAction, …

*

Ví dụ

Action

public classTestAction

  …

  public Stringexecute(){

    if(username.equals(“admin”)) {

      setMessage(MESSAGE + getUserName());

       return“success”;

    } else {

       return“error”;

    }

  }

}

struts.xml

     /example/DisplayDetails.jsp

     /example/error.jsp

ValueStack Stack lưu trữ object trong Frameworks và các thành phần trong một request Hỗ trợ người dùng sử dụng taglib truy cập các giá trị trong ValueStack Cung cấp cho việc truy cập liên quan đến context hiện hành làm việc từ request, session đến application … Các thành phần của Action cùng các thuộc tính của nó sẽ được lưu trong Value Stack với kiểu là object Stack (xem như là truy cập trực tiếp vào Action không cần chỉ định đối tượng) và có thể truy cập thuộc tính trực tiếp của Action (Các giá trị trùng tên nhau thì giá trị cao nhất trong stack được truy cập). Khi truy cập các giá trị này thì không cần phải dùng ký hiệu gì cả Các thành phần attribute hay scope, hay các đối tượng khác trong servlet container sẽ được đưa thành context object (hay context map). Do đó, muốn truy cập những đối tượng này cần xác định cụ thể tầm vực với ký hiệu dấu # ở trước

*

Một số đối tượng mặc định của ValueStack

*

ActionContext Vùng lưu trữ tổng để chứa tất cả dữ liệu liên quan đến request và nằm hoàn toàn trong trong ValueStacks Khi dữ liệu được truyền đến container hay struts 2 framework thì interceptor params hỗ trợ trích xuất dữ liệu và đưa cặp name và value của parameter vào ValueStack Ví dụ

*

Do vậy, để truy cập vào ValueStacks của các đối tượng thuộc context Object, chúng ta phải truy xuất thông qua ActionContext Một số taglib hỗ trợ, chúng ta sẽ tiếp cận trong các thành phần cụ thể trong từng ứng dụng trong từng bài Về giao diện có hỗ trợ đầy đủ các control trình bày giao diện, đặc biệt các control hỗ trợ thuộc tính label cho phép developer đính kèm theo control là nhãn trình bày mà không cần phải tốn công ghi tên nhãn trước control Ngoài ra, về form, mặc định form của taglib sẽ phát sinh ra dạng table cùng với layout để trình bày form với đầy đủ các thành phần của css cùng javascript để hỗ trợ cho việc xử lý và trình bày. Do vậy, để đơn giản form và việc phát sinh form tự động chúng ta áp dụng thuộc tính theme=”simple” để form phát sinh mà không apply template hay layout phức tạp dẫn đến tình trạng bể form khi xử lý giao diện đặc biệt trong table Để hỗ trợ trình bày hay in dữ liệu từ thuộc tính của action hay JavaBean, Struts 2 taglib cung cấp tag property Vì tích hợp các tag của JSTL để không còn sử dụng JSTL, các tag trong struts 2 tương tự JSTL ngoại trừ tag forEach và forToken được thay bằng iterator. Hơn thế nữa tag if đã có elseif và else, …. OGNL Viết tắt của Object Graph Navigation Language  Hỗ trợ tương tự như EL của JSP nhưng cho phép truy cập ValueStack thay đổi giá trị trong ValueStack lẫn trong JavaBean (EL chỉ cho phép truy cập không cho thay đổi) Loại dữ liệu của OGNL thường là Map. Trong expression, chúng ta có thể truy cập trực tiếp thành phần dùng OGNL mà không cần phải có ký hiệu đặc biệt gì cả, đơn giản rất nhiều so với EL. Lưu ý, các thành phần này phải nằm trong context mặc định của ứng dụng như root. Trong Struts2, context cao nhất là ActionContext hay các object được tạo từ JavaBeans. Để reference đến thành phần object bên trong hay khác root, chúng ta phải dùng dấu #. Ví dụ như để truy cập thuộc tính USER trong session, chúng ta phải truy cập #session.USER Để định trị giá trị 1 cách chính xác, chúng ta dùng cú pháp %{} thay cho ${} trong EL. Đối với thành phần trong JavaBean chúng ta có thể ghi trực tiếp tên thuộc tính mà không cần cú pháp nêu trên Truy cập HttpServletRequest Chúng ta có 02 cách: truy cập từ ActionContext hay implement class với ServletRequestAware Để truy cập từ ActionContext trong code Java

HttpServletRequestrequest = ServletActionContext.getRequest();

Implement class action với ServletRequestAware, chúng ta Khai báo biến HttpServletRequest request; public HttpServletRequest getServletRequest() { return this.request; } Gọi hàm getServletRequest khi cần truy cập request Truy cập HttpSession Chúng ta có 02 cách: truy cập từ ActionContext hay implement class với SessionAware Để truy cập từ ActionContext trong code Java

Mapattibutes = ActionContext.getContext().getSession();

Implement class action với SessionAware, chúng ta Khai báo biến Map session; Public Map getSession() { return this.session; } Gọi hàm getSession khi cần truy cập request Các bước thực hiện xây dựng ứng dụng web áp dụng Struts2 Framework Bước 1: Tạo ứng dụng project Web application Chọn Web Servers hỗ trợ JavaEE và có hỗ trợ JavaEE 5 Chọn hay đưa các thành phần hỗ trợ Struts 2 Frameworks Bước 2: Tạo tất cả giao diện cho ứng dụng – trang JSP Bước 3: Tạo tất cả action class để đón nhận xử lý Định nghĩa các thuộc tính theo form nhập liệu trong các view từ bước 2 và định nghĩa đầy đủ get và set cho chúng Cài đặt phương thức execute()  hay bất kỳ thực hiện xử lý cho action khi có yêu cầu Bước 4: Cấu hình tập tin struts.xml hay thiết lập kết nối bằng annotation giữa View và Action Step 5: Build, Deploy và Test ứng dụng

Vận dụng Struts 2Framework vào việc phân tích và cài đặt một ứng dụngcụ thể (ở đây chúng tôi sẽ thực hiệnnội dung tương tự bài trên Struts1 framework hay MVCPattern trên Web – Mô hình thiết kế ứng dụng theo dạngModel – View – Controller để cho thấy việc phân tíchMVC có lợi, đặc biệt khi áp dụng trên mộtframework cụ thể như Struts)

Ứng dụng ở đây mô tả việc xây dựng một ứng dụng cung cấp chức năng như sau Ngưởi dùng muốn truy cập vào hệ thống phải thực hiện login để kiểm tra username và password có hợp lệ hay không Hệ thống thông qua DB kiểm tra tính xác thực của dữ liệu Nếu username và password không chính xác hay không tồn tại ứng dụng thông báo cho người dùng thông tin “Invalid username and password” và cho người dùng trở về trang Login thông qua một Link có tên là try again và cung cấp một Link Register cho phép người dùng đăng ký một account mới Nếu user tồn tại thì chương trình bày form Search. Đặc biệt, trên đầu trang phải sử dụng session để lưu trữ user và tất cả các trang phải có câu “Welcome, tênUser” Form Search cho phép người dùng tìm kiếm một user bất kỳ khi biết một phần tên của họ Kết quả Search sẽ trình bày trên lưới dữ liệu Nếu tìm không thấy sẽ in ra câu “No Result is matched!” Trên lưới tìm kiếm cho phép người sử dụng update hay delete dữ liệu Mô tả yêu cầu của bài trên thể hiện đầy đủ chức năng cơ bản của một ứng dụng thực tế và kết nối DB. Chúng tôi sẽ phân tích và làm bài theo từng chức năng và áp dụng Sruts Framework từng chức năng một từng bước từng bước một. Ở đây chúng tôi hướng dẫn trước việc sử dụng Struts2 config để chúng ta làm quen với Struts2. Các bài tiếp theo chúng tôi sẽ mở rộng hơn về annotation về interceptor, validation … Mô Hình Strut2 ứng dụng cho yêu cầu tổng quát hóa như sau

*

DB chúng tôi thao tác có dạng như sau

*

Yêu cầu Nắm vững các khái niệm về MVC, Struts Framework 1.x, Struts2 Framework Nắm vững về ngôn ngữ lập trình Java, lập trình thao tác hướng đối tượng Cách thức sử dụng JSTL, EL, HTML, OGNL Cách thức sử dụng liên kết động với DB trong code Java Đã cài đặt các ứng dụng về MVC, Struts1 Framework Tools sử dụng ở đây là Netbeans 6.9.1 JDK 6 update 22, JDK 7 update 51, JDK 8 update 66 Server: Tomcat 6.0.26, Tomcat 8.x DBMS: SQL Server 2005 đến SQL Server 2014 Thư viện hỗ trợ: Driver kết nối database SQLServer (sqljdbc.jar hay sqljdbc4.jar), Struts2 Framework taglib Tool Netbeans 6.9.1, hay 8.x phải hỗ trợ Struts2 Các bước thực hiện Tạo Web Application JavaEE version: JavaEE 5 Nhấn Next, tại bước Chọn Frameworks, chọn Struts 2 và gỡ bỏ dấu check “Create example page” trong tag Configuration

*

Nhấn Finish, cấu trúc project trên Netbeans cập nhật với các tập tin cấu hình struts.xml, taglib và các library

*

*

*

Tập tin web.xml được tự động cập nhật mapping với FilterDispatcher như sau

*

Chúng ta thực hiện chức năng Login tương tự bài MVC Pattern trên Web – Mô hình thiết kế ứng dụng theo dạng Model – View – Controller Chúng ta tạo trang login.html với HTML thuần như sau

*

*

Như vậy, với đường dẫn là chuỗi rỗng thì phải luôn qua Filter khi ứng dụng được kích hoạt. Do vậy, chúng ta sẽ tạo action với tên là chuỗi rỗng để chuyển đến trang trực tiếp login.html mà không cần thông qua action class xử lý gì cả. Chúng ta cập nhật tập tin struts.xml như sau

*

Như vậy, chúng ta test thử và thấy rằng trang login đã được thiết lập chạy đầu tiên thông qua Filter hay Struts2 Chúng ta tiếp tục tạo trang invalid.html với thành phần try again tương tự welcome file để hỗ trợ gọi lại trang login.html

*

Chúng ta thực hiện tạo Action cho việc xử lý Login Chọn menu File, new File, chọn Struts2 trong Categories và Struts Action trong File Types

*

Nhấn Next, đặt tên trong Class Name và chọn package tương ứng

*

Nhấn Finish, Action hay Java Class được phát sinh như sau

*

Chúng ta thực hiện chỉnh sửa trong Action Form như sau Định nghĩa các thuộc tính mapping với form login Định nghĩa các phương thức get/set của các thuộc tính Cài đặt phương thức execute xử lý login để khi login đúng ra trả ra nhãn “success”, sai trả ra nhãn “fail” – đây là các result để chúng ta thực hiện mapping trong struts.xml Lưu ý Trong hàm execute, chúng ta thực hiện lưu trữ giá trị user vào trong session khi login thành công và sẽ dùng ngôn ngữ OGNL để trình bày kết quả ra trang search.jsp           Trong hàm chúng ta đã sử dụng cách thức lấy session như trong phần nội dung lý thuyết và đưa attribute vào trong nó để lưu trữ giá trị username khi login thành công

*

*

Chúng ta tạo trang search.jsp để trình bày kết quả khi login đúng Chúng ta sử dụng OGNL để lấy session và sử dụng taglib property để get dữ liệu từ session của Action Context ra

*

Cấu trúc project hiện nay như sau

*

*

*

*

*

Chúng ta thực hiện mapping các view, action thông qua tập tin struts.xml Tập tin này không được nằm trong thư mục WEB-INF như trong struts1 mà nó nằm ngay thư mục gốc của source-code package Netbeans không hỗ trợ cơ chế tool để hỗ trợ add, nhưng chúng ta sẽ gõ tay mapping và dùng tổ hợp phím Ctrl + Space bar để chọn nhằm đảm bảo tính chính xác vì tập tin xml được hỗ trợ visual thông qua DTD khai báo Chúng ta thực hiện bổ sung vào struts.xml như sau Chúng ta khai báo action với name là action định nghĩa trong form Action này được mapping với Action class qua thuộc tính class Và kết xuất xử lý được struts2 framework kích hoạt hàm execute và kết quả trả về sẽ mapping với các result để cho view cụ thể Trong trường hợp action không tồn tại hay result không tồn tại thì trong quá trình thực thi lỗi 404 sẽ xuất hiện (cải tiến lỗi tốt hơn so với struts1 – chỉ có báo trang trắng)

*

Chúng ta thực hiện Build, Deploy và Testing

*

Nhập đúng

*

Nhập sai

*

Chúng ta đã hoàn tất chức năng Login với Struts2 Frameworks Chúng ta thực hiện chức năng search cho ứng dụng Trên trang search.jsp, chúng ta bổ sung form search sử dụng các tag lib như sau

*

Lưu ý: action chúng ta là searchLikeLastname, để sau này áp dụng chúng ta nên áp dụng Action sẽ là tên action với chữ action đầu viết hoa+Action ở sau như phần chức năng trên action là login thì tên Action class chúng ta sẽ là LoginAction. Ở đây Action Class của chúng ta sẽ là SearchLikeLastnameAction Chúng ta thực hiện tạo Action Class Gõ tên class và package, ở đây sẽ là SearchLikeLastnameAction và package sẽ là sample.struts2, thực hiện thay đổi class phát sinh như sau Khai báo thuộc tính để đón nhận giá trị search từ form Khai báo danh sách List để đón nhận kết quả trả về để chúng ta đón nhận kết quả trả về. Chúng ta làm như thế vì bản chất Struts2 đã hỗ trợ dạng backing bean và ngôn ngữ OGNL để chúng ta truy xuất các thành phần trong ActionContext thông qua ValueStack. Trong quá trình xử lý kết quả của Action được lưu trữ trong action context và như chúng tôi đã giảng giải lý thuyết, thành phần interceptor hỗ trợ trích xuất và đưa dữ liệu và valueStack và mapping với Action hay JavaBeans, và Struts2 cung cấp cơ chế cho chúng ta truy cập ValueStack. Do vậy, chúng ta không cần lấy request rồi attribute như Struts1 hay mô hình MVC. Đây là tính tối ưu của Struts2 hơn Struts1 cho người lập trình nhưng nó làm tăng tính phức tạp và xử lý nhiều cho container Phát sinh get và set cho 02 thành phần này Cài đặt hàm execute xử lý tìm kiếm và gán giá trị cho list, trả về kết quả nhãn “success”

*

Ngoài ra, Struts2 sử dụng JDK 5 trở lên do vậy chúng tôi sử dụng dạng dữ liệu generic để xây dựng ứng dụng, tạo sự tiện lợi trong ánh xạ dữ liệu trong quá trình lập trình Cập nhật trang search.jsp trình bày dữ liệu Sử dụng taglib của struts2 để truy cập dữ liệu thông qua action và Action Context, không sử dụng bất kỳ EL hay JSTL

*

*

*

Lưu ý: tag iterator của taglib cung cấp chúng ta thuộc tính status, đây là thuộc tính giúp tạo ra đối tượng IteratorStatus để cung cấp hàng loạt util cho chúng ta truy cập trong lúc quá trình duyệt vòng lặp. Một số thuộc tính của Iterator Status như sau

*

Chúng ta có thể áp dụng để lấy record đầu tiên, cuối cùng, đếm số thứ tự … mà không sử dụng dài dòng như JSTL 1.1 và EL như trong mô hình MVC Chúng ta thực hiện mapping các view với action trong tập tin struts.xml

*

Start Server Tomcat, Build Project, Deploy và Test đến chức năng search, sau khi login thành công

*

Nhấn nút search

*

Nếu không có

*

Chúng ta tiếp tục với chức năng Delete Giao diện delete được cập nhật trong trang search.jsp (đã trình bày ở trên) như sau

*

Tạo DeleteRecordAction để xử lý như sau (lưu ý phải get luôn tham số nhắc nhở cho lần search lại để fresh lưới)

*

Cập nhật struts.xml với việc gọi lại Action Search thông qua Result Type là redirectAction và sử dụng EL để lấy giá trị lần cuối cùng search truyền thẳng vào chức năng search với parameter trùng với tên parameter hay control trong form search

*

Thực hiện clean and Build và deploy ứng dụng để thực hiện chứn năng xóa

*

Thực hiện tiếp tục với chức năng Update Cập nhật giao diện cho trang search.jsp (đã thể hiện toàn bộ trong phần ở trên) như sau

*

Tạo UpdateRecordAction tương tự như delete như sau

*

*

Mapping Action tương tự như Delete như sau

*

Chúng ta đã hoàn tất các chức năng yêu cầu với coding cực kỳ đơn giản. Cấu trúc project hiện nay như sau

*

*

*

*

Chúc mừng các bạnđã hoàn tất và nắm tổng quát khái niệm về Struts2.x Framework cơ bản, cách thức thiết kế, mô hình ứngdụng và cài đặt ứng dụng web theo Struts2Framework. Qua đó chúng ta thấy được các ưuđiểm và khuyết điểm của framework này. Ởđây chúng ta nhận thấy với chức năng cơbản và đơn giản, struts 2 đã hỗ trợ làmđược ứng dụng web. Ở nội dung bài này,chúng ta chỉ mớii cấu hình bằng struts.xml

Chúng tôi hy vọng nộidung của bài này giúp ích các bạn trong việc cài đặtmô hình ứng dụng web với nhiều framework đểtạo sự thuận lợi trong lựa chọn củaquí vị.

Rất mong sự góp ýchân thành và chia sẻ của quí vị về vấn đềnày. Hẹn gặp lại quý vị ở các chủ đềkhác liên quan đến Struts2 Framework từ cơ bảnđến nâng cao, sử dụng annotation để cấuhình, validation, interceptor, xử lý toàn bộ ứng dụngMVC hay Struts1 Framework với Struts2 Framework

Leave a Reply

Your email address will not be published. Required fields are marked *