最近刚开始学struts,打算把学习进程和自己的一些心得记下来,一方面激励自己每天都要收获一点点,另一方面还请各位高手多多指点,不管是技术上的还是方法上的。
我也使从最简单也是最经典的东西做起的,简单用户登陆,个人觉得这个例子最有代表性了。
一:建两个jsp文件,用于页面的显示
login.jsp(登陆页面)
---------------------
<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-nested" prefix="nested" %>
<html:html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<title></title>
</head>
<body>
<html:form method="POST" action="loginAction.do">
<html:text property="name"></html:text>
<html:password property="password"></html:password>
<html:submit></html:submit>
</html:form>
</body>
</html:html>
这个页面完成用户表单填写,并提交用户信息。
注意这里的表单元素text和password的property属性必须同Form类中的属性名字一样,因为在表单提交之后,Struts按照表单元素的内容,自动给Form类中的相应字段一一赋值。
index.jsp(登陆成功之后显示页面)
------------------------------
<%@page pageEncoding="GBK" contentType="text/html; charset=GBK" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<title></title>
</head>
<body>
Succ!
</body>
</html>
这个页面中只简单的显示登陆成功的信息。
二:编写LoginActionForm类
package test;
import org.apache.struts.action.ActionForm;
public class LoginActionForm extends ActionForm {
String name;
String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
此类中应注意的是其name和password属性必须和Login.jsp文件中的一样。
三:编写LoginAction类
package test;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class LoginAction extends Action {
public ActionForward execute(ActionMapping arg0, ActionForm arg1, HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
LoginActionForm loginActionForm=(LoginActionForm)arg1;
String name=loginActionForm.getName();
String password=loginActionForm.getPassword();
if(name.equals(password))
return(arg0.findForward("succ"));
else
return(arg0.findForward("fail"));
}
}
此类是struts中最重要的类,主要完成业务逻辑的处理。在这里进行了简单的判断,如果符合用户名和密码相等这一条件,即转向登陆成功页面,否则转向登陆失败页面
四:配置struts-config.xml文件
<?xml version="1.0"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources>
</data-sources>
<form-beans>
<form-bean name="loginActionForm" type="test.LoginActionForm"></form-bean>
</form-beans>
<global-exceptions>
</global-exceptions>
<global-forwards>
</global-forwards>
<action-mappings>
<action path="/loginAction" name="loginActionForm" type="test.LoginAction">
<forward name="succ" path="/index.jsp"></forward>
<forward name="fail" path="/login.jsp"></forward>
</action>
</action-mappings>
<controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>
<message-resources parameter="MessageResources"/>
<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml"/>
<set-property property="moduleAware" value="true"/>
</plug-in>
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
</struts-config>
在这个文件中,需要填写的配置为
1:
<form-beans>
<form-bean name="loginActionForm" type="test.LoginActionForm"></form-bean>
</form-beans>
这个表单bean完成将用户提交的表单内容按照各个元素给bean的属性赋值
2:
<action-mappings>
<action path="/loginAction" name="loginActionForm" type="test.LoginAction">
<forward name="succ" path="/index.jsp"></forward>
<forward name="fail" path="/login.jsp"></forward>
</action>
</action-mappings>
这里的action标签中path属性被用于同action的请求相匹配。
在login.jsp中,action="loginAction.do",则与之匹配的Action就是loginAction
name属性表明调用的ActionForm类,在这里当然就是表单bean
forward标签说明了转向的匹配,在loginAction中
if(name.equals(password))
return(arg0.findForward("succ"));
else
return(arg0.findForward("fail"));
其中的"succ","fail"就对应于forword的name属性,而path属性则指明了转向页面存放的路径。
这样,第一个struts程序就完成了,当登陆时,输入用户名和密码相同,显示Succ!提示信息,否则,返回原登陆页面。
以上主要写了一些我在做的时候注意到的一些问题,也可能是初学者最容易犯的一些错误。
END!