Như đã được học từ bài kiến trúc Struts2, khi bạn nhấp vào một liên kết hoặc submit một HTML form trong một ứng dụng web Struts2, đầu vào được thu thập bởi Controller được gửi đến một lớp Java gọi là Actions. Sau khi Actions được thực hiện, từ kết quả trả về của Actions chọn một tài nguyên (view) để hiển thị kết quả. Tài nguyên nói chung là một JSP, nhưng nó cũng có thể là một tệp PDF, một bảng tính Excel hoặc một cửa sổ ứng dụng Java.
Giả sử bạn đã thiết lập môi trường Struts2. Bài này sẽ hướng dẫn bạn tạo dự án Struts2 Hello World. Mục đích của dự án này là tạo một ứng dụng web thu thập tên của người dùng và hiển thị "Hello World" theo sau bởi tên người dùng. Chúng ta sẽ phải tạo ra bốn thành phần sau đây cho bất kỳ dự án Struts2 nào:
No. | Thành phần & Mô tả |
---|---|
1 | Action
Tạo lớp Action sẽ chứa logic nghiệp vụ hoàn chỉnh và kiểm soát sự tương tác giữa người dùng, Model và View. |
2 | Interceptors
Tạo các interceptor nếu cần thiết, hoặc sử dụng interceptor có sẵn. Nó là một phần của Controller. |
3 | View
Tạo một JSP để tương tác với người sử dụng để lấy dữ liệu đầu vào và hiển thị các kết quả cuối cùng. |
4 | Tập tin cấu hình
Tạo các tập tin cấu hình để ghép các Action, View và Controllers. Các tệp này là struts.xml, web.xml, struts.properties. |
Nội dung chính
Tạo một dự án Dynamic Web Project
Các công nghệ sử dụng trong dự án:
- eclipse mar2
- apache-tomcat-7.0.75
- struts-2.3.3
- jdk 1.8
Cấu trúc của project "struts2-helloworld" sau khi hoàn thành tất cả các bước:
Tạo project
Mở Eclipse của bạn lên sau đó chọn File> New> Dynamic Web Project và nhập tên dự án là struts2-helloworld và đặt phần còn lại của các tùy chọn như được đưa ra trong màn hình sau:
Chọn tất cả các tùy chọn mặc định trong màn hình tiếp theo và cuối cùng chọn tùy chọn Generate Web.xml deployment descriptor. Điều này sẽ tạo một dự án web động cho bạn trong Eclipse. Tiếp theo Windows> Show View> Project Explorer, và bạn sẽ thấy cửa sổ dự án như dưới đây:
Bây giờ sao chép các tập tin sau từ struts2 thư mục lib C:\lib\struts-2.3.3\lib vào thư mục WEB-INF\lib của project. Để thực hiện việc này, bạn chỉ cần kéo và thả tất cả các tệp sau vào thư mục WEB-INF\lib.
- asm-xy.jar
- asm-commons-xy.jar
- asm-tree-xy.jar
- commons-fileupload-xyz.jar
- commons-langxy.jar
- commons-io-xy.jar
- freemarker-xyz.jar
- javassist-.xyz.GA
- ognl-xyz.jar
- struts2-core-xyz.jar
- xwork-core.xyz.jar
Tạo lớp Action
Lớp Action là key của ứng dụng Struts2 và chúng ta thực hiện hầu hết logic nghiệp vụ trong lớp Action. Vì vậy chúng ta hãy tạo một tệp java HelloWorldAction.java dưới Java Resource > src với một tên gói vn.kienthuclaptrinh.action với các nội dung như dưới đây.
Lớp Action đáp ứng một hành động của người dùng khi người dùng nhấp chuột vào một URL hoặc submit Form. Một hoặc nhiều phương thức của lớp Action được thực hiện và kết quả String được trả về. Dựa vào giá trị của kết quả, một trang JSP cụ thể được hiển thị.
package vn.kienthuclaptrinh.action; public class HelloWorldAction { private String name; public String execute() throws Exception { return "success"; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Đây là một lớp rất đơn giản với một thuộc tính "name". Chúng ta có các phương thức getter và setter cho thuộc tính "name" và phương thức execute() trả về chuỗi "success".
Struts2 framework sẽ tạo ra một đối tượng của lớp HelloWorldAction và gọi phương thức execute() để đáp ứng lại hành động của người dùng. Bạn đặt logic nghiệp vụ bên trong phương thức execute() và cuối cùng trả về hằng số String. Đơn giản chỉ cần nói cho mỗi URL, bạn sẽ phải thực hiện một lớp Action và bạn có thể sử dụng tên lớp đó trực tiếp như tên tác vụ hoặc có thể ánh xạ tới một số tên khác bằng cách sử dụng tệp struts.xml được cấu hình như bên dưới.
Tạo View (trang JSP)
Chúng ta cần một JSP để hiển thị thông điệp tới người dùng, trang này sẽ được gọi bởi Struts2 framework khi một hành động được xác định trước sẽ xảy ra và việc ánh xạ này sẽ được định nghĩa trong tệp struts.xml. Vì vậy chúng ta tạo tệp HelloWorld.jsp trong thư mục WebContent. Để thực hiện việc này, hãy nhấp chuột phải vào thư mục WebContent và chọn New> JSP File.
<%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head> <title>Hello World</title> </head> <body> Hello World, <s:property value="name" /> </body> </html>
Chỉ thị taglib nói với Servlet container rằng trang này sẽ sử dụng các thẻ Struts2. Thẻ s:property hiển thị giá trị của thuộc tính action "name" được trả về bởi phương thức getName() của lớp HelloWorldAction.
Tạo trang chủ
Chúng ta cũng cần tạo index.jsp trong thư mục WebContent. Tệp này sẽ đóng vai trò là URL hành động ban đầu mà người dùng có thể nhấp chuột để gọi phương thức đã xác định của lớp HelloWorldAction và hiển thị HelloWorld.jsp.
<%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Hello World</title> </head> <body> <h1>Struts2 - Hello World</h1> <form action="hello"> <label for="name">Please enter your name:</label><br/> <input type="text" name="name" /> <input type="submit" value="Submit" /> </form> </body> </html>
Tập tin cấu hình
Chúng ta cần tạo file trung gian struts.xml tại thư mục src để kết hợp các URL, HelloWorldAction class (Model), và HelloWorld.jsp (View). Việc lập bản đồ cho biết Struts2 framework mà lớp sẽ đáp ứng hành động của người dùng (URL), phương thức của lớp đó sẽ được thực hiện và cái gì để hiển thị dựa trên kết quả mà phương thức trả về.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <action name="hello" class="vn.kienthuclaptrinh.action.HelloWorldAction" method="execute"> <result name="success">/HelloWorld.jsp</result> </action> </package> </struts>
Ở đây chúng ta thiết lập hằng số struts.devMode là true , bởi vì chúng ta đang làm việc trong môi trường phát triển và chúng ta cần phải xem một số thông điệp log hữu ích. Tiếp theo là định nghĩa package có name là helloworld. Tạo một gói là hữu ích khi bạn muốn nhóm các action của mình với nhau. Trong ví dụ trên action "hello" tương ứng với URL /hello.action và được HelloWorldAction.class hỗ trợ. Phương thức execute của HelloWorldAction.class là phương thức được gọi khi URL /hello.action được gọi. Nếu kết quả của phương thức execute trả về "success"
Bước tiếp theo là tạo web.xml. Eclipse đã tạo tệp web.xml cho bạn khi bạn tạo project. Vì vậy, chỉ cần sửa đổi nó như sau:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>struts2-helloworld</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- STRUTS2 DEFINITION --> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
Chúng ta đã chỉ định index.jsp là trang chủ. Sau đó, chúng ta đã cấu hình bộ lọc Struts2 để chạy trên tất cả các url (tức là, bất kỳ url nào khớp với mẫu /*)
Thực thi ứng dụng
Để thực thi ứng dụng bạn có thể làm 1 trong 2 cách sau:
Cách 1: thực thi trên eclipse
Nhấp chuột phải vào project muốn run --> Chọn "Run As" --> Chọn "1. Run On Server".
Cách 2: Nhấp chuột phải vào tên dự án và nhấp vào Export> WAR File để tạo một tệp tin war. Sau đó, triển khai WAR này trong thư mục webapps của Tomcat. Cuối cùng, khởi động máy chủ Tomcat và truy cập URL http://localhost:8080/struts2-helloworld/index.jsp.
Kết quả:
Nhập giá trị "Struts2" và submit trang. Bạn sẽ thấy trang tiếp theo
Lưu ý: bạn có thể xác định index như một action trong tệp struts.xml và trong trường hợp đó bạn có thể gọi trang chỉ mục là http://localhost:8080/struts2-helloworld/index.action
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="helloworld" extends="struts-default"> <action name="index"> <result >/index.jsp</result> </action> <action name="hello" class="vn.kienthuclaptrinh.action.HelloWorldAction" method="execute"> <result name="success">/HelloWorld.jsp</result> </action> </package> </struts>
Dowload Source Code