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 >
<% ... @ 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>");
}
%>
<% ... @ 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;
}
}
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;
}
}