Struts 2.0 整合 Hibernate 3.2 开发注册登录系统
开发工具:MyEclipse 6.0 ,Tomcat 5.5 ,JDK 1.5 ,MySQL 5.0 ;开发准备:下载Struts 2.0和Hibernate 3.2,大家可Struts和Hibernate的官方网站下载这两个框架。我们先来总览一下开发完成后的包—类图:
首先NEW一个Web Project ,名为"LoginSystem" ,在 lib 目录下加入Struts 2.0的Jar包和Hibernate 3.2的Jar包,然后按下面的步骤来:
1、在 src 目录下建 "hibernate.cfg.xml" 全部代码如下:
1
<?
xml version='1.0' encoding='UTF-8'
?>
2
<!
DOCTYPE hibernate-configuration PUBLIC
3
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
4
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"
>
5![]()
6
<!--
Generated by MyEclipse Hibernate Tools.
-->
7
<
hibernate-configuration
>
8
<
session-factory
>
9
<
property
name
="connection.username"
>
root
</
property
>
10
<
property
name
="connection.url"
>
11
jdbc:mysql://localhost:3306/LoginSystem
12
</
property
>
13
<
property
name
="dialect"
>
14
org.hibernate.dialect.MySQLDialect
15
</
property
>
16
<
property
name
="myeclipse.connection.profile"
>
17
LoginSystem
18
</
property
>
19
<
property
name
="connection.password"
>
root
</
property
>
20
<
property
name
="connection.driver_class"
>
21
com.mysql.jdbc.Driver
22
</
property
>
23
<
property
name
="show_sql"
>
true
</
property
>
24
<!--
POJO类映射配置
-->
25
<
mapping
resource
="com/rong/ORM/User.hbm.xml"
/>
26
</
session-factory
>
27
</
hibernate-configuration
>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2、建立实体类 "User.java" 及其映射文件 "User.hbm.xml" 两者都放在 "com.rong.ORM" 包下。其中"User.java"的代码如下:
1
package
com.rong.ORM;
2![]()
3![]()
public
class
User
{
4
5
private int id; //主键ID
6
private String name; //用户名
7
private String pwd; //密码
8![]()
9![]()
/**//*
10
* Getter方法与Setter方法
11
*/
12![]()
public String getName()
{
13
return name;
14
}
15![]()
public void setName(String name)
{
16
this.name = name;
17
}
18![]()
public String getPwd()
{
19
return pwd;
20
}
21![]()
public void setPwd(String pwd)
{
22
this.pwd = pwd;
23
}
24![]()
public int getId()
{
25
return id;
26
}
27![]()
public void setId(int id)
{
28
this.id = id;
29
}
30
}
2
3

4
5
6
7
8
9
10
11
12

13
14
15

16
17
18

19
20
21

22
23
24

25
26
27

28
29
30
User.hbm.xml的代码如下:
1
<?
xml version="1.0" encoding="utf-8"
?>
2
<!
DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
3
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
4![]()
5
<
hibernate-mapping
>
6
<
class
name
="com.rong.ORM.User"
table
="tb_user"
>
7
<
id
name
="id"
>
8
<
generator
class
="native"
/>
9
</
id
>
10
<
property
name
="name"
type
="java.lang.String"
length
="20"
/>
11
<
property
name
="pwd"
type
="java.lang.String"
length
="20"
/>
12
</
class
>
13
</
hibernate-mapping
>
2
3
4
5
6
7
8
9
10
11
12
13
3、建立"ExportDB.java"工具类,我们执行如下代码,就能轻松将User类导入数据库转变成数据库中的表。不过,前提是我们已经在MySQL中建立了一个名为"LoginSystem"的数据库。
1
package
tool;
2![]()
3
import
org.hibernate.cfg.Configuration;
4
import
org.hibernate.tool.hbm2ddl.SchemaExport;
5![]()
6![]()
public
class
ExportDB
{
7
8![]()
/**//*
9
* 运行此类,通过POJO类和配置文件,生成数据库的表
10
*/
11![]()
public static void main(String[] args)
{
12
Configuration cfg = new Configuration().configure();
13
SchemaExport export = new SchemaExport(cfg);
14
export.create(true, true);
15
}
16
}
17
2
3
4
5
6

