手机
当前位置:查字典教程网 >编程开发 >JSP教程 >在jsp中用bean和servlet联合实现用户注册、登录
在jsp中用bean和servlet联合实现用户注册、登录
摘要:声明:作者原创,版权所有。未经授权,不得转载在jsp中用bean和servlet联合实现用户注册、登录作者:imagebear版权:imag...

声明:作者原创,版权所有。未经授权,不得转载

在jsp中用bean和servlet联合实现用户注册、登录

作者:imagebear

版权:imagebear

本例需要的软件和运行环境:

1、Windows2000 Server操作系统

2、jdk1.4

3、JCreator2.5(java源码编辑调试器,吐血推荐!)

4、Macromedia JRun MX

5、Macromedia Dreamweaver MX(非必需)

6、MySQL数据库(最好安装MySQL Control Center)

一、数据库设计

用MySQL Control Center打开MySQL数据库,新建数据库shopping,在其下新建表tbl_user,其中各字段设置如下:

在jsp中用bean和servlet联合实现用户注册、登录1

二、编写连接数据库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);//加载数据库驱动程序

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;

}

}

//此方法用于获取大段文本,

//将其中的回车换行替换为<br>

//输出到html页面

public String rs_getHtmlString(String column)

{

try{

String str1 = this.rs.getString(column);

String str2 = "rn";

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;

}

}

//判断结果集中是否有数据

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 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文件应和上文所述DBConn.class文件放于同一目录下

2、本例主要研究注册的过程,其中的Email检测等方法并不完善,若要应用请自行设计方法

四、编写用户登陆的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、默认的jdk1.4中并没有servlet包,请至sun公司网页下载servlet.jar,放至jdk目录下的jrelib目录下,并在JCreator中设置jdk处添加servlet.jar包

2、本Servlet用于检验用户名和密码,若正确则将用户名写入Cookie,完成后将当前页重定向到index.jsp页

五、编写检测用户是否已经登陆的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,若不为空则说明已登录,反之说明没有登录。方法不够完善,您可以自行扩充。

六、在JRun中建立shopping服务器

打开JRun Administrator,新建shopping服务器,这里端口为8101。

将上文所述所有编译后的class文件连同org包拷至JRun的shopping服务器所在目录中的classes文件夹下,路径为:

C:JRun4serversshoppingdefault-eardefault-warWEB-INFclasses

七、建立jsp文件

应用DW,在C:JRun4serversshoppingdefault-eardefault-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" 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>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">卖场入口</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">注册</a></td>

<td align="center" bgcolor="#FFFFFF"><input type="submit" name="Submit" value="进入"></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">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>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">会员注册</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">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>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" 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">恭喜您,注册成功!</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()>关闭</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">copyright© 2003 Shopping123</td>

</tr>

</table>

</body>

</html>

至此,我们已经完成了一个用户注册、登录的系统。 因为这是本人自己边学边做完成的,所以代码一定有很多不完善的地方,欢迎大家批评指正。 以上所有代码均经本人测试通过。

【在jsp中用bean和servlet联合实现用户注册、登录】相关文章:

jsp和servlet的区别探讨

jsp实现购物程序

jsp中使用frameset框架 边框固定不让更改边框的大小

java中IP地址转换十进制数实现代码

jsp和servlet操作mysql中文乱码问题的解决办法

Jsp中的table多表头导出excel文件具体实现

jsp中error page设置方法

java servlet过滤器使用示例

jsp+jdbc实现连接数据库的方法

利用Java实现zip压缩/解压缩

精品推荐
分类导航