天天看點

JSP使用者登入注冊

本文使用的資料庫為 Mysql:10.1.13-MariaDB  ,編譯器為 MyEclipse:2017 CI 6

資料庫

資料庫使用者名:root 密碼:123 

資料庫名:jsp_user 表名:users

表字段: 

name varchar not null primary key
password varchar not null
telphone varchar(11) not null primary key

資料庫連接配接代碼 ConnDB類

package edu.mju.conn;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 * @author wang_y_p
 *
 */
public class ConnDB {
	Connection  conn=null;//建立Connection對象,用于存儲資料庫連接配接
	int i=0;//用于傳回受影響的行數 (int)
	PreparedStatement pstmt=null;//SQL語句已預編譯并存儲在PreparedStatement對象中。 然後可以使用該對象多次有效地執行此語句。 
	ResultSet rs=null;//用于存儲ResultSet類型的結果集
	static String url="jdbc:mysql://localhost:3306/jsp_user";//連接配接的資料庫的名字:jsp_user
	static String user="root";//連接配接的資料庫的使用者名root
	static String password="123";//連接配接的資料庫的密碼123
	
	//連接配接資料庫的方法
	public static Connection getConnection(){
		Connection  conn=null;//建立Connection對象,用于存儲資料庫連接配接
		try {
			Class.forName("com.mysql.jdbc.Driver");//注冊驅動類
		}catch(ClassNotFoundException e){//沒有找到驅動類時
			System.out.print("無法找到驅動類");
		}
		try {
			//DriverManager:用于管理一組JDBC驅動程式的基本服務。getConnection:嘗試建立與給定資料庫URL的連接配接
			conn=DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		if(conn==null){
			System.out.print("資料庫連接配接失敗");
		}
		return conn;
	}
	//登陸查詢
	public ResultSet doQuery(String sql,String name,String password){
		try{
			conn=ConnDB.getConnection();//調用資料庫連接配接getConnection
			//conn.prepareStatement(sql):建立一個 PreparedStatement對象,用于将參數化的SQL語句發送到資料庫。 
			pstmt=conn.prepareStatement(sql);//将使用者定義的sql發送到上面conn的prepareStatement方法,存儲在一開始定義的PreparedStatement pstmt對象中
			pstmt.setString(1, name);//設定sql語句第一個 ? 的值
			pstmt.setString(2, password);//設定sql語句第二個 ? 的值
			rs=pstmt.executeQuery();//執行PreparedStatement的executeQuery()方法 ,結果是一個ResultSet結果集
		}catch (SQLException e) {
			e.printStackTrace();
		}
		return rs;//傳回ResultSet類型的rs
	}
	//檢測使用者名
	public ResultSet doQuery(String sql,String name)
	{
		try{
			conn=ConnDB.getConnection();//調用資料庫連接配接getConnection
			//conn.prepareStatement(sql):建立一個 PreparedStatement對象,用于将參數化的SQL語句發送到資料庫。 
			pstmt=conn.prepareStatement(sql);//将使用者定義的sql發送到上面conn的prepareStatement方法,存儲在一開始定義的PreparedStatement pstmt對象中
			pstmt.setString(1, name);//設定sql語句第一個 ? 的值
			rs=pstmt.executeQuery();//執行PreparedStatement的executeQuery()方法 ,結果是一個ResultSet結果集
		}catch (SQLException e) {
			e.printStackTrace();
		}
		return rs;//傳回ResultSet類型的rs
	}
	//檢測使用者名、驗證手機
	public ResultSet doVerify(String sql,String name,String telphone)
	{
		try{
			conn=ConnDB.getConnection();//調用資料庫連接配接getConnection
			//conn.prepareStatement(sql):建立一個 PreparedStatement對象,用于将參數化的SQL語句發送到資料庫。 
			pstmt=conn.prepareStatement(sql);//将使用者定義的sql發送到上面conn的prepareStatement方法,存儲在一開始定義的PreparedStatement pstmt對象中
			pstmt.setString(1, name);//設定sql語句第一個 ? 的值
			pstmt.setString(2, telphone);//設定sql語句第二個 ? 的值
			rs=pstmt.executeQuery();//執行PreparedStatement的executeQuery()方法 ,結果是一個ResultSet結果集
		}catch (SQLException e) {
			e.printStackTrace();
		}
		return rs;//傳回ResultSet類型的rs
	}
	//密碼重置
	public int doChange(String sql,String name,String password){
		try{
			conn=ConnDB.getConnection();//調用資料庫連接配接getConnection
			//conn.prepareStatement(sql):建立一個 PreparedStatement對象,用于将參數化的SQL語句發送到資料庫。 
			pstmt=conn.prepareStatement(sql);//将使用者定義的sql發送到上面conn的prepareStatement方法,存儲在一開始定義的PreparedStatement pstmt對象中
			pstmt.setString(1, password);//設定sql語句第一個 ? 的值
			pstmt.setString(2, name);//設定sql語句第二個 ? 的值
			i=pstmt.executeUpdate();//執行PreparedStatement的executeUpdate()方法,傳回的是受影響的行數 (int)
		}catch (SQLException e) {
			e.printStackTrace();
		}
		return i;//傳回的是受影響的行數 (int)
	}
	//注冊
	public int doUpdate(String sql,String name,String password,String telphone){
		try{
			conn=ConnDB.getConnection();//調用資料庫連接配接getConnection
			//conn.prepareStatement(sql):建立一個 PreparedStatement對象,用于将參數化的SQL語句發送到資料庫。 
			pstmt=conn.prepareStatement(sql);//将使用者定義的sql發送到上面conn的prepareStatement方法,存儲在一開始定義的PreparedStatement pstmt對象中
			pstmt.setString(1, name);//設定sql語句第一個 ? 的值
			pstmt.setString(2, password);//設定sql語句第二個 ? 的值
			pstmt.setString(3, telphone);//設定sql語句第三個 ? 的值
			i=pstmt.executeUpdate();//執行PreparedStatement的executeUpdate()方法,傳回的是受影響的行數 (int)
		}catch (SQLException e) {
			e.printStackTrace();
		}
		return i;//傳回的是受影響的行數 (int)
	}
	
	
}
           

這裡要注意:

(1)url:jdbc:mysql://localhost:3306/xxx  xxx是你的資料庫名

(2)user:root 一般mysql預設使用者名root

(3)password:XXX 使用者名自定義

使用者登入界面:Login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>使用者登入界面</title>
</head>
<body>

<center>
<h1><font color="black">歡迎登入</font></h1>
<br/><br/>
<form action="Login_ok.jsp" name="form1">
<table>
	<tr>
		<th><font color="black">使用者名</font></th>
		<td colspan="2"><input type="text" name="user" class="txt1"></td>
	</tr>
	<tr>
		<th><font color="black">密碼</font></th>
		<td colspan="2"><input type="password" name="pwd" class="txt1"></td>
	</tr>
	<tr></tr>
	<tr>
		<td scope="col">&nbsp;<input type="submit" name="submit" value="登入" class="button1"></td>
		<td><a href="Find.jsp" target="_blank" rel="external nofollow" ><input type="button" name="submit1" value="忘記密碼" class="button1"></a></td>
		<td><a href="Register.jsp" target="_blank" rel="external nofollow" ><input type="button" name="submit2"  value="立即注冊" class="button1"></a></td>
	</tr>
</table>
</form>
</center>

</body>
</html>
           

這裡要注意:

(1)<form action="xxx.jsp" >:xxx.jsp為要處理的頁面

(2)<a href="xxx.jsp" target="_blank" rel="external nofollow" >:xxx.jsp為要跳轉的頁面

登入處理頁面:Login_ok.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="edu.mju.conn.ConnDB" %>
<%@page import="java.sql.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登入處理界面</title>
</head>
<body>

<%
	request.setCharacterEncoding("UTF-8");//設定對用戶端請求和資料庫取值時的編碼
	String name= request.getParameter("user");//擷取Login頁面送出的user文本框資料
	String password=request.getParameter("pwd");//擷取Login頁面送出的pwd文本框資料
	ConnDB c=new ConnDB();//建立ConnDB對象
	String sql="select * from users where name=? and password=?";//查詢語句指派為sql
	ResultSet rs=c.doQuery(sql, name, password);//建立結果集rs,執行ConnDB的doQuery方法,将資料庫查詢結果指派給rs
	if(rs.next()){//當查詢出有結果
		response.sendRedirect("index.jsp");
	}
	else{
%>
 <script type="text/javascript">alert("登陸失敗,請重新登陸!")</script>	
<%
	response.setHeader("Refresh", "1;URL=Login.jsp");
}
%>
</body>
</html>
           

這裡要注意:

(1)sql語句所查詢的資料庫表名要與資料庫裡面的一緻

使用者注冊界面Register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>歡迎注冊</title>
<script type="text/javascript">
	//驗證密碼是否一緻,輸入框是否有空
	function check(){
			
		if(form1.pwd1.value!=form1.pwd2.value){
			 alert("兩次輸入密碼不一緻,請重新輸入!");
	   		 form1.pwd1.focus();
	   		 return false;
		}
		if(form1.pwd1.value==""||form1.pwd2.value==""||form1.user.value==""||form1.telphone.value==""){
			 alert("不允許有空!");
			 form1.user.focus();
			 return false;
		}
		
	
		var re = /^1\d{10}$/ ;//表達式
		if(!re.test(form1.telphone.value)){
			alert("手機号碼格式不正确,請重新輸入11位手機号!");
			return false;
		}
		
		
	}

	
</script>

</head>
<body>
<center>
	<h1><font color="black">歡迎注冊</font></h1>
	<br/><br/>
	<form action="Register_ok.jsp" onsubmit="return check()" name="form1" id="form1" method="post">
	<table >
	<tr>
		<th align="right"><font color="black"><font color="red">*</font>使用者名</font></th>
		<td><input type="text" id="user" name="user"></td>
	</tr>
	<tr>
		<th align="right"><font color="black"><font color="red">*</font>請設定密碼</font></th>
		<td><input type="password" name="pwd1" id="pwd1"></td>
	</tr>
	<tr>
		<th align="right"><font color="black"><font color="red">*</font>請确認密碼</font></th>
		<td><input type="password" name="pwd2"></td>
	</tr>
	<tr>
		<th align="right"><font color="black"><font color="red">*</font>驗證手機</font></th>
		<td><input type="text" name="telphone" id="telphone"></td>
	</tr>
	<tr>
		<td colspan="2" scope="col"><input type="submit" name="submit" value="立即注冊" style=" width:100%;background-color: #87CEEB;"></td>
	</tr>
</table>
</form>
</center>
</body>
</html>
           

使用者注冊處理界面:Register_ok.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="edu.mju.conn.ConnDB" %>
<%@page import="java.sql.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注冊處理</title>
</head>
<body>
<%
	