7
8
9
10
11

12
13
14
15
16
17
4、建立获取SessionFactory和管理Session的HibernateUtil.java类:
1
package
com.rong.hibernate;
2![]()
3
import
org.hibernate.HibernateException;
4
import
org.hibernate.Session;
5
import
org.hibernate.SessionFactory;
6
import
org.hibernate.cfg.Configuration;
7![]()
8![]()
public
class
HibernateUtil
{
9
10
//声明Hibernate配置文件所在的路径
11
private static String configFile = "/hibernate.cfg.xml";
12
//建Configuration对象
13
private static Configuration configuration = new Configuration();
14
//建Session工厂对象
15
private static SessionFactory sessionFactory = null;
16
17![]()
/** *//**
18
* 单例模式,只初始化一次,只产生一个SessionFactory对象(线程安全)
19
*/
20![]()
static
{
21![]()
try
{
22
//通过hibernate.cfg.xml配置数据库连接
23
configuration.configure(configFile);
24
//建立一个Session工厂
25
sessionFactory = configuration.buildSessionFactory();
26
System.out.println("[标记]初始化SessionFactory");
27![]()
}catch(Exception e)
{
28
System.out.println("[异常]创建SessionFactory时发生异常,异常原因如下:");
29
e.printStackTrace();
30
}
31
}
32
33![]()
/** *//**
34
* getSession()方法
35
* @return Session对象
36
* @throws HibernateException
37
*/
38![]()
public Session getSession()
{
39
Session session = null;
40![]()
try
{
41
session = sessionFactory.openSession();
42![]()
}catch(Exception e)
{
43
System.out.println("[异常]开启Session时发生异常,异常原因如下:");
44
e.printStackTrace();
45
}
46
return session;
47
}
48
49![]()
/** *//**
50
* closeSession()方法
51
* @param session 要关闭的Session对象
52
*/
53![]()
public void closeSession(Session session)
{
54![]()
try
{
55
if(null != session)
56
session.close();
57![]()
}catch(Exception e)
{
58
System.out.println("[异常]关闭Session时发生异常,异常原因如下:");
59
e.printStackTrace();
60
}
61
}
62
63
64
66
}
67
2
3
4
5
6
7
8

9
10
11
12
13
14
15
16
17
18
19
20

21

22
23
24
25
26
27

28
29
30
31
32
33
34
35
36
37
38

39
40

41
42

43
44
45
46
47
48
49
50
51
52
53

54

55
56
57

58
59
60
61
62
63
64
66
67
5、DAO层设计:在"com.rong.DAO" 包下建立两个类,一个是接口,一个是实现类,其中UserDao.java代码如下:
1
package
com.rong.DAO;
2![]()
3
import
java.util.List;
4
import
com.rong.ORM.User;
5![]()
6![]()
public
interface
UserDao
{
7
8![]()
/** *//**
9
* 增加用户
10
* @param user 要增加的用户
11
*/
12
public void add(User user);
13
14![]()
/** *//**
15
* 登录验证
16
* @param name
17
* @param password
18
* @return -1:不存在用户名 ; -2:密码不正确 ; >0:登录成功(即返回该记录ID)
19
*/
20
public int isExist(String name,String password);
21
}
2
3
4
5
6

