專案遷移至 Resin 容器,啟動時拋出 SAXParseException,錯誤訊息指向 struts-config.xml 根元素。原本在 Tomcat 下正常運行,加入額外 XML 解析器配置後才暴露問題。
struts-config.xml **缺少 DOCTYPE 宣告**,導致解析器無法驗證元素結構,預設命名空間處理不一致。<?xml version="1.0" encoding="UTF-8"?>
<struts-config>
<!-- 缺少 DOCTYPE -->
<form-beans>...</form-beans>
</struts-config>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"
"https://struts.apache.org/dtds/struts-config_1_0.dtd">
<struts-config>
...
</struts-config>
加入 <message-resources parameter="com.xxx.ApplicationResources"/> 後再次啟動失敗。
message-resources 元素 **Struts 1.1 才引入**,1.0 DTD 不支援。<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"https://struts.apache.org/dtds/struts-config_1_1.dtd">
<struts-config>
<message-resources parameter="com.xxx.ApplicationResources"/>
...
</struts-config>
WEB-INF/dtds/,並在 web.xml 或 EntityResolver 中映射,避免啟動時下載外部 DTD 導致網路延遲或離線構建失敗。xmllint --valid 或 IDE 驗證所有部署描述檔 (web.xml, struts-config.xml, hibernate.cfg.xml 等)。struts-config.xml DOCTYPE,否則新功能元素將無法通過驗證。| Struts 版本 | DTD Public ID | DTD URL |
|---|---|---|
| 1.0 | -//Apache Software Foundation//DTD Struts Configuration 1.0//EN | struts-config_1_0.dtd |
| 1.1 | -//Apache Software Foundation//DTD Struts Configuration 1.1//EN | struts-config_1_1.dtd |
| 1.2 | -//Apache Software Foundation//DTD Struts Configuration 1.2//EN | struts-config_1_2.dtd |
| 1.3 | -//Apache Software Foundation//DTD Struts Configuration 1.3//EN | struts-config_1_3.dtd |