解析StrutsLoginDemo中的Form, Action And JSP 在StrutsLoginDemo中,我们New→Form, Action And JSP后生成了以下文件: JSP: WebRoot/ userLogin.jsp Form: src/com.yourcompany.struts.form/UserLoginForm.java Action:src/com.yourcompany.struts.action/UserLoginAction.java 以下解析他们之间的组织关系: 一.Struts配置文件Struts-config.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> <struts-config> <data-sources /> <form-beans > <form-bean name="userLoginForm" type="com.yourcompany.struts.form.UserLoginForm" /> </form-beans> <global-exceptions /> <global-forwards /> <action-mappings > <action attribute="userLoginForm" input="/userLogin.jsp" name="userLoginForm" path="/userLogin" scope="request" type="com.yourcompany.struts.action.UserLoginAction"> <forward name="success" path="/userLoginSuccess.jsp" /> <forward name="failure" path="/userLogin.jsp" /> </action> </action-mappings> <message-resources parameter="com.yourcompany.struts.ApplicationResources" /> </struts-config> 解析: 这个文件指明了Form, Action And JSP三位一体的逻辑关联和组织方法。 1.<form-beans >配置ActionForm,至少必须指定两项: name:该项用于标识ActionForm的Id,以便于传递给Action进行使用 type:ActionForm的实现类 2.<action>配置Action,参数说明: attribute—该action的归属 input—action对应的请求页面name—和bean标签的name对应,是这个action对应的哪一个beanpath—ActionSerlvet将用户的请求转发与之同名的Action,同名的意思是将请求 的".do"后缀去掉。匹配Action的path属性值 scope—请求范围,有两种:request,sessiontype —指定对应的action类 forward—将Action的转发映射到实际的jsp页面,在实际编程时应该用逻辑名进行转发 一个Action可以有ActionForm,也可以没有ActionForm。如果是post提交的一般会有ActionForm。比如:<form id="frm1" action="loginAction.do">,如果是通过get提交则不会有ActionForm,但是Action总是会有的,因为要处理业务逻辑。比如:<a href="shopAddAction.do"> 二.JSP网页文件userLogin.jsp <%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%> <html> <head> <title>JSP for UserLoginForm form</title> </head> <body> <html:form action="/userLogin"> userName : <html:text property="userName"/><html:errors property="userName"/><br/> password : <html:password property="password"/><html:errors property="password"/><br/> <html:submit/><html:cancel/> </html:form> </body> </html> 解析: 1.<html:form action="/userLogin">action 与上面的path对应就唯一确定了actionform。 2.userName : <html:text property="userName"/>和 password : <html:password property="password"/> 分别定义了登录界面userLogin.jsp中的用户text控件及其property、密码password控件及其property。 三.ActionForm类实现UserLoginForm.java package com.yourcompany.struts.form; import org.apache.struts.action.ActionForm; public class UserLoginForm extends ActionForm { /** userName property */ private String userName; /** password property */ private String password; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } 解析: 这个类主要定义了两个String类型的变量userName和password(userLogin.jsp中的两个 property),并定义了其存取方法(get\set),我们可以类比MFC中的DDX/DDV控件数据校 验机制。 四.Action类实现UserLoginAction.java package com.yourcompany.struts.action; import javax.servlet.http.HttpServletRequest; public class UserLoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { UserLoginForm userLoginForm = (UserLoginForm) form;// TODO Auto-generated method stub if (userLoginForm.getUserName().equals("fan") && userLoginForm.getPassword().equals("20080808")) { request.setAttribute("userName", userLoginForm.getUserName()); return mapping.findForward("success"); } else { return mapping.findForward("failure"); } } } 解析: 这个类中主要定义了execute方法对数据进行处理。 首先定义类UserLoginForm的实例userLoginForm,然后通过调用其get\set方法来提取数据,并根据数据作出相应处理。 参考: http://www.blogjava.net/happy-java3000/articles/41710.html http://dev.csdn.net/author/baggio785/ae23a10757e44fd2acd2ebf8cb44ecd8.html http://java.chinaitlab.com/Struts/521869_3.html

评论