7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
UserDaoImpl.java的代码如下:
1
package
com.rong.DAO;
2![]()
3
import
java.util.Iterator;
4
import
java.util.List;
5
import
org.hibernate.Query;
6
import
org.hibernate.Session;
7
import
org.hibernate.Transaction;
8
import
com.rong.ORM.User;
9
import
com.rong.hibernate.HibernateUtil;
10![]()
11![]()
public
class
UserDaoImpl
implements
UserDao
{
12![]()
13
HibernateUtil util = new HibernateUtil();
14
15![]()
/** *//**
16
* 增加用户
17
* @param user 要增加的用户
18
*/
19![]()
public void add(User user)
{
20
Session session = util.getSession();
21
Transaction ts = null;
22![]()
try
{
23
ts = session.beginTransaction();
24
session.save(user);
25
ts.commit();
26![]()
}catch(Exception e)
{
27
System.out.println("UserDaoImpl.add()方法发生异常:");
28
e.printStackTrace();
29![]()
}finally
{
30
util.closeSession(session);
31
}
32
}
33
34![]()
/** *//**
35
* 登录验证
36
* @param name
37
* @param password
38
* @return -1:不存在用户名 ; -2:密码不正确 ; >0:登录成功(即返回该记录ID)
39
*/
40![]()
public int isExist(String name,String password)
{
41
//int state = 0 ; //初始化状态变量
42
Session session = util.getSession();
43![]()
try
{
44
Query query = session.createQuery("from User u where u.name = ?");
45
query.setString(0, name);
46
List list = query.list();
47![]()
if(null == list || 0 == list.size())
{
48
return -1 ; //用户名不存在
49
}
50
Query query2 = session.createQuery("from User u where u.name = ? and u.pwd = ?");
51
query2.setString(0, name);
52
query2.setString(1, password);
53
List list2 = query.list();
54![]()
if(null == list2)
{
55
return -2 ; //密码不正确
56
}
57
Iterator it = list.iterator();
58
User user = (User)it.next();
59
return user.getId(); //验证成功,取ID值
60
61![]()
}catch(Exception e)
{
62
System.out.println("UserDaoImpl.isExist()方法发生异常:");
63
e.printStackTrace();
64
return 0; //异常时返回0
65![]()
}finally
{
66
util.closeSession(session);
67
}
68
}
69
}
70
2
3
4
5
6
7
8
9
10
11

12
13
14
15
16
17
18
19

20
21
22

23
24
25
26

27
28
29

30
31
32
33
34
35
36
37
38
39
40

41
42
43

44
45
46
47

48
49
50
51
52
53
54

55
56
57
58
59
60
61

62
63
64
65

