學習版本:Struts 2.3.15.3
建議參考官方提供的 blank 示例專案,將所需的 JAR 包複製到專案的 WEB-INF/lib 目錄下。
主要包含 web.xml 和 struts.xml 兩個文件。
Struts 2 的入口是一個 Servlet 過濾器,負責攔截所有請求並委派給框架處理。
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在 src 目錄下創建 struts.xml,定義封裝、Action 及結果視圖。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "https://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="helloworld" class="com.nucsoft.struts2.helloworld.HelloWorld" method="firstMethod">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
Action 類無需實現特定介面,只需提供處理請求的公共方法,返回 String 類型的結果碼。
public class HelloWorld {
private static final String SUCCESS = "success";
public String firstMethod() {
System.out.println("com.nucsoft.struts2.helloworld.HelloWorld.firstMethod");
return SUCCESS;
}
}
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 是 Struts 2 的核心控制器,相當於 Spring MVC 中的 DispatcherServlet,負責初始化框架、攔截請求並委派處理。
name:包的唯一標識,供引用。extends:繼承父包(通常為 struts-default),繼承預設攔截器、結果類型等配置。namespace:命名空間,預設為 /,用於區分同名 Action。abstract:設為 true 時表示抽象包,不能定義 Action。name:請求名稱(不含副檔名),對應 URL 中的路徑。class:處理請求的類全限定名,預設為 ActionSupport。method:指定處理方法,預設為 execute()。name:對應 Action 方法返回的字串,預設為 success。setXxx() 方法接收請求參數(自動類型轉換,支援 GET/POST)。getXxx() 方法向頁面提供數據。public String xxx(),無參數,返回結果字串。