Struts 2 透過 <constant> 元素在 struts.xml 中配置框架行為。本文彙整 35+ 常用常數,按功能分類說明用途、預設值與最佳實踐,並附完整配置範例,幫助開發者快速查閱與調優。
核心配置分類
1. 國際化與編碼
| 常數名稱 | 預設值 | 說明 |
| struts.i18n.encoding | UTF-8 | 指定 Web 應用預設字元編碼,等同 HttpServletRequest.setCharacterEncoding()。處理中文參數建議設為 UTF-8 或 GBK。 |
| struts.i18n.reload | false | 開發階段設 true 可熱重載資源檔,生產環境必須 false 以提升效能。 |
| struts.custom.i18n.resources | - | 指定自訂國際化資源檔(不含副檔名),多檔以逗號分隔。 |
| struts.locale | - | 預設 Locale,如 zh_CN、en_US。 |
2. Action 映射與 URL
| 常數名稱 | 預設值 | 說明 |
| struts.action.extension | action | Action 處理的 URL 後綴,多值逗號分隔,如 action,do。 |
| struts.enable.DynamicMethodInvocation | true | 是否支援 action!method 語法動態調用方法。安全考量建議生產環境關閉(false)。 |
| struts.enable.SlashesInActionNames | false | 允許 Action 名稱包含斜線(/),REST 風格 URL 常開啟。 |
| struts.mapper.class | DefaultActionMapper | 指定 URL 到 Action 的映射器實現類。 |
| struts.mapper.alwaysSelectFullNamespace | false | 是否總是選擇最後一個斜線前的路徑作為 namespace。 |
3. 開發模式與重載
| 常數名稱 | 預設值 | 說明 |
| struts.devMode | false | 開發模式:true 顯示詳細錯誤、啟用熱重載;生產必須設 false。 |
| struts.configuration.xml.reload | false | struts.xml 變更後是否自動重載,開發建議 true。 |
| struts.convention.classes.reload | false | Convention 插件類變更熱重載(需配合 devMode)。 |
4. 靜態資源與快取
| 常數名稱 | 預設值 | 說明 |
| struts.serve.static | true | 是否由 Struts 提供靜態資源服務(/struts、/static 路徑)。 |
| struts.serve.static.browserCache | true | 瀏覽器是否快取靜態資源。開發設 false,生產 true。 |
5. 檔案上傳
| 常數名稱 | 預設值 | 說明 |
| struts.multipart.parser | jakarta | 上傳解析器:cos、pell、jakarta。用 cos/pell 需額外放 JAR 到 WEB-INF/lib。 |
| struts.multipart.maxSize | 2097152 (2MB) | 整個 multipart 請求最大位元組數,-1 表無限制。 |
| struts.multipart.saveDir | javax.servlet.context.tempdir | 上傳暫存目錄。 |
6. Spring 整合
| 常數名稱 | 預設值 | 說明 |
| struts.objectFactory | struts | 設 spring 讓 Spring 容器管理 Action 生命週期。 |
| struts.objectFactory.spring.autoWire | name | Spring 自動裝配策略:name、type、auto、constructor。 |
| struts.objectFactory.spring.useClassCache | true | 整合 Spring 時是否快取 Bean 實例。 |
7. 視圖與模板
| 常數名稱 | 預設值 | 說明 |
| struts.ui.theme | xhtml | UI 標籤預設主題:simple、xhtml、ajax。simple 不生成額外 HTML。 |
| struts.ui.templateDir | template | 模板檔案根目錄。 |
| struts.ui.templateSuffix | ftl | 模板副檔名:ftl(FreeMarker)、vm(Velocity)、jsp。 |
8. FreeMarker / Velocity / XSLT
| 常數名稱 | 預設值 | 說明 |
| struts.freemarker.templatesCache | false | 是否快取 FreeMarker 模板,生產建議 true。 |
| struts.freemarker.wrapper.altMap | true | 通常無需修改。 |
| struts.velocity.configfile | velocity.properties | Velocity 設定檔路徑。 |
| struts.xslt.nocache | false | XSLT 樣式表快取,開發 true,生產 false。 |
完整 struts.xml 配置範例
<?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>
<!-- 開發模式,上線改 false -->
<constant name="struts.devMode" value="true" />
<constant name="struts.convention.classes.reload" value="true"/>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.convention.result.path" value="/WEB-INF/content/" />
<constant name="struts.convention.default.parent.package" value="struts-default"/>
<constant name="struts.convention.package.locators" value="actions" />
<constant name="struts.convention.action.suffix" value="Action"/>
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<constant name="struts.convention.action.name.separator" value="-" />
<constant name="struts.custom.i18n.resources" value="i18n" />
<constant name="struts.i18n.reload" value="true" />
<constant name="struts.serve.static.browserCache" value="false" />
<constant name="struts.multipart.maxSize" value="-1" />
<constant name="struts.ui.theme" value="simple" />
<constant name="struts.i18n.encoding" value="UTF-8" />
</struts>
最佳實踐提醒
- 生產環境務必關閉 devMode,否則洩露堆疊追蹤且嚴重影響效能。
- 國際化重載(
struts.i18n.reload)僅開發階段開啟。
- 檔案上傳大小限制(
struts.multipart.maxSize)依業務調整,防止惡意大檔撐爆記憶體。
- 靜態資源快取(
struts.serve.static.browserCache)生產開啟,開發關閉。
- 動態方法調用(
struts.enable.DynamicMethodInvocation)有安全風險,建議生產關閉並改用 Wildcard 映射或 REST 插件。