66
67
68
69
70
6、在web.xml中配置Struts 2.0支持:
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
<
web-app
version
="2.5"
xmlns
="http://java.sun.com/xml/ns/javaee"
3
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
4
xsi:schemaLocation
="http://java.sun.com/xml/ns/javaee
5
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
>
6![]()
7
<!--
用过滤器配置Struts2支持
-->
8
<
filter
>
9
<
filter-name
>
struts2
</
filter-name
>
10
<
filter-class
>
11
org.apache.struts2.dispatcher.FilterDispatcher
12
</
filter-class
>
13
</
filter
>
14
<
filter-mapping
>
15
<
filter-name
>
struts2
</
filter-name
>
16
<
url-pattern
>
/*
</
url-pattern
>
17
</
filter-mapping
>
18![]()
19
<
welcome-file-list
>
20
<
welcome-file
>
login.jsp
</
welcome-file
>
21
</
welcome-file-list
>
22
</
web-app
>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
7、登录页面login.jsp代码如下:
1
<%
@ page language="java" import="java.util.*" pageEncoding="gbk"
%>
2![]()
<%
@ taglib prefix="s" uri="/struts-tags"
%>
3
<!
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
>
4
<
html
>
5
<
head
>
6![]()
7
<
title
>
Login Page
</
title
>
8
</
head
>
9![]()
10
<
body
>
11
<
p
><
a
href
="register.jsp"
>
用户注册
</
a
>
|用户登录
</
p
>
12
<
s:form
action
="loginAction"
theme
="simple"
>
13
<
table
>
14
<
tr
>
15
<
td
style
="text-align:right"
>
16
账号
17
</
td
>
18
<
td
>
19
<
s:textfield
name
="name"
label
="账号"
/>
20![]()
21
</
td
>
22
</
tr
>
23
<
tr
>
24
<
td
style
="text-align:right"
>
25
密码
26
</
td
>
27
<
td
>
28
<
s:password
name
="pwd"
label
="密码"
/>
29
</
td
>
30
</
tr
>
31
<
tr
>
32
<
td
style
="text-align:right"
>
33
验证码
34
</
td
>
35
<
td
>
36
<
s:textfield
name
="inputCertCode"
label
="验证码"
cssStyle
="width:100px"
/>
37
<
img
src
="other/makeCertPic.jsp"
>
38
</
td
>
39
</
tr
>
40
<
tr
>
41
<
td
style
="text-align:right"
>
42
<
s:submit
value
="登录"
/>
43
</
td
>
44
<
td
style
="text-align:left"
>
45
<
s:reset
value
="取消"
/>
46
</
td
>
47
</
tr
>
48
</
table
>
49
</
s:form
>
50
<
s:fielderror
cssStyle
="color:red"
/>
51
</
body
>
52
</
html
>
53

2

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
注册页register.jsp代码如下:
1
<%
@ page language="java" import="java.util.*" pageEncoding="gbk"
%>
2![]()
<%
@ taglib prefix="s" uri="/struts-tags"
%>
3
<!
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
>
4
<
html
>
5
<
head
>
6![]()
7
<
title
>
Register Page
</
title
>
8
</
head
>
9![]()
10
<
body
>
11
<
p
><
a
href
="login.jsp"
>
用户登录
</
a
>
|用户注册
</
p
>
12
<
s:form
action
="registerAction"
theme
="simple"
>
13
<
table
>
14
<
tr
>
15
<
td
style
="text-align:right"
>
16
请输入账号
17
</
td
>
18
<
td
>
19
<
s:textfield
name
="user.name"
label
="账号"
/>
20![]()
21
</
td
>
22
</
tr
>
23
<
tr
>
24
<
td
style
="text-align:right"
>
25
请输入密码
26
</
td
>
27
<
td
>
28
<
s:password
name
="user.pwd"
label
="密码"
/>
29
</
td
>
30
</
tr
>
31
<
tr
>
32
<
td
style
="text-align:right"
>
33
请再次输入密码
34
</
td
>
35
<
td
>
36
<
s:password
name
="repwd"
label
="重复密码"
/>
37
</
td
>
38
</
tr
>
39
<
tr
>
40
<
td
style
="text-align:right"
>
41
请输入验证码
42
</
td
>
43
<
td
>
44
<
s:textfield
name
="inputCertCode"
label
="验证码"
cssStyle
="width:100px"
/>
45
<
img
src
="other/makeCertPic.jsp"
>
46
</
td
>
47
</
tr
>
48
<
tr
>
49
<
td
style
="text-align:right"
>
50
<
s:submit
value
="注册"
/>
51
</
td
>
52
<
td
style
="text-align:left"
>
53
<
s:reset
value
="取消"
/>
54
</
td
>
55
</
tr
>
56
</
table
>
57
</
s:form
>
58
<
s:fielderror
cssStyle
="color:red"
/>
59
</
body
>
60
</
html
>
61

2

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
8、在JSP页中所用到的验证码的生成页面makeCertPic.jsp(我们把它放在WebRoot的other目录下):
1
<%
@page contentType="image/jpeg" pageEncoding="gbk"
%>
2
<
jsp:useBean
id
="image"
scope
="page"
class
="com.rong.other.makeCertPic"
/>
3![]()
<%
4
String str = image.getCertPic(0,0,response.getOutputStream());
5
// 将验证码保存到Session中
6
session.setAttribute("certCode", str);
7
%>

2
3

4
5
6
7
其中,它调用了名为makeCertPic的Bean ,这个类主要用来生成彩色的验证图片,其代码如下:
1
package
com.rong.other;
2
import
java.awt.Color;
3
import
java.awt.Font;
4
import
java.awt.Graphics;
5
import
java.awt.image.BufferedImage;
6
import
java.io.IOException;
7
import
java.io.OutputStream;
8
import
java.util.Random;
9
import
javax.imageio.ImageIO;
10![]()
/** */
/**
11
* 生成验证码图片
12
*/
13![]()
public
class
makeCertPic
{
14
//验证码图片中可以出现的字符集,可根据需要修改
15![]()
private char mapTable[]=
{
16
'a','b','c','d','e','f',
17
'g','h','i','j','k','l',
18
'm','n','o','p','q','r',
19
's','t','u','v','w','x',
20
'y','z','0','1','2','3',
21
'4','5','6','7','8','9'};
22![]()
/** *//**
23
* 功能:生成彩色验证码图片
24
* 参数width为生成的图片的宽度,参数height为生成的图片的高度,参数os为页面的输出流
25
*/
26![]()
public String getCertPic(int width, int height, OutputStream os)
{
27
if(width<=0)width=60;
28
if(height<=0)height=20;
29
BufferedImage image = new BufferedImage(width, height,
30
BufferedImage.TYPE_INT_RGB);
31
// 获取图形上下文
32
Graphics g = image.getGraphics();
33
// 设定背景色
34
g.setColor(new Color(0xDCDCDC));
35
g.fillRect(0, 0, width, height);
36
//画边框
37
g.setColor(Color.black);
38
g.drawRect(0,0,width-1,height-1);
39
// 取随机产生的认证码
40
String strEnsure = "";
41
// 4代表4位验证码,如果要生成更多位的认证码,则加大数值
42![]()
for(int i=0; i<4; ++i)
{
43
strEnsure += mapTable[(int)(mapTable.length*Math.random())];
44
}
45
// 将认证码显示到图象中,如果要生成更多位的认证码,增加drawString语句
46
g.setColor(Color.black);
47
g.setFont(new Font("Atlantic Inline",Font.PLAIN,18));
48
String str = strEnsure.substring(0,1);
49
g.drawString(str,8,17);
50
str = strEnsure.substring(1,2);
51
g.drawString(str,20,15);
52
str = strEnsure.substring(2,3);
53
g.drawString(str,35,18);
54
str = strEnsure.substring(3,4);
55
g.drawString(str,45,15);
56
// 随机产生10个干扰点
57
Random rand = new Random();
58![]()
for (int i=0;i<10;i++)
{
59
int x = rand.nextInt(width);
60
int y = rand.nextInt(height);
61
g.drawOval(x,y,1,1);
62
}
63
// 释放图形上下文
64
g.dispose();
65![]()
try
{
66
// 输出图象到页面
67
ImageIO.write(image, "JPEG", os);
68![]()
} catch (IOException e)
{
69
return "";
70
}
71
return strEnsure;
72
}
73
}
74
2
3
4
5
6
7
8
9
10
11
12
13

