掌握 Struts 2 只需圍繞三大件展開:
struts.properties — 系統級參數,單例全局生效struts.xml — 請求路由、攔截器、結果視圖,支持模塊化拆分Action — POJO 或繼承 ActionSupport,承載業務邏輯與數據該文件定義框架運行時默認行為,常用關鍵屬性分類如下:
struts.i18n.encoding=UTF-8 struts.locale=zh_CN
struts.serve.static=true struts.serve.static.browserCache=true # 生產環境建議 true
struts.devMode=false # 生產必須 false struts.configuration.xml.reload=false # 生產關閉熱加載 struts.i18n.reload=false
struts.action.extension=action,do,jnlp # 多擴展名用逗號分隔
struts.multipart.parser=jakarta # 推薦 jakarta (Commons FileUpload) struts.multipart.maxSize=2097152 # 2MB 默認限制
struts.objectFactory=spring struts.objectFactory.spring.autoWire=name struts.objectFactory.spring.useClassCache=true
提示: 所有屬性均可在
struts.xml中用<constant>覆蓋,實現多模塊差異化配置。
根元素 <struts> 下常用七大配置功能:
| 元素 | 作用 | 典型場景 |
|---|---|---|
<constant> | 覆蓋 properties 屬性 | 模塊級 devMode 開關 |
<include> | 引入子配置文件 | 業務模塊拆分 user-struts.xml |
<package> | Action/攔截器命名空間 | name="user" extends="struts-default" |
<action> | 請求路徑映射 | name="login" class="com.demo.LoginAction" |
<result> | 視圖跳轉 | name="success">/jsp/home.jsp |
<global-results> | 跨 Action 共享結果 | 全局異常頁、登錄頁 |
<interceptors> | 定義/引用攔截器棧 | 權限檢查、日誌、事務 |
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"https://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true"/>
<package name="default" extends="struts-default">
<action name="hello" class="com.demo.HelloAction">
<result name="success">/hello.jsp</result>
</action>
</package>
</struts>
public class HelloAction {
private String message; // 自動接收表單參數
public String execute() { // 默認執行方法
message = "Hello, " + message;
return "success";
}
// getter/setter 省略
}
Validateable、ValidationAware — 內建校驗框架LocaleProvider — 國際化支持addActionError()、getText() 等便捷方法// 方式 A:實現 ServletRequestAware 等 Aware 接口(推薦)
public class MyAction implements ServletRequestAware {
private HttpServletRequest request;
@Override public void setServletRequest(HttpServletRequest req) { this.request = req; }
}
// 方式 B:ActionContext 線程局部變量
HttpServletRequest req = (HttpServletRequest) ActionContext.getContext()
.get(StrutsStatics.HTTP_REQUEST);
struts.properties,業務路由放 struts.xml,大模塊拆 include 子文件。dispatcher(默認轉發),必要時用 redirect、redirectAction、json、stream。<interceptor-stack name="myStack">,在 <action> 引用 <interceptor-ref name="myStack"/>。Struts 2 以「約定優於配置」降低樣板代碼,核心在於 Action 即 POJO 與 攔截器鏈 兩大創新。熟練掌握三大件配置與 Action 開發模式,即可輕鬆駕馭企業級 MVC 應用。