1.导入jar包。下载struts2.3文件,在apps解压一个struts2-blank.war的文件找到 struts-2.3.24\apps\struts2-blank\WEB-INF\lib这个路径下的所有jar包导入到项目中。
2.编写User.java文件。封装所有的表单数据 ,注意一定要实现serializable接口和get,set方法满足javabean规范
package com.lovo.bean;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
private int id;
private String name;
private String pwd;
private String gender;
private Date birthday;
private String tel;
private String plane;
private String email;
3.编写action类:FormAction。struts2会自动获取客户端的数据进行类型转换并封装到对象身上.
注意写的类必须继承actionsupport类。为对象提供get,set方法。因为使用的是xml的方式进行校验所以不用重写validate()。
package com.lovo.action;
import com.lovo.bean.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class FormAction extends ActionSupport {
private User user;
//这个字段只针对验证使用,所以不要封装到对象中
private String repassword;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getRepassword() {
return repassword;
}
public void setRepassword(String repassword) {
this.repassword = repassword;
}
public String login() throws Exception {
System.out.println("进入登录action");
}
public String execute() throws Exception {
System.out.println("进入默认action");
return super.execute();
}
public String regist() throws Exception {
System.out.println("进入注册action");
//返回的字符串是"success",在xml配置的时候用指定name属性
return super.execute();
}
}
4.编写配置文件:
为web.xml添加sturts2的过滤器
struts.xml文件。存放到src目录下。这个路径可以修改,修改后要修改web.xml的配置。
这是web.xml的配置信息
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>struts</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
这个是struts.xml的配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<!--打开开发模式 -->
<constant name="struts.devMode" value="true" />
<!--关闭浏览器缓存 -->
<constant name="browserCache" value="false" />
<!--设置修改配置文件后不用重启服务器就生效 -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 必须继承struts-default包 ,包内元素会区分顺序,编写时注意查看-->
<package name="default" namespace="/" extends="struts-default">
<action name="regist" class="com.lovo.action.FormAction" method="regist">
<!--input是当检验不过会返回到的逻辑视图,会打印错误信息-->
<result name="input">/regist.jsp</result>
<result>/login.jsp</result>
</action>
<action name="login" class="com.lovo.action.FormAction" method="login">
<result name="input">/login.jsp</result>
<result>index.jsp</result>
</action>
</package>
</struts>
- 编写校验文件:格式为 action类名-要校验action名-validation。FormAction-login-validation.xml,FormAction-regist-validation.xml 这是针对指定方法的校验,如果配置为FormAction-validation.xml会对这个action类里的所有方法进行校验产生不必要的麻烦。
注意:xwork-validator-1.0.3.dtd必须和你当前的struts版本相对应
FormAction-regist-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="user.name">
<!--短路校验只显示一个提示信息 -->
<field-validator type="requiredstring" short-circuit="true">
<param name="trim">true</param>
<message key="请输入姓名" />
</field-validator>
<field-validator type="regex">
<param name="regexExpression"><![CDATA[(\w{5,17}$)]]></param>
<!--message键可以指定key属性输出错误信息,也可以通过值的方式输出-->
<message key="用户只能是字母和数字,长度必须在5到17之间" />
</field-validator>
</field>
<field name="user.pwd">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>请输入密码</message>
</field-validator>
<!--在高版本中使用正则表达式 param name的值要改为regexExpression-->
<field-validator type="regex">
<param name="regexExpression"><![CDATA[(\w{5,17}$)]]></param>
<message>用户名只能是字母和数字,长度必须在5到17之间</message>
</field-validator>
</field>
<field name="user.tel">
<field-validator type="regex">
<param name="trim">true</param>
<param name="regexExpression"><![CDATA[(\d{11})]]></param>
<message>电话号码必须为11位数字!</message>
</field-validator>
</field>
<field name="user.plane">
<field-validator type="regex">
<param name="regexExpression"><![CDATA[(\d{3}-\d{8}|\d{4}-d{7})]]></param>
<message>座机号码必须以区号开头</message>
</field-validator>
</field>
<!--在低版本的火狐中可能会出现date类型的值设置不进去的问题,升级火狐可解决-->
<field name="user.birthday">
<field-validator type="date">
<param name="min">1900-01-01</param>
<param name="max">2010-12-31</param>
<message>出生日期必须在${min}到${max}之间</message>
</field-validator>
</field>
<field name="user.email">
<!-- type值为校验器名,requiredstring:非空字符串校验器 -->
<field-validator type="requiredstring">
<message>邮箱不能为空</message>
</field-validator>
<!-- email:校验邮箱格式 这是struts自带的邮箱校验器-->
<field-validator type="email">
<message>邮箱格式不正确</message>
</field-validator>
</field>
</validators>
FormAction-login-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="user.name">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message key="请输入用户名" />
</field-validator>
<field-validator type="regex">
<param name="regexExpression"><![CDATA[(\W{6,12})]]></param>
<message>用户只能是字母和数字,长度必须在6到12之间</message>
</field-validator>
</field>
<field name="user.pwd">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>请输入密码</message>
</field-validator>
<field-validator type="regex">
<param name="regexExpression"><![CDATA[(\W{6,12})]]></param>
<message>用户名只能是字母和数字,长度必须在6到12之间</message>
</field-validator>
</field>
<field name="repassword">
<field-validator type="regex">
<!-- 表达式要写在 <![CDATA[]]> 内 -->
<param name="regexExpression"><![CDATA[repassword==password]]></param>
<message>两次密码不一至</message>
</field-validator>
</field>
</validators>
6.编写login.jsp和regist.jsp
因为使用taglib标签会产生大量的table,tr标签不方便进行样式设计
所以页面使用html编写
register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>欢迎来到注册页面</title>
</head>
<body>
<form action="regist.action" method="post">
<p>
姓名:<input type="text" name="user.name">
<!-- 用于输出指定字段的错误信息 -->
<s:fielderror fieldName="user.name" />
</p>
<p>
密码:<input type="password" name="user.pwd">
<s:fielderror fieldName="user.pwd" />
</p>
<p>
生日:<input type="text" name="user.birthday">
<s:fielderror fieldName="user.birthday" />
</p>
<p>
电话:<input type="text" name="user.tel">
<s:fielderror fieldName="user.tel" />
</p>
<p>
座机:<input type="text" name="user.plane">
<s:fielderror fieldName="user.plane" />
</p>
<p>
性别: <input type="radio" name="user.gender" value="G" />男 <input
type="radio" name="user.gender" value="M" />女
</p>
<p>
邮箱: <input type="text" name="user.email">
<s:fielderror fieldName="user.email" />
</p>
<br />
<input type="submit" value="注册">
</form>
</body>
</html>
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>欢迎来到登录页面</title>
</head>
<body>
<form action="login.action" method="post">
<p>
用户名: <input type="text" name="user.name" />
<s:fielderror fieldName="user.name" />
</p>
<p>
密码: <input type="password" name="user.pwd" />
<s:fielderror fieldName="user.pwd" />
</p>
<p>
请重复密码: <input type="password" name="repassword" />
<s:fielderror fieldName="repassword" />
</p>
<br /> <input type="submit" value="登录" />
</form>
</body>
</html>
打完收工。