
- Struts 2 教程
- Struts2 - 首頁
- Struts2 - 基本 MVC 架構
- Struts2 - 概述
- Struts2 - 環境搭建
- Struts2 - 架構
- Struts2 - 示例
- Struts2 - 配置
- Struts2 - Action
- Struts2 - 攔截器
- Struts2 - 結果型別
- Struts2 - 值棧/OGNL
- Struts2 - 檔案上傳
- Struts2 - 資料庫訪問
- Struts2 - 傳送郵件
- Struts2 - 驗證
- Struts2 - 國際化
- Struts2 - 型別轉換
- Struts2 - 主題/模板
- Struts2 - 異常處理
- Struts2 - 註解
- Struts 2 標籤
- Struts2 - 控制標籤
- Struts2 - 資料標籤
- Struts2 - 表單標籤
- Struts2 - Ajax 標籤
- Struts 2 整合
- Struts2 - Spring
- Struts2 - Tiles
- Struts2 - Hibernate
- Struts 2 有用資源
- Struts2 - 問答
- Struts2 - 快速指南
- Struts2 - 有用資源
- Struts2 - 討論
Struts 2 - Hello World 示例
正如您從 Struts 2 架構中已經瞭解到的,當您在 Struts 2 web 應用中點選超連結或提交 HTML 表單時,輸入資訊會被控制器收集,併發送到一個名為 Action 的 Java 類。Action 執行完成後,結果會選擇一個資源來呈現響應。該資源通常是 JSP,但也可以是 PDF 檔案、Excel 電子表格或 Java applet 視窗。
假設您已經構建了開發環境。現在,讓我們繼續構建我們的第一個 **Hello World Struts2** 專案。該專案的目的是構建一個 web 應用,收集使用者的姓名,並顯示“Hello World”以及使用者名稱。
對於任何 Struts 2 專案,我們都需要建立以下四個元件:
序號 | 元件及描述 |
---|---|
1 | Action 建立一個 Action 類,其中包含完整的業務邏輯並控制使用者、模型和檢視之間的互動。 |
2 | 攔截器 根據需要建立攔截器,或使用現有的攔截器。這是控制器的一部分。 |
3 | 檢視 建立 JSP 來與使用者互動,獲取輸入並呈現最終訊息。 |
4 | 配置檔案 建立配置檔案來關聯 Action、檢視和控制器。這些檔案包括 struts.xml、web.xml、struts.properties。 |
我將使用 Eclipse IDE,以便所有必需的元件都將在一個動態 Web 專案下建立。現在讓我們開始建立動態 Web 專案。
建立動態 Web 專案
啟動 Eclipse,然後選擇 **檔案 > 新建 > 動態 Web 專案**,並輸入專案名稱為 **HelloWorldStruts2**,並根據以下螢幕設定其餘選項:

在接下來的螢幕中選擇所有預設選項,最後選中 **生成 Web.xml 部署描述符** 選項。這將在 Eclipse 中為您建立一個動態 Web 專案。現在選擇 **視窗 > 顯示檢視 > 專案資源管理器**,您將看到您的專案視窗如下所示:

現在將 Struts 2 lib 資料夾 **C:\struts-2.2.3\lib** 中的以下檔案複製到我們專案的 **WEB-INF\lib** 資料夾中。為此,您可以簡單地將所有以下檔案拖放到 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
建立 Action 類
Action 類是 Struts 2 應用的關鍵,我們在大多情況下在 Action 類中實現業務邏輯。因此,讓我們在 **Java 資源 > src** 下建立一個名為 HelloWorldAction.java 的 Java 檔案,包名為 **com.tutorialspoint.struts2**,內容如下所示。
當用戶點選 URL 時,Action 類會響應使用者的操作。Action 類的一個或多個方法會被執行,並返回一個字串結果。根據結果的值,將呈現特定的 JSP 頁面。
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; } }
這是一個非常簡單的類,帶有一個名為“name”的屬性。我們為“name”屬性提供了標準的 getter 和 setter 方法,以及一個返回字串“success”的 execute 方法。
Struts 2 框架將建立 **HelloWorldAction** 類的物件,並響應使用者的操作呼叫 execute 方法。您將業務邏輯放在此方法中,該方法最終返回字串常量。換句話說,對於每個 URL,您都必須實現一個 Action 類,您可以直接使用該類名作為 Action 名,也可以使用 struts.xml 檔案將其對映到其他名稱,如下所示。
建立檢視
我們需要一個 JSP 來呈現最終訊息,當預定義的操作發生時,Struts 2 框架將呼叫此頁面,並在 struts.xml 檔案中定義此對映。因此,讓我們在 Eclipse 專案的 WebContent 資料夾中建立以下 jsp 檔案 **HelloWorld.jsp**。為此,右鍵單擊專案資源管理器中的 WebContent 資料夾,然後選擇 **新建 > JSP 檔案**。
<%@ 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>
taglib 指令告訴 Servlet 容器,此頁面將使用 **Struts 2** 標籤,並且這些標籤將以 **s** 為字首。
s:property 標籤顯示 Action 類屬性“name”的值,該值由 HelloWorldAction 類的 **getName()** 方法返回。
建立主頁
我們還需要在 WebContent 資料夾中建立 **index.jsp**。此檔案將作為初始操作 URL,使用者可以在其中點選,告訴 Struts 2 框架呼叫 HelloWorldAction 類中定義的方法並呈現 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>
上面檢視檔案中定義的 **hello** 操作將使用 struts.xml 檔案對映到 HelloWorldAction 類及其 execute 方法。當用戶點選提交按鈕時,它將導致 Struts 2 框架執行 HelloWorldAction 類中定義的 execute 方法,並根據該方法返回的值,選擇並呈現適當的檢視作為響應。
配置檔案
我們需要一個對映來將 URL、HelloWorldAction 類(模型)和 HelloWorld.jsp(檢視)關聯起來。該對映告訴 Struts 2 框架哪個類將響應使用者的操作(URL),該類的哪個方法將被執行,以及根據該方法返回的字串結果呈現哪個檢視。
因此,讓我們建立一個名為 **struts.xml** 的檔案。由於 Struts 2 要求 struts.xml 位於 classes 資料夾中。因此,在 WebContent/WEB-INF/classes 資料夾下建立 struts.xml 檔案。Eclipse 預設情況下不會建立“classes”資料夾,因此您需要自己建立。為此,右鍵單擊專案資源管理器中的 WEB-INF 資料夾,然後選擇 **新建 > 資料夾**。您的 struts.xml 應該如下所示:
<?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>
關於上述配置檔案,需要理解一些內容。在這裡,我們將常量 **struts.devMode** 設定為 **true**,因為我們處於開發環境中,需要檢視一些有用的日誌訊息。然後,我們定義一個名為 **helloworld** 的包。
當您希望將 Action 分組在一起時,建立包非常有用。在我們的示例中,我們將 Action 命名為“hello”,它對應於 URL ** /hello.action**,並由 **HelloWorldAction.class** 支援。**HelloWorldAction.class** 的 **execute** 方法是在呼叫 URL ** /hello.action** 時執行的方法。如果 execute 方法的結果返回“success”,那麼我們將使用者帶到 **HelloWorld.jsp**。
下一步是建立一個 **web.xml** 檔案,它是任何請求到 Struts 2 的入口點。Struts2 應用的入口點將在部署描述符 (web.xml) 中定義的過濾器。因此,我們將在 web.xml 中定義 org.apache.struts2.dispatcher.FilterDispatcher 類的條目。web.xml 檔案需要在 WebContent 下的 WEB-INF 資料夾中建立。當您建立專案時,Eclipse 已經為您建立了一個 web.xml 檔案的框架。因此,讓我們修改如下:
<?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>
我們已將 index.jsp 指定為我們的歡迎檔案。然後,我們配置了 Struts2 過濾器以在所有 URL 上執行(即,任何與模式 /* 匹配的 URL)。
啟用詳細日誌
在使用 Struts 2 時,您可以透過在 **WEB-INF/classes** 資料夾下建立 **logging.properties** 檔案來啟用完整的日誌功能。在您的屬性檔案中保留以下兩行:
org.apache.catalina.core.ContainerBase.[Catalina].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].handlers = \ java.util.logging.ConsoleHandler
預設的 logging.properties 指定了一個 ConsoleHandler 用於將日誌路由到 stdout,以及一個 FileHandler。可以使用 SEVERE、WARNING、INFO、CONFIG、FINE、FINER、FINEST 或 ALL 設定處理程式的日誌級別閾值。
就是這樣。我們已準備好使用 Struts 2 框架執行我們的 Hello World 應用。
執行應用的步驟
右鍵單擊專案名稱,然後單擊 **匯出 > WAR 檔案** 以建立 WAR 檔案。
然後將此 WAR 部署到 Tomcat 的 webapps 目錄中。
最後,啟動 Tomcat 伺服器,並嘗試訪問 URL **https://:8080/HelloWorldStruts2/index.jsp**。這將顯示以下螢幕:

輸入值“Struts2”並提交頁面。您應該看到下一頁

請注意,您可以在 struts.xml 檔案中將 **index** 定義為一個 Action,在這種情況下,您可以將 index 頁面稱為 **https://:8080/HelloWorldStruts2/index.action**。請檢視以下如何在 struts.xml 中定義 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 = "com.tutorialspoint.struts2.HelloWorldAction" method = "execute"> <result name = "success">/HelloWorld.jsp</result> </action> </package> </struts>