寫在前面的話
本人也是剛接觸到JSP,還有很多需要學習的地方。用JSP實現登錄驗證和註冊我很認真的寫了詳細思路,以下代碼有什麼不合理或者需要改進的地方,大噶可以給我提寶貴的建議哈
數據庫
現有 數據庫 【userdemo】中表【information】
登錄實現
思路步驟:
(1)表單提交信息跳轉到登錄驗證界面,驗證表單提交信息是否註冊並且用戶名和密碼正確
(2)登錄驗證的思路:動態加載mysql驅動,連接數據庫中相對應的表,與表中數據進行比對,用flag標記狀態。根據比對結果跳轉登錄成功或者登錄失敗頁面
(3)特別注意:這裏跳轉頁面要使用 【請求轉發】,不要使用 【重定向】。請求轉發可以保留表單提交的數據,而重定向不能保留
登錄頁面
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登陸頁面</title>
<style>
a {
text-decoration: none;
color: black;
}
form {
display:inline;
}
</style>
</head>
<body>
<form action='register_check.jsp' method="post">
用戶名:<input type="text" name='name'><br>
密碼:<input type="password" name='pwd'><br>
<input type="submit" value="登錄">
</form>
<button><a href="1.jsp">註冊</a></button>
</body>
</html>
登錄驗證
register_check.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>登記驗證</title>
</head>
<body>
<%
Class.forName("com.mysql.jdbc.Driver");//動態加載mysql驅動
boolean flag = true;
Connection conn =DriverManager.getConnection("jdbc:mysql://localhost:3306/【數據庫名】?serverTimezone=UTC","root","【密碼】");
Statement stmt =conn.createStatement();
ResultSet RS_result = stmt.executeQuery("SELECT * FROM 【表名】 ");
String pwd,name;
while(RS_result.next()){
pwd = RS_result.getString("pwd");
name = RS_result.getString("name");
if(request.getParameter("name").equals(name)&&request.getParameter("pwd").equals(pwd)){
flag=false;
request.getRequestDispatcher("check_success.jsp").forward(request,response);
%>
<%
}else{
continue;
}
%>
<%
};
stmt.close();
conn.close();
if(flag)
request.getRequestDispatcher("check_fail.jsp").forward(request,response);
%>
</body>
</html>
登錄成功
check_success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登錄成功</title>
</head>
<body>
<h2>登錄成功</h2>
<%
//設置編碼
request.setCharacterEncoding("UTF-8");
//獲取值
String name = request.getParameter("name");
out.print("歡迎"+name);
%>
</body>
</html>
登錄失敗
check_fail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登錄失敗</title>
</head>
<body>
<h2>登陸失敗</h2>
<h2>輸入的用戶名或密碼有錯</h2>
</body>
</html>
註冊實現
思路步驟:
註冊頁面
1.jsp
(1)在登錄頁面中 點擊【註冊】按鈕(其內是一個a標籤) 進入註冊頁面
(2)註冊驗證同登錄驗證相類似。連接數據庫–>與數據庫中信息比對,是否已經有相同用戶名註冊–>若沒有則註冊成功,有則註冊失敗(用flag做標誌)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>註冊頁面</title>
</head>
<body>
<form action='registered.jsp' method="post">
用戶名:<input type="text" name='name'><br>
密碼:<input type="password" name='pwd'><br>
<input type="submit" value="註冊">
</form>
</body>
</html>
註冊驗證
registered.jsp
<%@page import="java.sql.*"%>
<%@page import="javax.sql.*"%>
<%@page import="javax.naming.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%request.setCharacterEncoding("utf-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>註冊驗證</title>
</head>
<body>
<%
Class.forName("com.mysql.jdbc.Driver");//動態加載mysql驅動
String name1=request.getParameter("name").trim();//去除首尾空格
String pwd1=request.getParameter("pwd").trim();
boolean flag = true;
Connection conn =DriverManager.getConnection("jdbc:mysql://localhost:3306/【數據庫名】?serverTimezone=UTC","root","【密碼】");
Statement stmt =conn.createStatement();
ResultSet RS_result = stmt.executeQuery("SELECT * FROM 【表名】 ");
String pwd,name;
while(RS_result.next()){
pwd = RS_result.getString("pwd");
name = RS_result.getString("name");
if(request.getParameter("name").equals(name)){
out.print("用戶已經存在 "+"請重新<a href=\"1.jsp\">註冊</a>");
flag=false;
break;
};
}
%>
<%
if(flag){
stmt.executeUpdate("insert into infomation values('"+name1+"','"+ pwd1 + "')");
%>
註冊成功!!!<br>
請點擊<a href="text.jsp">這裏</a>登錄!!!
<%
};
%>
<%
stmt.close();
conn.close();
%>
</body>
</html>
註冊成功
數據庫中