struts-2.3.30-all.zip、struts-2.3.30-docs.zipstruts2-blank.war 解壓後 WEB-INF/lib 所有 JAR 到專案 WebContent/WEB-INF/lib<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="https://java.sun.com/xml/ns/j2ee"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://java.sun.com/xml/ns/j2ee https://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 核心攔截器 -->
<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>
</web-app>
若專案無 web.xml,可從 Tomcat conf/web.xml 或 Struts blank war 複製模板。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html><body>
<s:form action="test_1">
<s:textfield name="username" key="username"/>
<s:submit key="login" value="login"/>
</s:form>
</body></html>
package testAction;
import com.opensymphony.xwork2.ActionSupport;
public class Test_1Action extends ActionSupport {
private String username; // 自動接收表單同名參數
public void setUsername(String username) { this.username = username; }
public String getUsername() { return this.username; }
@Override
public String execute() throws Exception {
if (getUsername() != null)
return SUCCESS; // 邏輯視圖名
else
return ERROR;
}
}
<!-- error.jsp -->
<html><body>錯誤頁面!username 為空!</body></html>
<!-- welcome.jsp -->
<%@ taglib prefix="s" uri="/struts-tags"%>
<html><body>登陸成功!</body></html>
<?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>
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
<constant name="struts.devMode" value="true"/>
<package name="test" extends="struts-default">
<action name="test_1" class="testAction.Test_1Action">
<result name="error">error.jsp</result>
<result name="success">welcome.jsp</result>
</action>
</package>
</struts>
| 組件 | 角色 | 配置位置 |
|---|---|---|
| Filter | 核心攔截器,啟動 Struts | web.xml |
| Action | 處理業務,返回結果字符串 | Java 類 + struts.xml |
| Result | 邏輯視圖 → 物理頁面映射 | struts.xml <result> |
| Interceptor | 橫切關注點(參數注入、驗證、文件上傳) | struts-default.xml / 自定義 |
| ValueStack/OGNL | 數據存儲與表達式語言 | 運行時上下文 |
web.xml FilterActionSupport,提供屬性 + execute())struts.xml:Action 映射 + Result 映射struts.devMode=true 便於調試,生產環境關閉struts.xml 模塊化拆分:<include file="struts-module.xml"/>Struts 2 以 Filter 為核心,Action 為 POJO,Result 解耦視圖,構建了經典的 MVC 開發模式。雖然 Spring MVC 更主流,但理解 Struts 2 有助於掌握 Java Web 框架演進脈絡。