Struts 應用通過兩個 XML 配置文件實現裝配:通用的 web.xml 與 Struts 專用的 struts-config.xml(名稱可自定義)。本文系統梳理兩文件的核心元素、屬性與配置順序,助你快速掌握 Struts 配置精髓。
Web 容器啟動時讀取此文件裝載應用。根元素 <web-app> 子元素有嚴格順序:<servlet> → <servlet-mapping> → <taglib> 等。
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
config 參數指定 Struts 配置文件路徑<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/error/404.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error/exception.jsp</location>
</error-page>
<taglib>
<taglib-uri>/tags/struts-bean</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
啟動時由 Digester 組件解析,生成 org.apache.struts.config 包下的 JavaBean 對象樹,核心為 ModuleConfig。根元素 <struts-config> 子元素順序固定(按 DTD):
data-sources? → form-beans? → global-exceptions? → global-forwards? →
action-mappings? → controller? → message-resources? → plug-in*
<data-sources>
<data-source key="myDB" type="org.apache.commons.dbcp.BasicDataSource">
<set-property property="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<set-property property="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<set-property property="username" value="scott"/>
<set-property property="password" value="tiger"/>
</data-source>
</data-sources>
Action 中通過 getDataSource(request, "myDB") 獲取。
<form-beans>
<form-bean name="loginForm" type="com.example.form.LoginForm"/>
</form-beans>
name:唯一標識,供 Action 引用type:全限定類名<global-exceptions>
<exception key="error.database" type="java.sql.SQLException" path="/error/db.jsp"/>
</global-exceptions>
<global-forwards>
<forward name="login" path="/login.jsp" redirect="false"/>
</global-forwards>
redirect="true":重定向(瀏覽器地址變化)redirect="false":請求轉發(地址不變)<action-mappings>
<action path="/login" type="com.example.action.LoginAction"
name="loginForm" scope="request" validate="true" input="/login.jsp">
<forward name="success" path="/welcome.jsp"/>
<forward name="failure" path="/login.jsp" redirect="true"/>
<exception key="error.auth" type="com.example.AuthException" path="/error/auth.jsp"/>
</action>
</action-mappings>
關鍵屬性:
path:請求路徑(必須以 / 開頭)type:Action 實現類全名name:關聯的 Form Bean 名稱scope:Form 存活範圍,默認 sessionvalidate:是否調用 Form 的 validate()input:驗證失敗返回頁面<controller bufferSize="4096" contentType="text/html;charset=UTF-8" locale="true" nocache="true"/>
<message-resources parameter="com.example.resources.ApplicationResources"/>
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
struts-config.xmlweb.xml 中為 ActionServlet 添加多個 init-param(config/模塊前綴)現代 IDE(Eclipse/MyEclipse/IntelliJ)提供 Struts 插件,新建專案時自動生成配置骨架,僅需填寫屬性值。理解原理才能在疑難雜症時定位問題。