Struts2和Hibernate实现的注册登录模块

本文是Sruts2初学后的一个小练习,实现了一个简单的注册登录模块的功能。本文可供Struts2初学者的参考,看完本文后你会觉得Struts2比Struts1.x简单易学,容易上手,更为重要的是使得Web开发更加简单了。写到此突然更加的佩服那些架构和开发Struts2的开发人员,以及Apache软件基金组织。

1.开发环境:NeatbBeans 6.5.1 JDK1.6 Tomcat 6 Windows XP Professional SP2 离线博客书写工具:Zoudry Blog Writer

2.首先写一个User类,属性有username和password;原代码如下:

public class User {
private long ID;
private String username;
private String password;

public User(String username,String password){
this.username = username;
this.password = password;
}
public User(){}

public long getID() {
return ID;
}

public void setID(long ID) {
this.ID = ID;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

}

3.配置User类的映射文件:User.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="demo.po.User" table="user">
<id column="ID" name="ID" type="long">
<generator class="native"/>
</id>
<property column="username" name="username" type="string"/>
<property column="password" name="password" type="string"/>
</class>
</hibernate-mapping>

4.写一个Connection类,负责创建Session;

public class Connection {

public static SessionFactory sessionfactory;

static {
try {
Configuration config = new Configuration().configure();
sessionfactory = config.buildSessionFactory();
} catch (Exception e) {
e.printStackTrace();
}
}

public static Session getSession() {
try {
Session session = sessionfactory.openSession();
return session;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

public static void closeConnection(){
sessionfactory.close();
}
}

5.实现一个UserDAO类,实现具体的数据库操作;

public class UserDAO {

private User user;

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

public static boolean Add(User user) {
user.setID(getNextID());
Session session=null;
Transaction tx=null;
try {
session = Connection.getSession();
tx = session.beginTransaction();
session.save(user);
tx.commit();
return true;
} catch (Exception e) {
tx.rollback();
System.out.println("注册失败");
e.printStackTrace();
return false;
}finally{
session.close();
Connection.closeConnection();
}

}

public static boolean registerValidate(String username){
boolean conflict_flag;
Session session = Connection.getSession();
String hql = "select u.username from User u where u.username=?";
Query query = session.createQuery(hql);
query.setString(0, username);
List list = query.list();
if (list.size()>0 ) {
conflict_flag=true;
return conflict_flag;
}else{
conflict_flag = false;
return conflict_flag;
}
}

public static List select(User user){
String sql = "select u from User as u ";
Session session = Connection.getSession();
Query query = session.createQuery(sql);
List list = query.list();
return list;
}

public static boolean loginValidate(String name,String pswd){
Session session = Connection.getSession();
String hql = "select u from User as u where u.username=? and u.password=?";
Query query = session.createQuery(hql);
query.setString(0,name);
query.setString(1,pswd);
List list = query.list();
if (list.size()>0)
return true;
else
return false;

}

public static long getNextID(){
Session session = Connection.getSession();
String sql = "select max(ID) from User";
Query query = session.createQuery(sql);
List<Long> list = query.list();
long nextID = list.get(0)+1;
return nextID;
}
}

6.Action类及其数据校验文件:

Login.java 文件如下:

public class Login extends ActionSupport {

String username;
String password;

@Override
public String execute() {
boolean flag = UserDAO.loginValidate(getUsername(), getPassword());
if (flag) {
return SUCCESS;
}
else {
return "error";
}

}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

}

Login-validation.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>
<field name="username">
<field-validator type="requiredstring">
<message>请输入你的登录用户名!</message>
</field-validator>
<field-validator type="regex">
<param name="expression">
<![CDATA[(\w{6,16})]]>
</param>
<message>请输入有效的用户名,用户名只能是数字和字母,且长度在6-16之间!</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message>请输入你的登录密码</message>
</field-validator>
<field-validator type="regex">
<param name="expression">
<![CDATA[(\w{6,16})]]>
</param>
<message>请输入有效的密码,密码只能是数字和字母,且长度在6-16之间!</message>
</field-validator>
</field>
</validators>

7.Register类及其数据验证文件:

public class Register extends ActionSupport {

private String username;
private String password;
private String password2;

public String getPassword2() {
return password2;
}

public void setPassword2(String password2) {
this.password2 = password2;
}

@Override
public String execute() throws Exception {
boolean accept = !UserDAO.registerValidate(getUsername());
if (accept) {
User u = new User(getUsername(), getPassword());
boolean flag = UserDAO.Add(u);
if (flag) {
return "success";
} else {
return "error";
}
} else {
return "refuse";
}

}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}
}

Register-validation.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>
<field name="username">
<field-validator type="requiredstring">
<message>请输入你要注册的用户名!</message>
</field-validator>
<field-validator type="regex">
<param name="expression">
<![CDATA[(\w{6,16})]]>
</param>
<message>请输入有效的用户名,用户名只能是数字和字母,且长度在6-16之间!</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message>请输入你的登录密码</message>
</field-validator>

<field-validator type="regex">
<param name="expression">
<![CDATA[(\w{6,16})]]>
</param>
<message>请输入有效的密码,密码只能是数字和字母,且长度在6-16之间!</message>
</field-validator>
</field>
<field name="password2">
<field-validator type="requiredstring">
<message>请再次确认密码</message>
</field-validator>

<field-validator type="regex">
<param name="expression">
<![CDATA[(\w{6,16})]]>
</param>
<message>请输入有效的密码,密码只能是数字和字母,且长度在6-16之间!</message>
</field-validator>
<field-validator type="fieldexpression">
<param name="expression">
<![CDATA[(password==password2)]]>
</param>
<message>两次密码不一致</message>
</field-validator>
</field>
</validators>

8.login.jsp和register.jsp文件
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>欢迎登录</title>
</head>
<body>
<s:actionerror/>
<s:fielderror/>
<s:form action="login" theme="simple" method="post">
<table>
<tr>用户名:<input name="username" type="text"></tr>
<tr>密 码:<input name="password" type="password"></tr>
<tr><input type="submit" value="登录">&nbsp;&nbsp;
<s:a href="demo/register.jsp">注册</s:a></tr>
</table>

</s:form>
</body>
</html>

<%@ page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册</title>
</head>
<body>
<s:actionerror/>
<s:fielderror/>
<s:form action="register" theme="simple" method="post">
<tr>用户名:<input name="username" type="text"></tr>
<tr>密 码:<input name="password" type="password"></tr>
<tr>确认密码:<input name="password2" type="password"></tr>
<tr><input type="submit" value="注册">
</s:form>
</body>
</html>

9.登陆成功以及注册成功的jsp页面;

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录成功</title>
</head>
<body>
<h1>欢迎你回来,<s:property value ="username"/></h1>
</body>
</html>

<%@page contentType="text/html" 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>
<h1>欢迎新用户<s:property value = "username"/>的加入!</h1>
</body>
</html>

9.登录失败以及注册失败的JSP页面:

<%@page contentType="text/html" 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>
<h1>登录失败,您还不是注册用户!<s:a href="login.jsp">返回注册</s:a>
</h1>
</body>
</html>

<%@page contentType="text/html" 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>
<h1>注册失败,该用户已存在,<s:a href="register.jsp">请重新注册</s:a></h1>
</body>
</html>

10:配置Struts.xml文件

<struts>
<include file="demo.xml"/>
<!-- Configuration for the default package. -->
<package name="default" extends="struts-default">
</package>
</struts>

demo.xml文件如下:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"><struts>
<package name="demo" namespace="/demo" extends="struts-default">
<action name="login" class="demo.action.Login">
<result name="input">login.jsp</result>
<result name="success" >loginsuccess.jsp</result>
<result name="error">loginerror.jsp</result>

</action>
<action name="register" class="demo.action.Register">
<result name="input">register.jsp</result>
<result name="success">regsuccess.jsp</result>
<result name="refuse">regerror.jsp</result>
<result name="error">regerror.jsp</result>
</action>
</package>
</struts>

11.配置web.xml文件:

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>demo/login.jsp</welcome-file>
</welcome-file-list>
</web-app>


参考来源:http://hiro.iteye.com/blog/420476

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值