Struts 2 以 WebWork 為核心,提供更強大的 MVC 框架。本文演示在 IBM Rational Software Architect 7 (RSA) 與 WebSphere Application Server 6.1 (WAS) 平台上,從環境搭建到功能實現的完整開發流程。


下載 struts-2.1.6-lib.zip,拷貝核心 Jar 至 WEB-INF/lib。示例僅含基礎包,複雜功能需補充相應 Jar。

Struts 2.1.6 使用 StrutsPrepareAndExecuteFilter:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
早期版本 (2.1.3-) 用 FilterDispatcher。Taglib 已內置於 struts-core.jar,無需額外配置。

必須設置 com.ibm.ws.webcontainer.invokefilterscompatibility=true,否則 Action 不生效。通過 WAS 管理控制台配置。

兩頁面:userList.jsp 列表、user.jsp 新增/編輯。提交驗證通過返回列表,失敗回顯錯誤。


public class BaseAction extends ActionSupport
implements SessionAware, ServletRequestAware, ServletResponseAware {
// 提供 sessionMap、request、response 獲取器,子類直接可用
}
單一 UserAction 含 execute()、createOrEditUser()、submitUser()、deleteUser() 對應不同表單。

主配置引用 struts-user.xml,命名空間 /admin。chain 結果類型實現 Action 鏈調用(如提交成功鏈向 showUserList)。
<action name="submitUser" class="sample.action.UserAction" method="submitUser">
<result name="input">/WEB-INF/page/user.jsp</result>
<result name="userList" type="chain">showUserList</result>
</action>
struts.properties 設置 struts.ui.theme=simple 禁用默認表格佈局,完全掌控 HTML。表單字段 name="user.userName" 自動映射到 Action 的 user 屬性(需空構造器 + Getter/Setter)。

UserAction-submitUser-validation.xml,針對 user.userName 做必填、長度驗證;user.email 做格式驗證。錯誤鍵支援國際化。validateSubmitUser() 方法自動攔截,邏輯如密碼長度 < 6 則 addFieldError。struts.custom.i18n.resources 指定資源文件,Action 用 getText(),JSP 用 %{getText('key')} 或 <s2:text>。error.jsp,頁面用 <s2:property value="%{exception.message}" /> 顯示詳情。亦支持 Action 級單獨配置。掌握 Struts 2 需深入標簽庫、OGNL 表達式、攔截器機制、IOC 容器等進階特性。本示例源碼附後,供進一步研究。