1.首先附上我的注册页面源码。(这其中的User类没有很好的封装及分层,大家凑合着看,我会在最后贴上User的源码,中间的那段JavaScript是重中之重):

<%...@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%...@ page import="com.ycringfinger.shopping.*" %>
<%...
request.setCharacterEncoding("GB18030");
String action = request.getParameter("action");
if(action!=null && action.equals("register")){
String username = request.getParameter("username");
String password = request.getParameter("password");
String phone = request.getParameter("phone");
String addr = request.getParameter("addr");
User u = new User();
u.setUsername(username);
u.setPassword(password);
u.setPhone(phone);
u.setAddr(addr);
u.setRdate(new Date(System.currentTimeMillis()));
u.save();
%>
<center>注册成功,谢谢</center>
<%...
return;
}
%>
<html>
<head>
<title>用户注册</title>
<script language=JavaScript src="script/regcheckdata.js"></script>
<script type="text/javascript">...
var req;
function validate() ...{
var idField = document.getElementById("username");
var url = "validate.jsp?username=" + escape(idField.value);
if(window.XMLHttpRequest) ...{
req = new XMLHttpRequest();
} else if (window.ActiveXObject) ...{
req = new ActiveXObject("Microsoft.XMLHTTP");
}
req.open("GET", url, true);
req.onreadystatechange = callback;
req.send(null);
}

function callback() ...{
if(req.readyState == 4) ...{
if(req.status == 200) ...{
var msg = req.responseXML.getElementsByTagName("msg")[0];
setMsg(msg.childNodes[0].nodeValue)
}
}
}

function setMsg(msg) ...{
if(msg == "valid") ...{
document.getElementById("usermsg").innerHTML = "<font color='green'>恭喜你,该用户名尚未注册</font>"
} else if(msg == "invalid") ...{
document.getElementById("usermsg").innerHTML = "<font color='red'>该用户名已注册</font>"
}
}
</script>
</head>
<body>
<form name="form" action="register.jsp" method="post"
onSubmit="return checkdata()">
<input type="hidden"name="action" value="register">
<table width="750" align="center" border="2">
<tr>
<td>
用户名:
</td>
<td>
<input type="text" name="username" size="30" maxlength="10" onblur="validate()"><div id="usermsg"></div>
</td>
</tr>
<tr>
<td>
密码:
</td>
<td>
<input type="password" name="password" size="15" maxlength="12">
</td>
</tr>
<tr>
<td>
密码确认:
</td>
<td>
<input type="password" name="password2" size="15" maxlength="12">
</td>
</tr>
<tr>
<td>
电话:
</td>
<td>
<input type="text" name="phone" size="15" maxlength="12">
</td>
</tr>
<tr>
<td>
地址:
</td>
<td>
<textarea rows="12" cols="80" name="addr"></textarea>
</td>
</tr>
<tr>
<td>
<input type="submit" value="提交">
<input type="reset" value="重置">
</td>
</tr>
</table>
</form>
</body>
</html>
2.validate.jsp的源码如下(注意前面那几个设置属性如setContentType,setHeader等是必需的):

<%...@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%...@ page import="com.ycringfinger.shopping.*" %>
<%...
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
request.setCharacterEncoding("GB18030");
String userName = request.getParameter("username").trim();
if(User.userExists(userName)) {
response.getWriter().write("<msg>valid</msg>");
} else {
response.getWriter().write("<msg>invalid</msg>");
}
%>
3.本人的User.java:(大家不要笑话)
package com.ycringfinger.shopping;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import com.ycringfinger.shopping.util.*;

