本例需要的軟件和運行環(huán)境:
1、Windows2000 Server操作系統(tǒng)
2、jdk1.4
3、JCreator2.5(java.net" class="wordstyle">源碼編輯調(diào)試器,吐血推薦!)
4、Macromedia JRun MX
5、Macromedia Dreamweaver MX(非必需)
6、MySQL數(shù)據(jù)庫(最好安裝MySQL Control Center)
一、數(shù)據(jù)庫設(shè)計
用MySQL Control Center打開MySQL數(shù)據(jù)庫,新建數(shù)據(jù)庫shopping,在其下新建表tbl_user,其中各字段設(shè)置如下:
二、編寫連接數(shù)據(jù)庫bean:DBConn.java
//DBConn.java
//include required classes
import java.sql.*;
//==========================================
// Define Class DBConn
//==========================================
public class DBConn
{
?public String sql_driver = "org.gjt.mm.mysql.Driver";
?public String sql_url = "jdbc:mysql://localhost:3306";
?public String sql_DBName = "shopping";
?public String user = "sa";
?public String pwd = "";
?Connection conn = null;
?Statement stmt = null;
?ResultSet rs = null;
?public boolean setDriver(String drv)
?{
? this.sql_driver = drv;
? return true;
?}
?public String getDriver()
?{
? return this.sql_driver;
?}
?public boolean setUrl(String url)
?{
? this.sql_url = url;
? return true;
?}
?public boolean setDBName(String dbname)
?{
? this.sql_DBName = dbname;
? return true;
?}
?public String getDBName()
?{
? return this.sql_DBName;
?}
?public boolean setUser(String user)
?{
? this.user = user;
? return true;
?}
?public String getUser()
?{
? return this.user;
?}
?public boolean setPwd(String pwd)
?{
? this.pwd = pwd;
? return true;
?}
?public String getPwd()
?{
? return this.pwd;
?}
?public DBConn()
?{
? try{
?? Class.forName(sql_driver);//加載數(shù)據(jù)庫驅(qū)動程序
?? this.conn = DriverManager.getConnection(sql_url + "/" + sql_DBName + "?user=" + user + "&password=" + pwd + "&useUnicode=true&characterEncoding=gb2312");
?? this.stmt = this.conn.createStatement();
? }catch(Exception e){
?? System.out.println(e.toString());
? }
?}
??????????????? //執(zhí)行查詢操作
?public ResultSet executeQuery(String strSql)
?{
? try{
?? this.rs = stmt.executeQuery(strSql);
?? return this.rs;
? }catch(SQLException e){
?? System.out.println(e.toString());
?? return null;
? }catch(NullPointerException e){
?? System.out.println(e.toString());
?? return null;
? }
?}
??????????????? //執(zhí)行數(shù)據(jù)的插入、刪除、修改操作
?public boolean execute(String strSql)
?{
? try{
?? if(this.stmt.executeUpdate(strSql) == 0)
??? return false;
?? else
??? return true;
? }catch(SQLException e){
?? System.out.println(e.toString());
?? return false;
? }catch(NullPointerException e){
?? System.out.println(e.toString());
?? return false;
? }
?}
??????????????? //結(jié)果集指針跳轉(zhuǎn)到某一行
?public boolean rs_absolute(int row)
?{
? try{
?? this.rs.absolute(row);
?? return true;
? }catch(SQLException e){
?? System.out.println(e.toString());
?? return false;
? }
?}
?public void rs_afterLast()
?{
? try{
?? this.rs.afterLast();
? }catch(SQLException e){
?? System.out.println(e.toString());
? }
?}
?public void rs_beforeFirst()
?{
? try{
?? this.rs.beforeFirst();
? }catch(SQLException e){
?? System.out.print(e.toString());
? }
?}
?public void rs_close()
?{
? try{
?? this.rs.close();
? }catch(SQLException e){
?? System.out.print(e.toString());
? }
?}
?public void rs_deleteRow()
?{
? try{
?? this.rs.deleteRow();
? }catch(SQLException e){
?? System.out.print(e.toString());
? }
?}
?public boolean rs_first()
?{
? try{
?? this.rs.first();
?? return true;
? }catch(SQLException e){
?? System.out.print(e.toString());
?? return false;
? }
?}
?public String rs_getString(String column)
?{
? try{
?? return this.rs.getString(column);
? }catch(SQLException e){
?? System.out.println(e.toString());
?? return null;
? }
?}
??????????????? //此方法用于獲取大段文本,
??????????????? //將其中的回車換行替換為<br>
??????????????? //輸出到html頁面
?public String rs_getHtmlString(String column)
?{
? try{
?? String str1 = this.rs.getString(column);
?? String str2 = "\r\n";
?? String str3 = "<br>";
?? return this.replaceAll(str1,str2,str3);
? }catch(SQLException e){
?? System.out.println(e.toString());
?? return null;
? }
?}
?
??????????????? //把str1字符串中的str2字符串替換為str3字符串
?private static String replaceAll(String str1,String str2,String str3)
?{
? StringBuffer strBuf = new StringBuffer(str1);
???? int index=0;
? while(str1.indexOf(str2,index)!=-1)
? {
?? index=str1.indexOf(str2,index);
?? strBuf.replace(str1.indexOf(str2,index),str1.indexOf(str2,index)+str2.length(),str3);
?? index=index+str3.length();
??? str1=strBuf.toString();
? }
? return strBuf.toString();
?}
?public int rs_getInt(String column)
?{
? try{
?? return this.rs.getInt(column);
? }catch(SQLException e){
?? System.out.println(e.toString());
?? return -1;
? }
?}
?public int rs_getInt(int column)
?{
? try{
?? return this.rs.getInt(column);
? }catch(SQLException e){
?? System.out.println(e.toString());
?? return -1;
? }
?}
?public boolean rs_next()
?{
? try{
?? return this.rs.next();
? }catch(SQLException e){
?? System.out.println(e.toString());
?? return false;
? }
?}
??????????????? //判斷結(jié)果集中是否有數(shù)據(jù)
?public boolean hasData()
?{
? try{
?? boolean has_Data = this.rs.first();??
?? this.rs.beforeFirst();
?? return has_Data;
? }catch(SQLException e){
?? System.out.println(e.toString());
?? return false;
? }
?}
?public boolean rs_last()
?{
? try{
?? return this.rs.last();
? }catch(SQLException e){
?? System.out.println(e.toString());
?? return false;
? }
?}
?public boolean rs_previous()
?{
? try{
?? return this.rs.previous();
? }catch(Exception e){
?? System.out.println(e.toString());
?? return false;
? }
?}
??????????????? //main方法,調(diào)試用
?public static void main(String args[])
?{
? try{
?? DBConn myconn = new DBConn();
?? //myconn.setDBName("shopping");
?? //myconn.DBConn();
?? //myconn.execute("Insert Into tbl_test(id,name) values('10','shandaer')");
?? //myconn.execute("Update tbl_test set name='yyyyyyyyyyyy' where id=10");
?? //myconn.execute("Delete from tbl_test where id=1");
?? ResultSet rs = myconn.executeQuery("select * from tbl_user order by id desc limit 1");
?? //boolean hasData = myconn.hasData();
?? //System.out.println("has data:" + hasData);
?? //rs.first();
?? while (myconn.rs.next())?
?? {
??? int id = myconn.rs_getInt("id") + 1;
??? System.out.print(id);
??? System.out.println(myconn.rs_getInt("id") + myconn.rs_getString("name"));
???
??? //System.out.println('\n' + myconn.rs_getHtmlString("name"));
??? //System.out.println(myconn.rs.getString("name") + myconn.rs_getInt(1));
?? }
? }catch(Exception e){
?? System.err.println(e.toString());
? }
?}
?
}
聲明:因為使用的是MySQL數(shù)據(jù)庫,所以需要MySQL數(shù)據(jù)庫的驅(qū)動
下載后請將org包放至DBConn.java所在目錄下
以確保該bean能正常運行
?
三、編寫用戶注冊的bean:reg.java
//reg.java
//import required classes
import java.sql.*;
public class reg
{
?public int newID = 0;
?public boolean result = false;
?public boolean reg(String username,String password,String confirm,String email)
?{
? try{
?? if(!this.checkUser(username))
??? return false;
?? if(!this.checkPwd(password))
??? return false;
?? if(!this.verifyPwd(password,confirm))
??? return false;
?? if(!this.checkEmail(email))
??? return false;
?? if(!this.userNotExit(username))
??? return false;
?? this.getNewID();?
?? this.result = this.register(username,password,confirm,email);
?? return this.result;
? }catch(Exception e){
?? System.out.println(e.toString());
?? return false;
? }
?}//End boolean reg
?
?public boolean checkUser(String user)
?{
? try{??
?? if(user.indexOf("'")!=-1)
?? {
??? System.out.println("姓名中含有非法字符!");
??? return false;
?? }else
??? return true;
? }catch(Exception e){
?? System.out.println(e.toString());
?? return false;
?? }
?}
?
?public boolean checkPwd(String pwd)
?{
? try{
?? if(pwd.indexOf("'")!=-1)
?? {
??? System.out.println("密碼中含有非法字符!");
??? return false;
?? }else
??? return true;
? }catch(Exception e){
?? System.out.println(e.toString());
?? return false;
? }
?}
?
?public boolean verifyPwd(String pwd,String confirm)
?{
? try{
?? if(!pwd.equals(confirm))
?? {
??? System.out.println("兩次輸入的密碼不一致!");
??? return false;
?? }else
??? return true;
? }catch(Exception e){
?? System.out.println(e.toString());
?? return false;
? }
?}
?
?public boolean checkEmail(String email)
?{
? try{
?? if(email.indexOf("'")!=-1)
?? {
??? System.out.println("E-mail中含有非法字符!");
??? return false;
?? }else
??? return true;
? }catch(Exception e){
?? System.out.println(e.toString());
?? return false;
? }
?}
?
?public boolean userNotExit(String user)
?{
? try{
?? DBConn userDBConn = new DBConn();
?? userDBConn.executeQuery("select * from tbl_user where name='" + user + "'");
?? if(userDBConn.rs_next())
?? {
??? System.out.println("用戶名已存在,請選擇其它的用戶名!");
??? return false;
?? }else
??? return true;
? }catch(Exception e){
?? System.out.println(e.toString());
?? return false;
?? }
?}
?
?public int getNewID()
?{
? try{
?? DBConn newIDDBConn = new DBConn();
?? newIDDBConn.executeQuery("select * from tbl_user order by id desc limit 1");
?? if(newIDDBConn.rs_next())
?? {
??? this.newID = newIDDBConn.rs_getInt("id") + 1;
??? System.out.println(this.newID);
?? }else{
??? this.newID = 1;
?? }
?? return this.newID;
? }catch(Exception e){
?? System.out.println(e.toString());
?? return -1;
?? }???
?}
?
?public int getID()
?{
? return this.newID;
?}
?
?public boolean register(String username,String password,String confirm,String email)
?{
? try{
?? DBConn regDBConn = new DBConn();
?? String strSQL = "insert into tbl_user(id,name,pwd,email) values('" + this.newID +"','" + username + "','" + password + "','" + email + "')";
?? regDBConn.execute(strSQL);
?? return true;
? }catch(Exception e){
?? System.out.println(e.toString());
?? return false;
?? }
?}
?public static void main(String args[])
?{
? try{
??
?? reg newreg = new reg();??
??
?? System.out.println(newreg.reg("sssssssss","ssssss","ssssss","imagebear@163.com"));
??
?? DBConn myconn = new DBConn();
?? myconn.executeQuery("select * from tbl_user");
?? while(myconn.rs_next())
?? {
??? System.out.println(myconn.rs_getInt("id") + "??? " + myconn.rs_getString("name") + "??? " + myconn.rs_getString("pwd") + "??? " + myconn.rs_getString("email"));
?? }
?? System.out.println(newreg.getID());
? }catch(Exception e){
?? System.err.println(e.toString());
? }
?}
};
說明:
1、該bean文件應(yīng)和上文所述DBConn.class文件放于同一目錄下
2、本例主要研究注冊的過程,其中的Email檢測等方法并不完善,若要應(yīng)用請自行設(shè)計方法
?
四、編寫用戶登陸的Servlet:login.java
//login.java
//import required classes
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
//class login
public class login extends HttpServlet
{
?public void doGet(HttpServletRequest req,HttpServletResponse res)
?throws IOException,ServletException
?{
? String username = req.getParameter("username");
? String password = req.getParameter("password");
? if(this.checklogin(username,password))
? {
?? Cookie mylogin = new Cookie("username",username);
?? mylogin.setVersion(1);
?? mylogin.setPath("/");
?? mylogin.setComment("Your login username");
?? res.addCookie(mylogin);
? }
? //Cookie[] myCookies = req.getCookies();
? //String nameValue = this.getCookieValue(myCookies,"username","not found");
? //PrintWriter out = res.getWriter();
? //out.println("username" + ":" + nameValue);
? //out.println("Test Cookie Success!");
? res.sendRedirect("/index.jsp");
?}
?
?public void doPost(HttpServletRequest req,HttpServletResponse res)
?throws IOException,ServletException
?{
? doGet(req,res);
?}
?
?public static String getCookieValue(Cookie[] cookies,String cookieName,String defaultValue)
?{
? for(int i=0;i<cookies.length;i++) {
? Cookie cookie = cookies[i];
? if (cookieName.equals(cookie.getName()))
? return(cookie.getValue());
?}
? return(defaultValue);
?}
?
?public boolean checklogin(String username,String password)
?{
? try{
?? DBConn loginConn = new DBConn();
?? loginConn.executeQuery("select * from tbl_user where name='" + username + "'");
?? if(loginConn.rs_next())
?? {
??? System.out.println("Connection created!");
??? if(loginConn.rs_getString("pwd").trim().equals(password))
??? {
???? System.out.println(loginConn.rs_getString("name"));
???? return true;
??? }
??? else
??? {
???? return false;
??? }
?? }
?? System.out.println("Test Login Success!");
?? return false;
? }catch(Exception e){
?? System.out.println(e.toString());
?? return false;
?? }
?}
?
?public static void main(String args[])
?{
? login mylogin = new login();
? System.out.println(mylogin.checklogin("shandong","shandong"));
?}
?
}
說明:
1、默認(rèn)的jdk1.4中并沒有servlet包,請至sun公司網(wǎng)頁下載servlet.jar,放至jdk目錄下的jre\lib\目錄下,并在JCreator中設(shè)置jdk處添加servlet.jar包?
2、本Servlet用于檢驗用戶名和密碼,若正確則將用戶名寫入Cookie,完成后將當(dāng)前頁重定向到index.jsp頁
?
五、編寫檢測用戶是否已經(jīng)登陸的bean:checkLogin.java
//checkLogin.java
//import required classes
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
//class checkLogin
public class checkLogin
{
?public String username = "";
?
?public boolean check(HttpServletRequest req,HttpServletResponse res)
?throws IOException,ServletException
?{
? String cookieName = "username";
? Cookie[] myCookies = req.getCookies();
? this.username = this.getCookieValue(myCookies,cookieName,"not found");
? PrintWriter out = res.getWriter();
? if(this.username != null)
? {??
?? //out.println("早上好," + this.username + "!");
?? return true;
? }else{
?? out.println("登陸失敗!");
?? return false;
?? }
??
?}
?
?public String getUserName()
?{
? return this.username;
?}
?
?public static String getCookieValue(Cookie[] cookies,String cookieName,String defaultValue)
?{
? for(int i=0;i<cookies.length;i++) {
? Cookie cookie = cookies[i];
? if (cookieName.equals(cookie.getName()))
? return(cookie.getValue());
?}
? return(defaultValue);
?}
}
說明:此bean檢測cookie中的username,若不為空則說明已登錄,反之說明沒有登錄。方法不夠完善,您可以自行擴(kuò)充。
?
六、在JRun中建立shopping服務(wù)器
打開JRun Administrator,新建shopping服務(wù)器,這里端口為8101。
將上文所述所有編譯后的class文件連同org包拷至JRun的shopping服務(wù)器所在目錄中的classes文件夾下,路徑為:
C:\JRun4\servers\shopping\default-ear\default-war\WEB-INF\classes\
七、建立jsp文件
應(yīng)用DW,在C:\JRun4\servers\shopping\default-ear\default-war\目錄下新建如下的jsp文件:
index.jsp:
<%@ page contentType="text/html;charset=gb2312" pageEncoding="gb2312" %>
<html>
<head>
<title>Shopping123</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="styles/shoppingstyle.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0">
<jsp:useBean id="checklogin" class="checkLogin" scope="page"/>
<%
?boolean login = checklogin.check(request,response);
%>
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
? <tr bgcolor="#990000">
??? <td height="80" colspan="5"><table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
??????? <tr>
????????? <td width="120"> </td>
????????? <td class="caption">Shopping123</td>
????????? <td width="200"> </td>
??????? </tr>
????? </table></td>
? </tr>
? <tr>
??? <td width="200" align="center" valign="top"><table width="100%" height="20" border="0" cellpadding="0" cellspacing="0">
??????? <tr>
????????? <td> </td>
??????? </tr>
????? </table>
?? <%
??? if(!login){
?? %>
????? <table width="90%" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
?? <form name="form1" method="post" action="/servlet/login">
??????? <tr align="center" bgcolor="#CCCCCC">
????????? <td height="30" colspan="2" class="deepred">賣場入口</td>
??????? </tr>
??????? <tr>
????????? <td width="50%" height="24" align="center" bgcolor="#FFFFFF">會員</td>
????????? <td align="center" bgcolor="#FFFFFF"><input name="username" type="text" id="username" size="10"></td>
??????? </tr>
??????? <tr>
????????? <td height="24" align="center" bgcolor="#FFFFFF">密碼</td>
????????? <td align="center" bgcolor="#FFFFFF"><input name="password" type="text" id="password" size="10"></td>
??????? </tr>
??????? <tr>
????????? <td height="24" align="center" bgcolor="#FFFFFF"><a href="reg.jsp" target="_blank" class="red">注冊</a></td>
????????? <td align="center" bgcolor="#FFFFFF"><input type="submit" name="Submit" value="進(jìn)入"></td>
??????? </tr>
? </form>
????? </table>
?? <%
??? }
? else
? {
?? out.println("您好," + checklogin.getUserName() + "!");
? }
?? %>
?? </td>
?<td width="1" valign="top" bgcolor="#CCCCCC"></td>
??? <td width="400"> </td>
?<td width="1" valign="top" bgcolor="#CCCCCC"></td>
??? <td width="200"> </td>
? </tr>
? <tr align="center" bgcolor="#990000">
??? <td height="60" colspan="5" class="white">copyright© 2003 Shopping123</td>
? </tr>
</table>
</body>
</html>
reg.jsp<%@ page contentType="text/html;charset=gb2312" pageEncoding="gb2312" %>
<html>
<head>
<title>Shopping123</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="styles/shoppingstyle.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0">
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
? <tr bgcolor="#990000">
??? <td height="80" colspan="5"><table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
??????? <tr>
????????? <td width="120"> </td>
????????? <td class="caption">Shopping123</td>
????????? <td width="200"> </td>
??????? </tr>
????? </table></td>
? </tr>
? <tr>
??? <td width="100" align="center" valign="top"> </td>
??? <td width="1" valign="top"></td>
??? <td width="400" align="center" valign="top"><table width="100%" height="20" border="0" cellpadding="0" cellspacing="0">
??????? <tr>
????????? <td> </td>
??????? </tr>
????? </table>
????? <table width="100%" border="0" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
?? <form action="regpost.jsp" method="post" name="form1">
??????? <tr align="center">
????????? <td height="30" colspan="2" bgcolor="#CCCCCC" class="deepred">會員注冊</td>
??????? </tr>
??????? <tr>
????????? <td width="50%" height="24" align="center" bgcolor="#FFFFFF">會員</td>
????????? <td align="center" bgcolor="#FFFFFF"><input name="username" type="text" id="username" size="16"></td>
??????? </tr>
??????? <tr>
????????? <td width="50%" height="24" align="center" bgcolor="#FFFFFF">密碼</td>
????????? <td align="center" bgcolor="#FFFFFF"><input name="password" type="password" id="password" size="16"></td>
??????? </tr>
??????? <tr>
????????? <td width="50%" height="24" align="center" bgcolor="#FFFFFF">驗證密碼</td>
????????? <td align="center" bgcolor="#FFFFFF"><input name="confirm" type="password" id="confirm" size="16"></td>
??????? </tr>
??????? <tr>
????????? <td width="50%" height="24" align="center" bgcolor="#FFFFFF">E-mail</td>
????????? <td align="center" bgcolor="#FFFFFF"><input name="email" type="text" id="email" size="16"></td>
??????? </tr>
??????? <tr>
????????? <td width="50%" height="24" align="center" bgcolor="#FFFFFF"><input type="submit" name="Submit" value="重寫"></td>
????????? <td align="center" bgcolor="#FFFFFF"><input type="submit" name="Submit2" value="注冊"></td>
??????? </tr>
? </form>
????? </table></td>
??? <td width="1" valign="top"></td>
??? <td width="100"> </td>
? </tr>
? <tr align="center" bgcolor="#990000">
??? <td height="60" colspan="5" class="white">copyright© 2003 Shopping123</td>
? </tr>
</table>
</body>
</html>
?regpost.jsp:注冊表單提交頁面<%@ page contentType="text/html;charset=gb2312" pageEncoding="gb2312" %>
<%@ page import="reg"%>
<html>
<head>
<title>Shopping123</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="styles/shoppingstyle.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0">
<%
?String username = new String(request.getParameter("username").getBytes("ISO8859_1")).trim();
?String password = new String(request.getParameter("password").getBytes("ISO8859_1")).trim();
?String confirm = new String(request.getParameter("confirm").getBytes("ISO8859_1")).trim();
?String email = new String(request.getParameter("email").getBytes("ISO8859_1")).trim();
%>
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
? <tr bgcolor="#990000">
??? <td height="80" colspan="5"><table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
??????? <tr>
????????? <td width="120"> </td>
????????? <td class="caption">Shopping123</td>
????????? <td width="200"> </td>
??????? </tr>
????? </table></td>
? </tr>
? <tr>
??? <td width="100" align="center" valign="top"> </td>
??? <td width="1" valign="top"></td>
??? <td width="400" align="center" valign="top">
<table width="100%" height="20" border="0" cellpadding="0" cellspacing="0">
??????? <tr>
????????? <td> </td>
??????? </tr>
????? </table>
<jsp:useBean id="regID" class="reg" scope="session"/>
<%
?if(regID.reg(username,password,confirm,email))
?{
? out.print("ok");
? String newID = regID.getID() + "";
%>
????? <table width="100%" border="0" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
??????? <tr align="center">
????????? <td height="30" colspan="2" bgcolor="#CCCCCC" class="deepred">恭喜您,注冊成功!</td>
??????? </tr>
??????? <tr>
????????? <td width="50%" height="24" align="center" bgcolor="#FFFFFF">編號</td>
????????? <td align="center" bgcolor="#FFFFFF"><%=newID%></td>
??????? </tr>
??????? <tr>
????????? <td width="50%" height="24" align="center" bgcolor="#FFFFFF">會員</td>
????????? <td align="center" bgcolor="#FFFFFF"><%=username%></td>
??????? </tr>
??????? <tr>
????????? <td width="50%" height="24" align="center" bgcolor="#FFFFFF">密碼</td>
????????? <td align="center" bgcolor="#FFFFFF"><%=password%></td>
??????? </tr>
??????? <tr>
????????? <td width="50%" height="24" align="center" bgcolor="#FFFFFF">E-mail</td>
????????? <td align="center" bgcolor="#FFFFFF"><%=email%></td>
??????? </tr>
????? </table>
<%
? out.print("<br>");
? out.print("<a href=javascript:window.close()>關(guān)閉</a>");
?}else{
? out.print("注冊失敗!<br>");
? out.print("該用戶名已有人使用,請使用另外的用戶名!");
? out.print("<a href=javascript:history.go(-1)>返回</a>");
?}
%>
?? </td>
??? <td width="1" valign="top"></td>
??? <td width="100"> </td>
? </tr>
? <tr align="center" bgcolor="#990000">
??? <td height="60" colspan="5" class="white">copyright© 2003 Shopping123</td>
? </tr>
</table>
</body>
</html>
?至此,我們已經(jīng)完成了一個用戶注冊、登錄的系統(tǒng)。 因為這是本人自己邊學(xué)邊做完成的,所以代碼一定有很多不完善的地方,歡迎大家批評指正。 以上所有代碼均經(jīng)本人測試通過。