本文使用的資料庫為 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"> <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"> <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源碼下載下傳