前言
Struts 2 通過 struts.xml 中的 <constant> 元素暴露 40+ 內建配置項,控制框架核心行為。本文按功能分類整理高頻配置,附上默認值、推薦值與避坑提示,作為開發、調試、上線的速查手冊。
核心配置分類速查表
1. 開發/調試相關
| Constant | 默認值 | 推薦(開發/生產) | 說明 |
| struts.devMode | false | true / false | 開啟詳細錯誤頁、配置熱加載、OGNL 表達式報錯堆棧。生產必須關閉,否則洩露敏感信息且性能下降。 |
| struts.configuration.xml.reload | false | true / false | struts.xml 修改後自動重載,開發環境建議開啟。 |
| struts.i18n.reload | false | true / false | 國際化資源文件每次請求重載,開發調試語言包必開。 |
2. Action 映射與 URL 處理
| Constant | 默認值 | 推薦 | 說明 |
| struts.enable.DynamicMethodInvocation | true | false | 允許 action!method 語法。安全起見生產建議關閉,改用通配符映射或 REST 插件。 |
| struts.enable.SlashesInActionNames | false | true | 允許 Action 名含斜線(如 user/profile),配合 REST 風格 URL。 |
| struts.url.includeParams | none | get | URL 標簽生成鏈接時自帶參數:none/ get / all。分頁、篩選頁面建議 get。 |
3. 視圖與主題
| Constant | 默認值 | 說明 |
| struts.ui.theme | xhtml | 表單標簽默認渲染模板風格:simple / xhtml / css_xhtml / ajax。 |
| struts.ui.templateDir | template | 模板文件搜索基礎路徑(相對類路徑)。 |
| struts.ui.templateSuffix | ftl | 模板後綴:ftl / vm / jsp,對應 FreeMarker / Velocity / JSP。 |
| struts.tag.altSyntax | true | 標簽屬性是否支持 OGNL 表達式語法(如 value="%{user.name}")。 |
4. 靜態資源與緩存
| Constant | 默認值 | 說明 |
| struts.serve.static.browserCache | true | 瀏覽器緩存靜態資源(CSS/JS/圖片)。開發階段改 false 強制刷新。 |
| struts.xslt.nocache | false | XSLT 結果是否禁用樣式表緩存。開發 true,生產 false。 |
5. 國際化與編碼
| Constant | 默認值 | 說明 |
| struts.custom.i18n.resources | — | 自定義資源文件基名(逗號分隔),如 global,messages,errors。 |
| struts.dispatcher.parametersWorkaround | false | 針對 WebLogic/OC4J 等不支持 getParameterMap() 的容器,設置 true。 |
6. 對象工廠與 Spring 整合(關鍵)
<constant name="struts.objectFactory" value="spring" />
<!-- 等同於完整類名 org.apache.struts2.spring.StrutsSpringObjectFactory -->
- 將 Action 實例化交給 Spring 容器,支持
@Autowired、AOP、事務等。
- 需引入
struts2-spring-plugin 依賴。
- 自動裝配策略可通過
struts.objectFactory.spring.autoWire 設置:name(默認)/ type / auto / constructor。
7. 多配置文件加載順序
<constant name="struts.configuration.files"
value="struts-default.xml,struts-plugin.xml,struts.xml" />
後加載的文件會覆蓋前者的同名 Bean 定義,利用此機制可在插件/模塊中覆蓋默認行為。
最佳實踐:分環境配置模板
<!-- struts.xml 通用部分 -->
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.enable.SlashesInActionNames" value="true" />
<constant name="struts.ui.theme" value="simple" />
<constant name="struts.tag.altSyntax" value="true" />
<constant name="struts.custom.i18n.resources" value="global,messages" />
<!-- struts-dev.xml 僅開發環境引入 -->
<constant name="struts.devMode" value="true" />
<constant name="struts.configuration.xml.reload" value="true" />
<constant name="struts.i18n.reload" value="true" />
<constant name="struts.serve.static.browserCache" value="false" />
<!-- struts-prod.xml 僅生產環境引入 -->
<constant name="struts.devMode" value="false" />
<constant name="struts.configuration.xml.reload" value="false" />
<constant name="struts.i18n.reload" value="false" />
<constant name="struts.serve.static.browserCache" value="true" />
通過 Maven Profile 或 Spring Profile 在打包時引入對應文件,實現「零代碼修改、環境隔離配置」。
總結
掌握上述高頻 Constant,能解決 90% 的 Struts 2 行為定制需求。核心原則:開發環境開啟熱加載與詳細報錯,生產環境鎖死配置、關閉調試、啟用緩存、禁用危險特性。建議將分環境配置模板納入項目骨架,新項目開箱即用。