14
15

16
17
18
19
20
21
22
23
24
25
26

27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

59
60
61
62
63
64
65

66
67
68

69
70
71
72
73
74
9、此时,我们很有必要来配置一下struts.xml其全部代码如下:
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
<!
DOCTYPE struts PUBLIC
3
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
4
"http://struts.apache.org/dtds/struts-2.0.dtd"
>
5![]()
6
<
struts
>
7![]()
8
<
package
name
="com.rong.action"
extends
="struts-default"
>
9
<!--
用户登录
-->
10
<
action
name
="loginAction"
class
="com.rong.action.LoginAction"
>
11
<
result
name
="success"
type
="redirect"
>
/back/index.jsp
</
result
>
12
<
result
name
="input"
>
/login.jsp
</
result
>
13
</
action
>
14
<!--
用户注册
-->
15
<
action
name
="registerAction"
class
="com.rong.action.RegisterAction"
>
16
<
result
name
="success"
type
="redirect"
>
/login.jsp
</
result
>
17
<
result
name
="input"
>
/register.jsp
</
result
>
18
</
action
>
19
</
package
>
20
</
struts
>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
10、Action层设计:两个非常关键的类,其中LoginAction.java的代码如下:
1
package
com.rong.action;
2![]()
3
import
java.util.Map;
4
import
com.opensymphony.xwork2.ActionContext;
5
import
com.opensymphony.xwork2.ActionSupport;
6
import
com.rong.DAO.UserDao;
7
import
com.rong.DAO.UserDaoImpl;
8
import
com.rong.ORM.User;
9![]()
10![]()
public
class
LoginAction
extends
ActionSupport
{
11
12
13
private UserDao userDao = new UserDaoImpl(); //操纵数据库DAO类(Hibernate实现),通过Struts.xml注入值
14
15
private int id;
16
private String name; //用户名(值由struts注入)
17
private String pwd; //密码(值由struts注入)
18
19
private String inputCertCode; //验证码
20![]()
21![]()
public int getId()
{
22
return id;
23
}
24![]()
public void setId(int id)
{
25
this.id = id;
26
}
27![]()
public String getName()
{
28
return name;
29
}
30![]()
public void setName(String name)
{
31
this.name = name;
32
}
33![]()
public String getPwd()
{
34
return pwd;
35
}
36![]()
public void setPwd(String pwd)
{
37
this.pwd = pwd;
38
}
39![]()
40![]()
public String getInputCertCode()
{
41
return inputCertCode;
42
}
43![]()
public void setInputCertCode(String inputCertCode)
{
44
this.inputCertCode = inputCertCode;
45
}
46
@Override
47![]()
public String execute() throws Exception
{
48
int state = userDao.isExist(name,pwd);
49
System.out.println("state="+state);
50![]()
if(state == -1)
{
51
this.addFieldError("name", "用户名不正确,请先注册!");
52
return INPUT;
53![]()
}else if(state == -2)
{
54
this.addFieldError("pwd", "密码不正确,请重新输入密码!");
55
return INPUT;
56![]()
}else if(state > 0)
{
57
System.out.println("[测试]登录成功!用户ID="+state);
58
this.setId(state);
59
return SUCCESS;
60![]()
}else
{
61
this.addFieldError("name", "登录失败,请与管理员联系!");
62
return INPUT;
63
}
64
}
65
66![]()
public void validate()
{
67
//验证码验证
68![]()
if(null == inputCertCode || "".equals(inputCertCode))
{
69
this.addFieldError("inputCertCode", "验证码不能为空!");
70![]()
}else
{
71
Map session = ActionContext.getContext().getSession();
72
String certCode = session.get("certCode").toString();
73![]()
if( ! certCode.equals(this.inputCertCode))
{
74
this.addFieldError("inputCertCode", "验证码不正确!");
75
}
76
}
77
78
}
79
80
81
82![]()
83
}
84
2
3
4
5
6
7
8
9
10

