Servlet+JDBC 實戰開發書店項目講解第四篇:登錄注冊實現
在本篇博客中,我們將繼續講解 Servlet+JDBC 實戰開發書店項目。這次我們將重點講解如何實現登錄和注冊功能。
1. 創建數據庫表
首先,我們需要在數據庫中創建兩個表,一個用于存儲用戶信息,另一個用于存儲書籍信息。
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50) NOT NULL,password VARCHAR(50) NOT NULL
);CREATE TABLE books (id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(100) NOT NULL,author VARCHAR(100) NOT NULL,price DECIMAL(8,2) NOT NULL
);
2. 編寫登錄和注冊頁面
接下來,我們需要編寫登錄和注冊頁面的 HTML,讓用戶可以輸入用戶名和密碼進行登錄或注冊操作。
login.html:
<!DOCTYPE html>
<html>
<head><title>Login</title>
</head>
<body><h2>Login</h2><form action="loginServlet" method="POST"><label for="username">Username:</label><input type="text" id="username" name="username" required><br><br><label for="password">Password:</label><input type="password" id="password" name="password" required><br><br><input type="submit" value="Login"></form>
</body>
</html>
register.html:
<!DOCTYPE html>
<html>
<head><title>Register</title>
</head>
<body><h2>Register</h2><form action="registerServlet" method="POST"><label for="username">Username:</label><input type="text" id="username" name="username" required><br><br><label for="password">Password:</label><input type="password" id="password" name="password" required><br><br><input type="submit" value="Register"></form>
</body>
</html>
3. 編寫登錄和注冊 Servlet
然后,我們需要編寫登錄和注冊的 Servlet,用于處理用戶提交的表單數據,并將其保存到數據庫中。
LoginServlet.java:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");// 進行用戶名和密碼的驗證邏輯// ...// 假設驗證邏輯通過,將用戶信息保存到會話中request.getSession().setAttribute("username", username);response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("Login Successful!");}
}
RegisterServlet.java:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class RegisterServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");// 進行用戶名和密碼的驗證邏輯// ...// 假設驗證邏輯通過,將用戶信息保存到數據庫中// ...response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("Registration Successful!");}
}
4. Servlet開發
好的,以下是一個簡單的用戶登錄功能的Servlet示例代碼:
package com.example.blog.servlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.example.blog.db.UserDatabase;
import com.example.blog.models.User;public class LoginServlet extends HttpServlet {private UserDatabase userDatabase;@Overridepublic void init() throws ServletException {// 初始化數據庫userDatabase = UserDatabase.getInstance();}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");// 檢查用戶名和密碼是否正確if (userDatabase.isValidUser(new User(username, password))) {// 登錄成功request.getSession().setAttribute("username", username);response.sendRedirect("home.jsp"); // 重定向到首頁或其他需要登錄后訪問的頁面} else {// 登錄失敗response.sendRedirect("login.jsp?error=true"); // 重定向到登錄頁面,并傳遞錯誤參數}}
}
上述代碼中,我們創建了一個名為LoginServlet
的Servlet類,它處理POST請求以接收用戶登錄信息。在doPost
方法中,我們從請求參數中獲取用戶名和密碼,并使用UserDatabase
類的isValidUser
方法來檢查用戶名和密碼是否正確。
如果用戶名和密碼匹配成功,我們將用戶名保存在會話中,并通過sendRedirect
方法將用戶重定向到首頁或其他需要登錄后訪問的頁面。如果登錄失敗,我們將用戶重定向回登錄頁面,并傳遞一個錯誤參數以在頁面上顯示錯誤消息。
請注意,上述示例僅提供了一個基本的框架來處理用戶登錄請求,并未包含真正的數據庫操作。你需要根據自己的數據庫結構和操作方式進行適當的修改。另外,你還需要創建一個相應的登錄頁面(例如login.jsp
),用于接收用戶輸入用戶名和密碼的表單,并將表單提交到上述LoginServlet
中處理。
希望以上示例對你有所幫助!如有任何疑問,請隨時提問。