6月8日,在上个月传闻将要推出的百度问答网站“新知”(http://xinzhi.baidu.com)已经悄然上线,目前需要邀请码才能注册登录。
声明:作者原创,版权所有。未经授权,不得转载 在jsp中用bean和servlet联合实现用户注册、登录
作者:imagebear版权:imagebear
本例需要的软件和运行环境:1、Windows2000 Server操作系统2、jdk1.43、JCreator2.5(java源码编辑调试器,吐血推荐!)4、Macromedia JRun MX5、Macromedia Dreamweaver MX(非必需)6、MySQL数据库(最好安装MySQL Control Center)
一、数据库设计用MySQL Control Center打开MySQL数据库,新建数据库shopping,在其下新建表tbl_user,其中各字段设置如下:
二、编写连接数据库bean:DBConn.java
//DBConn.java
//include required classesimport 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);//加载数据库驱动程序 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()); } }
//执行查询操作 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; } }
//执行数据的插入、删除、修改操作 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; } }
//结果集指针跳转到某一行 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; } }
//此方法用于获取大段文本, //将其中的回车换行替换为 //输出到html页面 public String rs_getHtmlString(String column) { try{ String str1 = this.rs.getString(column); String str2 = \r\n"; String str3 = "; 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; } }
//判断结果集中是否有数据 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方法,调试用 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数据库,所以需要MySQL数据库的驱动下载后请将org包放至DBConn.java所在目录下以确保该bean能正常运行
三、编写用户注册的bean:reg.java
//reg.java
//import required classesimport 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","[email protected]")); 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文件应和上文所述DBConn.class文件放于同一目录下2、本例主要研究注册的过程,其中的Email检测等方法并不完善,若要应用请自行设计方法
四、编写用户登陆的Servlet:login.java
//login.java
//import required classesimport java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.sql.*;
//class loginpublic 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 copyright© 2003 Shopping123 至此,我们已经完成了一个用户注册、登录的系统。 因为这是本人自己边学边做完成的,所以代码一定有很多不完善的地方,欢迎大家批评指正。 以上所有代码均经本人测试通过。