11
12
13
14
15
16
17
18
19
20
21

22
23
24

25
26
27

28
29
30

31
32
33

34
35
36

37
38
39
40

41
42
43

44
45
46
47

48
49
50

51
52
53

54
55
56

57
58
59
60

61
62
63
64
65
66

67
68

69
70

71
72
73

74
75
76
77
78
79
80
81
82
83
84
RegisterAction.java的代码如下:
1
package
com.rong.action;
2![]()
3
import
java.util.Map;
4![]()
5
import
com.opensymphony.xwork2.ActionContext;
6
import
com.opensymphony.xwork2.ActionSupport;
7
import
com.rong.DAO.UserDao;
8
import
com.rong.DAO.UserDaoImpl;
9
import
com.rong.ORM.User;
10![]()
11![]()
public
class
RegisterAction
extends
ActionSupport
{
12![]()
13
private UserDao userDao = new UserDaoImpl();
14![]()
15
private User user; //注册提交的用户对象
16
17
private String repwd; //重复密码
18
19
private String inputCertCode; //验证码
20![]()
21![]()
public User getUser()
{
22
return user;
23
}
24![]()
25![]()
public void setUser(User user)
{
26
this.user = user;
27
}
28![]()
29![]()
public String getRepwd()
{
30
return repwd;
31
}
32![]()
33![]()
public void setRepwd(String repwd)
{
34
this.repwd = repwd;
35
}
36![]()
37![]()
public String getInputCertCode()
{
38
return inputCertCode;
39
}
40![]()
41![]()
public void setInputCertCode(String inputCertCode)
{
42
this.inputCertCode = inputCertCode;
43
}
44![]()
45
@Override
46![]()
public String execute() throws Exception
{
47
48
userDao.add(user); //保存注册的user对象
49
return SUCCESS;
50
}
51![]()
52
@Override
53![]()
public void validate()
{
54
//验证码验证
55![]()
if(null == inputCertCode || "".equals(inputCertCode))
{
56
this.addFieldError("inputCertCode", "验证码不能为空!");
57![]()
}else
{
58
Map session = ActionContext.getContext().getSession();
59
String certCode = session.get("certCode").toString();
60![]()
if( ! certCode.equals(this.inputCertCode))
{
61
this.addFieldError("inputCertCode", "验证码不正确!");
62
}
63
}
64
65
}
66
67
}
68
2
3
4
5
6
7
8
9
10
11

