基礎範例
login.jsp:<s:form action="login"> 包含 username、password 欄位。
struts.xml:<action name="login" class="...LoginAction"> 映射 success→welcome.jsp、input→login.jsp。
LoginAction:含 username、password 屬性、execute()、validate()。
welcome.jsp:<s:property value="username"/> 顯示結果。
控制台輸出流程
******setPassword****** // 1. 自動設定 password
*****setUsername()***** // 2. 自動設定 username
******validate****** // 3. 自動執行驗證
*****execute()***** // 4. 自動執行業務邏輯
******getUsername()***** // 5. 返回值導向 success,渲染頁面讀取 username
******getPassword()***** // 6. 渲染頁面讀取 password
生命週期詳細說明
- 請求提交:瀏覽器 POST 表單至
action="login"。
- Action 映射:
struts.xml 匹配 name="login",實例化 LoginAction。
- 屬性自動注入:Struts2 依名稱匹配自動呼叫 setter(
setUsername、setPassword)。
- 驗證攔截:
validate() 執行,若有錯誤 addFieldError,返回 INPUT 結果,導回 login.jsp 顯示 <s:fielderror/>。
- 業務執行:驗證通過呼叫
execute(),返回 SUCCESS(預設)。
- 結果導向:根據返回字串匹配
<result name="success">/welcome.jsp</result>。
- 視圖渲染:JSP 以 OGNL 取得 Action 屬性值顯示。
關鍵點
validate() 在 execute() 之前自動執行,屬於攔截器鏈一部分。
- 返回字串對應
struts.xml 中 <result> 的 name 屬性。
- 結果路徑以
/ 開頭表示相對於 Web 應用根目錄的絕對路徑。