本文是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="登录">
<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>