Struts 1.x 是經典 MVC 框架,雖已逐漸被 Struts 2 / Spring MVC 取代,但維護舊專案仍需掌握其核心配置。本文系統整理 web.xml、struts-config.xml、標籤庫與 ActionForm 關鍵點。
<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>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>0</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>
<welcome-file-list><welcome-file>welcome.jsp</welcome-file></welcome-file-list>
welcome.jsp 內用 <jsp:forward page="/Home.do"/> 或 Struts 全域轉發 <forward name="welcome" path="/Home.do"/>。
<error-page><error-code>404</error-code><location>/common/404.jsp</location></error-page>
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<struts-config>
<data-sources /> <!-- 資料源,可多組 key 識別 -->
<form-beans /> <!-- ActionForm 定義 -->
<global-exceptions /> <!-- 全域例外對應 -->
<global-forwards /> <!-- 全域轉發邏輯名 -->
<action-mappings /> <!-- 核心:路徑對應 Action -->
<controller /> <!-- ActionServlet 參數微調 -->
<message-resources /> <!-- 國際化資源束 -->
<plug-in /> <!-- 擴充套件(Validator, Tiles 等) -->
</struts-config>
<form-beans>
<form-bean name="loginForm" type="com.demo.LoginForm"/>
<form-bean name="userForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="username" type="java.lang.String"/>
<form-property name="age" type="java.lang.Integer" initial="18"/>
</form-bean>
</form-beans>
<global-forwards>
<forward name="login" path="/login.jsp" redirect="false"/>
<forward name="home" path="/Home.do" redirect="true"/>
</global-forwards>
JSP 用 <html:link forward="login">,Action 用 mapping.findForward("login")。
<action path="/login"
type="com.demo.LoginAction"
name="loginForm"
scope="request"
validate="true"
input="/login.jsp">
<forward name="success" path="/home.do" redirect="true"/>
<forward name="failure" path="/login.jsp"/>
</action>
| 標籤 | 對應 HTML | 備註 |
|---|---|---|
| html:form | <form> | 自動帶入 Action 路徑 |
| html:text / password / textarea | <input type="text/password"> / <textarea> | 綁定 Form Bean 屬性 |
| html:select / options / optionsCollection | <select> | 下拉選單資料綁定 |
| html:radio / checkbox / multibox | <input type="radio/checkbox"> | 多選用 multibox |
| html:submit / button / reset / cancel | <input type="submit/button/reset"> | cancel 會繞過驗證 |
| html:errors / html:messages | -- | 顯示 ActionErrors/ActionMessages |
| html:link / html:rewrite | <a> / URL | 支援 forward、參數編碼 |
| html:javascript | <script> | 依 Validator 規則產生前端驗證腳本 |
property="*" 風險)。<html:text property="address.zip"/> 可直接存取 form.getAddress().getZip()。dispatch 或 DispatchAction 映射方法。validate() 做伺服器端驗證。