一、配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
二、配置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>
<form-beans>
<form-bean name="loginForm" type="com.struts.form.LoginForm"/>
</form-beans>
<global-forwards>
<forward name="error" path="/Error.jsp" />
</global-forwards>
<action-mappings>
<action attribute="loginForm"
path="/login"
type="com.struts.action.LoginAction"
name="loginForm"
scope="request"
validate="true"
input="/index.jsp">
<forward name="success" path="/LoginSuccess.jsp" />
<forward name="failure" path="/LoginFailure.jsp" />
</action>
</action-mappings>
<message-resources parameter="ApplicationResources" />
<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>
三、LoginAction.java
package com.struts.action;
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;
import com.struts.form.LoginForm;
public class LoginAction extends Action{
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// 继承父类(父类会将表单提交的值放在form中传递过来),调用LoginForm来存放表单传送过来的值(即将form强转为LoginFrom )
LoginForm loginForm=(LoginForm)form;
// 从LogginForm中将值取出来业务逻辑处理
String returnURLKeyWord="";
if(loginForm.getName().equals("dd")){
returnURLKeyWord="success";
}else{
returnURLKeyWord="failure";
}
System.out.println(returnURLKeyWord);
// 通过使用struts-config.xml配置的父类(先带着跳转方式跳转到ActionServlet再由ActionServlet选择跳转页面 )实现跳转
return mapping.findForward(returnURLKeyWord);
}
}
四、LoginForm.java
package com.struts.form;
import org.apache.struts.action.ActionForm;
public class LoginForm extends ActionForm{
private String name;
private String ps;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPs() {
return ps;
}
public void setPs(String ps) {
this.ps = ps;
}
/*@Override
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors=new ActionErrors();
if(name==null||name.trim().length()<=0){
errors.add("name", new ActionMessage("errors.required","123"));
}
return errors;
}*/
}
五、validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
<global>
<validator name="equalsCheck"
classname="struts.EqualsChecks"
method="equalsChecks"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionMessages,
org.apache.commons.validator.Validator,
javax.servlet.http.HttpServletRequest"
msg="errors.equalsCheck"/>
</global>
<formset>
<form name="loginForm">
<field property="name" depends="required">
<arg key="LoginForm.name"/>
</field>
<field property="ps" depends="required">
<arg key="LoginForm.ps"/>
</field>
</form>
</formset>
</form-validation>
六、ApplicationResources.properties
errors.required={0}required.
七、index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
<html>
<head>
<base href="<%=basePath%>">
<title>首页</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<!-- request.getContextPath():工程上下文,login.do中login是从struts-config.xml下action中的path中拷贝过来的 -->
<!-- form表单提交给login.do,进入前端控制器ActionServlet(web.xml:*.do)然后再转入后端控制器LoginAction(struts-config.xml:login) -->
<html:form action="/login">
<!-- 各表单控件的name属性必须和提交后的Form中的属性名一至,否则会出现空指针异常 -->
username:<html:text property="name"/><html:errors property="name"/><br>
password:<html:text property="ps"/><html:errors property="ps"/><br>
<html:submit/><html:cancel/>
</html:form>
</body>
</html>
- 因为是strut1.2版本,所以对应的DTD应该是1.0.2,在validation.xml和validation-rules.xml里面都是用的是1.1.3,所以使用这种方式的表单验证没效果。不知道怎么解决,换了1.0.2应该还要改文件中节点等信息吧....
- 因为我使用LoginForm继承的是ActionForm才这么写,如果使用的是DyanActionForm则不需要创建这个frombean文件,直接在struts-config.xml里面声明就可以。表单验证的话也只好是通过validation.xml文件方式来,自然是使用不了重写Validate()方法了...
- 而对于LoginAction继承的类(Action/DispatchAcion/LookUpDispatchAcion/MappingDispatchAction/ForwardAction/IncludeAcion)在struct-config.xml里面配置也有一些差异了,比如parameter="method" 或者是parameter="add"又或者parameter="/list.jsp"....