Struts 2 - Ví dụ về Hello World
Như bạn đã học từ kiến trúc Struts 2, khi bạn nhấp vào siêu liên kết hoặc gửi biểu mẫu HTML trong ứng dụng web Struts 2, đầu vào được Bộ điều khiển thu thập và được gửi đến một lớp Java có tên là Hành động. Sau khi Hành động được thực thi, một kết quả sẽ chọn một tài nguyên để hiển thị phản hồi. Tài nguyên thường là JSP, nhưng nó cũng có thể là tệp PDF, bảng tính Excel hoặc cửa sổ ứng dụng Java.
Giả sử rằng bạn đã xây dựng môi trường phát triển của mình. Bây giờ, chúng ta hãy tiến hành xây dựngHello World Struts2dự án. Mục đích của dự án này là xây dựng một ứng dụng web thu thập tên người dùng và hiển thị "Hello World" theo sau là tên người dùng.
Chúng tôi sẽ phải tạo bốn thành phần sau cho bất kỳ dự án Struts 2 nào:
Sr.No | Thành phần & Mô tả |
---|---|
1 | Action Tạo một lớp hành động 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, mô hình và chế độ xem. |
2 | Interceptors Tạo các thiết bị đánh chặn nếu được yêu cầu hoặc sử dụng các phương tiện đánh chặn hiện có. Đây là một phần của Controller. |
3 | View Tạo một JSP để tương tác với người dùng để lấy đầu vào và trình bày các thông điệp cuối cùng. |
4 | Configuration Files Tạo các tệp cấu hình để ghép nối Bộ điều khiển, Chế độ xem và Hành động. Các tệp này là struts.xml, web.xml, struts.properties. |
Tôi sẽ sử dụng Eclipse IDE, để tất cả các thành phần bắt buộc sẽ được tạo trong một Dự án Web Động. Bây giờ chúng ta hãy bắt đầu với việc tạo Dự án Web Động.
Tạo một dự án web động
Khởi động Eclipse của bạn và sau đó đi với File > New > Dynamic Web Project và nhập tên dự án là HelloWorldStruts2 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 kiểm tra Generate Web.xml deployment descriptorLựa chọn. Thao tác này sẽ tạo một dự án web động cho bạn trong Eclipse. Bây giờ đi vớiWindows > Show View > Project Explorervà bạn sẽ thấy cửa sổ dự án của mình như bên dưới:
Bây giờ sao chép các tệp sau từ thư mục struts 2 lib C:\struts-2.2.3\lib đến dự án của chúng tôi WEB-INF\libthư mục. Để 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.
- commons-fileupload-x.y.z.jar
- commons-io-x.y.z.jar
- commons-lang-x.y.jar
- commons-logging-x.y.z.jar
- commons-logging-api-x.y.jar
- freemarker-x.y.z.jar
- javassist-.xy.z.GA
- ognl-x.y.z.jar
- struts2-core-x.y.z.jar
- xwork-core.x.y.z.jar
Tạo lớp hành động
Lớp hành động là chìa khóa cho ứng dụng Struts 2 và chúng tôi triển khai hầu hết logic nghiệp vụ trong lớp hành động. Vì vậy, hãy để chúng tôi tạo một tệp java HelloWorldAction.java dướiJava Resources > src với một tên gói com.tutorialspoint.struts2 với các nội dung được đưa ra dưới đây.
Lớp Hành động phản hồi hành động của người dùng khi người dùng nhấp vào URL. Một hoặc nhiều phương thức của lớp Hành động được thực thi và kết quả là Chuỗi được trả về. Dựa trên giá trị của kết quả, một trang JSP cụ thể được hiển thị.
package com.tutorialspoint.struts2;
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 được gọi là "name". Chúng tôi có các phương thức getters và setter tiêu chuẩn cho thuộc tính "name" và một phương thức thực thi trả về chuỗi "thành công".
Khung Struts 2 sẽ tạo một đối tượng của HelloWorldActionvà gọi phương thức được thực thi để phản hồi lại hành động của người dùng. Bạn đặt logic nghiệp vụ của mình bên trong phương thức này, cuối cùng nó sẽ trả về hằng số Chuỗi. Nói cách khác, đối với mỗi URL, bạn sẽ phải triển khai một lớp hành động và bạn có thể sử dụng trực tiếp tên lớp đó làm tên hành động của mình hoặc bạn có thể ánh xạ tới một số tên khác bằng cách sử dụng tệp struts.xml như được hiển thị bên dưới.
Tạo chế độ xem
Chúng ta cần một JSP để trình bày thông báo cuối cùng, trang này sẽ được gọi bởi Struts 2 framework khi một hành động được xác định trước sẽ xảy ra và ánh xạ này sẽ được định nghĩa trong tệp struts.xml. Vì vậy, hãy để chúng tôi tạo tệp jsp bên dướiHelloWorld.jsptrong thư mục WebContent trong dự án nhật thực của bạn. Để làm điều này, nhấp chuột phải vào thư mục WebContent trong trình khám phá dự án và chọnNew >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>
Lệnh taglib cho vùng chứa Servlet biết rằng trang này sẽ sử dụng Struts 2 và các thẻ này sẽ được đặt trước s.
Thẻ s: property hiển thị giá trị của thuộc tính class action "name> được trả về bởi phương thức getName() của lớp HelloWorldAction.
Tạo trang chính
Chúng tôi cũng cần tạo index.jsptrong thư mục WebContent. Tệp này sẽ đóng vai trò là URL hành động ban đầu nơi người dùng có thể nhấp để yêu cầu khung Struts 2 gọi một phương thức đã xác định của lớp HelloWorldAction và hiển thị dạng xem HelloWorld.jsp.
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ 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>Hello World From Struts2</h1>
<form action = "hello">
<label for = "name">Please enter your name</label><br/>
<input type = "text" name = "name"/>
<input type = "submit" value = "Say Hello"/>
</form>
</body>
</html>
Các hellohành động được xác định trong tệp dạng xem trên sẽ được ánh xạ tới lớp HelloWorldAction và phương thức thực thi của nó bằng tệp struts.xml. Khi người dùng nhấp vào nút Gửi, khung công tác Struts 2 sẽ chạy phương thức thực thi được xác định trong lớp HelloWorldAction và dựa trên giá trị trả về của phương thức, một dạng xem thích hợp sẽ được chọn và hiển thị dưới dạng phản hồi.
Tệp cấu hình
Chúng ta cần một ánh xạ để liên kết URL, lớp HelloWorldAction (Model) và HelloWorld.jsp (chế độ xem) với nhau. Ánh xạ cho khung Struts 2 biết lớp nào sẽ phản hồi lại hành động của người dùng (URL), phương thức nào của lớp đó sẽ được thực thi và khung nhìn nào sẽ hiển thị dựa trên kết quả Chuỗi mà phương thức đó trả về.
Vì vậy, hãy để chúng tôi tạo một tệp có tên struts.xml. Vì Struts 2 yêu cầu struts.xml phải có trong thư mục lớp. Do đó, tạo tệp struts.xml trong thư mục WebContent / WEB-INF / lớp. Eclipse không tạo thư mục "lớp" theo mặc định, vì vậy bạn cần tự thực hiện việc này. Để thực hiện việc này, hãy nhấp chuột phải vào thư mục WEB-INF trong trình khám phá dự án và chọnNew > Folder. Struts.xml của bạn sẽ giống như sau:
<?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 = "hello"
class = "com.tutorialspoint.struts2.HelloWorldAction"
method = "execute">
<result name = "success">/HelloWorld.jsp</result>
</action>
</package>
</struts>
Một số từ cần hiểu về tệp cấu hình ở trên. Ở đây, chúng tôi đặt hằng sốstruts.devMode đến true, bởi vì chúng tôi đang làm việc trong môi trường phát triển và chúng tôi cần xem một số thông báo nhật ký hữu ích. Sau đó, chúng tôi xác định một gói được gọi làhelloworld.
Tạo một gói rất hữu ích khi bạn muốn nhóm các hành động của mình lại với nhau. Trong ví dụ của chúng tôi, chúng tôi đặt tên cho hành động của mình là "xin chào", tương ứng với URL/hello.action và được sao lưu bởiHelloWorldAction.class. Cácexecute phương pháp của HelloWorldAction.class là phương thức được chạy khi URL /hello.actionĐược gọi. Nếu kết quả của phương thức thực thi trả về "thành công", thì chúng tôi đưa người dùng đếnHelloWorld.jsp.
Bước tiếp theo là tạo một web.xmltệp là điểm nhập cho bất kỳ yêu cầu nào tới Struts 2. Điểm vào của ứng dụng Struts2 sẽ là một bộ lọc được xác định trong bộ mô tả triển khai (web.xml). Do đó, chúng tôi sẽ xác định một mục nhập của lớp org.apache.struts2.dispatcher.FilterDispatcher trong web.xml. Tệp web.xml cần được tạo trong thư mục WEB-INF trong WebContent. Eclipse đã tạo một tệp web.xml khung cho bạn khi bạn tạo dự án. Vì vậy, hã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"
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
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>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<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 tôi đã chỉ định index.jsp làm tệp chào mừng của chúng tôi. Sau đó, chúng tôi đã định 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 phù hợp với mẫu / *)
Để bật nhật ký chi tiết
Bạn có thể bật chức năng ghi nhật ký hoàn chỉnh trong khi làm việc với Struts 2 bằng cách tạo logging.properties nộp dưới WEB-INF/classesthư mục. Giữ hai dòng sau trong tệp tài sản của bạn -
org.apache.catalina.core.ContainerBase.[Catalina].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].handlers = \
java.util.logging.ConsoleHandler
Logging.properties mặc định chỉ định một ConsoleHandler để định tuyến ghi nhật ký đến stdout và cũng là một FileHandler. Ngưỡng mức nhật ký của trình xử lý có thể được đặt bằng cách sử dụng SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST hoặc ALL.
Đó là nó. Chúng tôi đã sẵn sàng để chạy ứng dụng Hello World của mình bằng cách sử dụng khuôn khổ Struts 2.
Thủ tục thực hiện ứng dụng
Nhấp chuột phải vào tên dự án và nhấp vào Export > WAR File để tạo tệp Chiến tranh.
Sau đó, triển khai WAR này trong thư mục ứng dụng web của Tomcat.
Cuối cùng, khởi động máy chủ Tomcat và cố gắng truy cập URL http://localhost:8080/HelloWorldStruts2/index.jsp. Điều này sẽ cung cấp cho bạn màn hình sau:
Nhập giá trị "Struts2" và gửi trang. Bạn sẽ thấy trang tiếp theo
Lưu ý rằng bạn có thể xác định index dưới dạng một hành động 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/HelloWorldStruts2/index.action. Kiểm tra bên dưới cách bạn có thể xác định chỉ mục như một hành động -
<?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 = "com.tutorialspoint.struts2.HelloWorldAction"
method = "execute">
<result name = "success">/HelloWorld.jsp</result>
</action>
</package>
</struts>