本文演示如何在 JBuilder 2005 中將原始登錄模塊(User Bean + switch.jsp)重構為標準 Struts 架構:UserActionForm 封裝表單數據並支援 reset(),LoginAction 承擔業務驗證與多出口轉發,login.jsp 直接提交至 Action,實現清晰分層。
ActionForm 比普通 Bean 強大:支援 validate() 自動校驗、reset() 重置屬性、自動填充請求參數。
File → New → Web → ActionForm,類名 UserActionForm,配置文件 struts-config.xmluserId、password、userName、loginDatetimeCreate/replace reset() method body(因放入 session 需重置),無需 validate()
圖 6 創建 UserActionForm
圖 7 定義 ActionForm 屬性
圖 8 附加功能定義
public class UserActionForm extends ActionForm {
private String userId, password, userName, loginDatetime;
// getter/setter 省略
public void reset(ActionMapping mapping, HttpServletRequest request) {
this.userId = this.userName = this.password = this.loginDatetime = null;
}
}
JBuilder 自動在 struts-config.xml 生成 <form-bean> 配置。
向導創建 LoginAction,基類選 org.apache.struts.action.Action(標準 Action):
圖 9 指定 Web 模塊及 Action 名字
/loginAction(訪問 URL 為 /webModule/loginAction.do)userActionForm(自動填充並傳給 execute)request(驗證通過後手動綁定 session,觸發 valueBound() 記錄日志)validate())
圖 10 設置 LoginAction 配置信息
完成後 Struts Config Editor 可視化展示流程:
圖 11 Struts Config Editor 登錄流程
<form name="form1" method="post" action="/webModule/loginAction.do">
用戶名:<select name="userId">...</select>
密碼:<input name="password" type="password">
<input type="submit" value="登錄">
</form>
關鍵點:
/webModule/loginAction.do(部署路徑 + Action path + .do 後綴)<html:form> 標籤則無需手寫部署路徑,框架自動解析*.do 路徑匹配攔截請求,務必加 .do 後綴public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
UserActionForm uaf = (UserActionForm) form;
// 1. 業務驗證:查詢數據庫、比對密碼
// 2. 失敗 → return mapping.findForward("fail") // 需在配置文件定義 forward
// 3. 成功 → 手動綁定 session:request.getSession().setAttribute("user", uaf);
// return mapping.findForward("welcome");
}
後續可在 Struts Config Editor 為 /loginAction 添加 fail、welcome、error 三個前向,分別指向 fail.jsp、welcome.jsp、error.jsp。
| 指標 | switch.jsp 時代 | Struts 重構後 |
|---|---|---|
| 分層 | 視圖+業務混雜 | ActionForm(Action) + Action(Controller) + JSP(View) |
| 數據封裝 | <jsp:useBean> 手動 | 框架自動填充 ActionForm |
| 頁面跳轉 | 硬編碼 <jsp:forward> | ActionForward 邏輯名稱 + 配置文件 |
| 可測試性 | 極難單元測試 | Action 可獨立測試 |
| 擴展性 | 修改 JSP 影響業務 | 新增 Action/Forward 僅改配置 |
此重構確立了標準 Struts 開發模式,為後續模塊開發奠定基礎。