	request.setCharacterEncoding("UTF-8");//設定對用戶端請求和資料庫取值時的編碼
	String name= request.getParameter("user");//擷取Register頁面送出的user文本框資料
	String password=request.getParameter("pwd1");//擷取Register頁面送出的pwd1文本框資料
	String telphone=request.getParameter("telphone");//擷取Register頁面送出的telphone文本框資料
	ConnDB c=new ConnDB();//建立ConnDB對象
	String sql="insert into users values(?,?,?)";
	int i=c.doUpdate(sql, name, password, telphone);//執行ConnDB.doUpdate()方法,傳回Int類型
	if(i!=0){//判斷i是否為0;不為0時有更新
	%>
			<script type="text/javascript">alert("注冊成功,1秒後自動跳轉到登入頁面!")</script>	
	<%
			response.setHeader("Refresh","1;URL=Login.jsp");
	}else{
	%>
		<script type="text/javascript">alert("注冊失敗,1秒後自動跳轉到注冊頁面!")</script>	
	<% 
		response.setHeader("Refresh", "1;URL=Register.jsp");
	}
%>
</body>
</html>
           

找回密碼界面Find.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>忘記密碼</title>

<script type="text/javascript">
	//驗證密碼是否一緻,輸入框是否有空
	function check(){
			
		if(form1.pwd1.value!=form1.pwd2.value){
			 alert("兩次輸入密碼不一緻,請重新輸入!");
	   		 form1.pwd1.focus();
	   		 return false;
		}
		if(form1.pwd1.value==""||form1.pwd2.value==""||form1.user.value==""||form1.telphone.value==""){
			 alert("不允許有空!");
			 form1.user.focus();
			 return false;
		}
		
	
		var re = /^1\d{10}$/ ;//表達式
		if(!re.test(form1.telphone.value)){
			alert("手機号碼格式不正确,請重新輸入11位手機号!");
			return false;
		}
		
		
	}

	
</script>
</head>
<body>
<center>
	<h1><font color="black">找回密碼</font></h1>
	<br/><br/>
	<form action="Find_ok.jsp" onsubmit="return check()"  name="form1" id="form1" method="post">
	<table>
	<tr>
		<th align="right"><font color="black"><font color="red">*</font>使用者名</font></th>
		<td><input type="text" name="user"></td>
	</tr>
	<tr>
		<th align="right"><font color="black"><font color="red">*</font>驗證手機</font></th>
		<td><input type="text" name="telphone" id="telphone"></td>
	</tr>
	<tr>
		<th align="right"><font color="black"><font color="red">*</font>請設定密碼</font></th>
		<td><input type="password" name="pwd1" id="pwd1"></td>
	</tr>
	<tr>
		<th align="right"><font color="black"><font color="red">*</font>請确認密碼</font></th>
		<td><input type="password" name="pwd2" id="pwd2"></td>
	</tr>
	<tr>
		<th colspan="2" scope="col">&nbsp;<input type="submit" name="submit"value="确  定" style="width: 100px;background-color: #87CEEB;"></th>
	</tr>
</table>
</form>
</center>
</body>
</html>
           

找回密碼處理頁面Find_ok.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="edu.mju.conn.ConnDB" %>
<%@page import="java.sql.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>執行更改</title>
</head>
<body>
<%
	request.setCharacterEncoding("UTF-8");//設定對用戶端請求和資料庫取值時的編碼
	boolean g=false;
	String name= request.getParameter("user");//擷取Find頁面送出的user文本框資料
	String password=request.getParameter("pwd1");//擷取Find頁面送出的pwd1文本框資料
	String telphone=request.getParameter("telphone");//擷取Find頁面送出的telphone文本框資料
	ConnDB c=new ConnDB();//建立ConnDB對象
	String sql="select * from users where name=? and telphone=?";
	ResultSet rs=c.doVerify(sql, name, telphone);//執行ConnDB.doVerify()方法,傳回結果集rs
	if(rs.next()){//當使用者名和密碼正确時
		String sql2="update users set password=? where name=?";
		int i=c.doChange(sql2, name, password);//執行ConnDB.doChange()方法,傳回int類型
		if(i!=0){
	%>
			<script type="text/javascript">alert("修改成功!")</script>	
	<%
			response.setHeader("Refresh", "1;URL=Login.jsp");
		}
	}else{
		%>
		<script type="text/javascript">alert("使用者名或手機驗證失敗!")</script>	
		<%
		response.setHeader("Refresh", "1;URL=Find.jsp");
	}
	
%>
</body>
</html>
           

登入首頁 index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>歡迎您</title>

  </head>
  
  <body>
<center><font color="black" size="450px" >歡迎登陸!</font></center>

  </body>
</html>
           

源碼:csdn源碼下載下傳

繼續閱讀