public class User ...{
private int id;
private String username;
private String password;
private String phone;
private String addr;
private Date rdate;

public int getId() ...{
return id;
}

public void setId(int id) ...{
this.id = id;
}

public String getUsername() ...{
return username;
}

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

public String getPassword() ...{
return password;
}

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

public String getPhone() ...{
return phone;
}

public void setPhone(String phone) ...{
this.phone = phone;
}

public String getAddr() ...{
return addr;
}

public void setAddr(String addr) ...{
this.addr = addr;
}

public Date getRdate() ...{
return rdate;
}

public void setRdate(Date rdate) ...{
this.rdate = rdate;
}

public void save() ...{
Connection conn = DB.getConnection();
String sql = "insert into user values (null, ?, ?, ?, ?, ?)";
PreparedStatement pstmt = DB.getPreparedStatement(conn, sql);
try ...{
pstmt.setString(1, username);
pstmt.setString(2, password);
pstmt.setString(3, phone);
pstmt.setString(4, addr);
pstmt.setTimestamp(5, new Timestamp(rdate.getTime()));
pstmt.executeUpdate();
} catch (SQLException e) ...{
e.printStackTrace();
} finally ...{
DB.closePreparedStatement(pstmt);
DB.closeConnection(conn);
}
}

public static List<User> getUsers() ...{
List<User> users = new ArrayList<User>();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try ...{
conn = DB.getConnection();
stmt = DB.getStatement(conn);
String sql = "select * from user";
rs = DB.executeQuery(stmt, sql);
while (rs.next()) ...{
User u = new User();
u.setId(rs.getInt(1));
u.setUsername(rs.getString("username"));
u.setPassword(rs.getString("password"));
u.setPhone(rs.getString("phone"));
u.setAddr(rs.getString("addr"));
u.setRdate(rs.getTimestamp("rdate"));
users.add(u);
}
} catch (SQLException e) ...{
e.printStackTrace();
} finally ...{
DB.closeResultSet(rs);
DB.closeStatement(stmt);
DB.closeConnection(conn);
}
return users;
}

public static void deleteUser(int id) ...{
Connection conn = null;
Statement stmt = null;
try ...{
conn = DB.getConnection();
stmt = DB.getStatement(conn);
stmt.executeUpdate("delete from user where id = " + id);
} catch (Exception e) ...{
e.printStackTrace();
} finally ...{
DB.closeStatement(stmt);
DB.closeConnection(conn);
}
}
public static User validate(String username, String password)
throws UserNotFoundException, PasswordNotCorrectException ...{
Connection conn = null;
String sql = "select * from user where username = '" + username + "'";
Statement stmt = null;
ResultSet rs = null;
User u = null;
try ...{
conn = DB.getConnection();
stmt = DB.getStatement(conn);
rs = DB.executeQuery(stmt, sql);
if (!rs.next()) ...{
throw new UserNotFoundException();
} else if (!rs.getString("password").trim().equals(password)) ...{
throw new PasswordNotCorrectException();
} else ...{
u = new User();
u.setId(rs.getInt("id"));
u.setUsername(rs.getString("username"));
u.setPassword(rs.getString("password"));
u.setPhone(rs.getString("phone"));
u.setAddr(rs.getString("addr"));
u.setRdate(rs.getTimestamp("rdate"));
}
} catch (SQLException e) ...{
e.printStackTrace();
} finally ...{
DB.closeResultSet(rs);
DB.closeStatement(stmt);
DB.closeConnection(conn);
}
return u;
}

public void update()...{
Connection conn = DB.getConnection();
String sql = "update user set username = ?, phone = ?, addr = ? where id = " + this.id;
PreparedStatement pstmt = DB.getPreparedStatement(conn, sql);
try ...{
pstmt.setString(1, username);
pstmt.setString(2, phone);
pstmt.setString(3, addr);
pstmt.executeUpdate();
} catch (SQLException e) ...{
e.printStackTrace();
} finally ...{
DB.closePreparedStatement(pstmt);
DB.closeConnection(conn);
}
}

public static boolean userExists(String userName) ...{
boolean b = true;
List<User> users = User.getUsers();
for(Iterator<User> it=users.iterator(); it.hasNext(); ) ...{
User u = it.next();
if(u.getUsername().equals(userName)) ...{
b = false;
}
}
return b;
}
}
本文介绍了一个简单的用户注册系统实现,包括前端验证和后端处理。通过JavaScript进行用户名唯一性检查,并使用JSP完成用户数据的存储。
623

被折叠的 条评论
为什么被折叠?