12
13
14
15
16
17
18
19
20
21

22
23
24
25

26
27
28
29

30
31
32
33

34
35
36
37

38
39
40
41

42
43
44
45
46

47
48
49
50
51
52
53

54
55

56
57

58
59
60

61
62
63
64
65
66
67
68
11、不要忘记配置校验框架,与上面两个Action同一个目录下。LoginAction-validation.xml代码如下:
1
<!
DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
2
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"
>
3![]()
4
<
validators
>
5
<!--
用户名验证
-->
6
<
field
name
="name"
>
7
<
field-validator
type
="requiredstring"
>
8
<
param
name
="trim"
>
true
</
param
>
9
<
message
>
用户名不能为空!
</
message
>
10
</
field-validator
>
11
<
field-validator
type
="regex"
>
12
<
param
name
="expression"
>
<![CDATA[
(\w{4,8})
]]>
</
param
>
13
<
message
>
账号必须是长度为4-8的数字或字母!
</
message
>
14
</
field-validator
>
15
</
field
>
16
<!--
密码验证
-->
17
<
field
name
="pwd"
>
18
<
field-validator
type
="requiredstring"
>
19
<
param
name
="trim"
>
true
</
param
>
20
<
message
>
密码不能为空!
</
message
>
21
</
field-validator
>
22
<
field-validator
type
="regex"
>
23
<
param
name
="expression"
>
<![CDATA[
(\w{4,8})
]]>
</
param
>
24
<
message
>
密码必须长度为4-8的数字或字母!
</
message
>
25
</
field-validator
>
26
</
field
>
27![]()
28
</
validators
>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
RegisterAction-validation.xml代码如下:
1
<!
DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
2
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"
>
3![]()
4
<
validators
>
5![]()
6
<!--
用户名验证
-->
7
<
field
name
="user.name"
>
8
<
field-validator
type
="requiredstring"
>
9
<
param
name
="trim"
>
true
</
param
>
10
<
message
>
用户名不能为空!
</
message
>
11
</
field-validator
>
12
<
field-validator
type
="regex"
>
13
<
param
name
="expression"
>
<![CDATA[
(\w{4,8})
]]>
</
param
>
14
<
message
>
账号必须是长度为4-8的数字或字母!
</
message
>
15
</
field-validator
>
16
</
field
>
17
18
<!--
密码验证
-->
19
<
field
name
="user.pwd"
>
20
<
field-validator
type
="requiredstring"
>
21
<
param
name
="trim"
>
true
</
param
>
22
<
message
>
密码不能为空!
</
message
>
23
</
field-validator
>
24
<
field-validator
type
="regex"
>
25
<
param
name
="expression"
>
<![CDATA[
(\w{4,8})
]]>
</
param
>
26
<
message
>
密码必须长度为4-8的数字或字母!
</
message
>
27
</
field-validator
>
28
</
field
>
29
30
<
field
name
="repwd"
>
31
<
field-validator
type
="requiredstring"
short-circuit
="true"
>
32
<
param
name
="trim"
>
true
</
param
>
33
<
message
>
重复密码不能为空!
</
message
>
34
</
field-validator
>
35
<
field-validator
type
="fieldexpression"
>
36
<
param
name
="expression"
>
<![CDATA[
(repwd==user.pwd)
]]>
</
param
>
37
<
message
>
两次输入的密码要一致!
</
message
>
38
</
field-validator
>
39
</
field
>
40
41
</
validators
>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
到这里,我们的项目也差不多完成了,大家自己也尝试一下,开发出自己的J2EE系统。
本文原创,转载请注明出处,谢谢!http://www.blogjava.net/rongxh7(心梦帆影JavaEE技术博客)