User)+ 業務邏輯 Bean(UserBean)ActionServlet(框架提供)+ struts-config.xml 映射請求到 Actionpublic class User implements Serializable {
private String userName, passWord;
// getter/setter 省略
}
public class UserForm extends ActionForm {
private User user = new User();
public User getUser() { return user; }
public void setUser(User user) { this.user = user; }
// 直接代理 User 屬性
public String getUserName() { return user.getUserName(); }
public String getPassWord() { return user.getPassWord(); }
@Override public void reset(ActionMapping m, HttpServletRequest r) { user = new User(); }
@Override public ActionErrors validate(ActionMapping m, HttpServletRequest r) {
ActionErrors errors = new ActionErrors();
if (user.getUserName() == null || user.getPassWord() == null) {
errors.add("error", new ActionMessage("error.user.passWord"));
}
return errors;
}
}
public class UserAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res) throws Exception {
UserForm uf = (UserForm) form;
try {
new UserBean().addUser(uf.getUser());
} catch (Exception e) { e.printStackTrace(); }
req.setAttribute("user", uf.getUser());
return mapping.findForward("userCreated");
}
}
public class UserBean {
private Connection conn = DatabaseConn.getConnection(); // 需自行實現連接池
public void addUser(User u) throws SQLException {
Statement s = conn.createStatement();
s.executeUpdate("INSERT INTO User VALUES('" + u.getUserName() + "','" + u.getPassWord() + "')");
}
}
register.jsp:表單提交到 /register.do;viewUser.jsp:<%= ((User)request.getAttribute("user")).getUserName() %> 顯示結果。
<form-bean name="userForm" type="com.example.UserForm"/>
<action path="/register" type="com.example.UserAction"
name="userForm" scope="request" validate="true" input="/register.jsp">
<forward name="userCreated" path="/viewUser.jsp"/>
</action>
Struts 如「填空題」:框架處理請求分發、表單填充、驗證、國際化、標籤庫等基礎設施,開發者只需實現 Action、Form、JavaBean、JSP 等業務「空白」。結構清晰、分工明確、易於維護擴展。