解析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对应的哪一个bean
path—ActionSerlvet将用户的请求转发与之同名的Action,同名的意思是将请求 的".do"后缀去掉。匹配Action的path属性值
scope—请求范围,有两种:request,session
type —指定对应的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
评论