文章目錄
- 1. 項目功能模塊設計
- 1. 登錄與權限控制:
- 2. 圖書管理功能(僅管理員)
- 3. 用戶功能(普通用戶):
- 2. 數據庫設計
- 3. 具體功能實現步驟
- 步驟 1:擴展 UserService 來管理角色
- 步驟 2:修改 LoginServlet 來跳轉到不同頁面
- 步驟 3:管理員后臺頁面(admin_home.jsp)
- 步驟 4:用戶首頁(user_home.jsp)
- 步驟 5:添加圖書頁面(add_book.jsp)
- 步驟 6:圖書搜索與瀏覽頁面(search_books.jsp)
- 步驟 7: 管理員圖書管理頁面(manage_books.jsp)
- 4. 效果展示:
- 管理員登陸界面:
- 添加圖書:
- 用戶登陸:
- 搜索圖書:
- 搜索結果:
1. 項目功能模塊設計
1. 登錄與權限控制:
- 登錄后,管理員和用戶通過 role 進行權限區分,role 可以是 “admin” 或 “user”。
- 用戶和管理員登錄成功后分別跳轉到不同的界面:
- 管理員:跳轉到管理后臺,進行圖書管理。
- 普通用戶:跳轉到圖書瀏覽界面,只能進行搜索和查閱。
2. 圖書管理功能(僅管理員)
- 圖書上架:管理員可以添加新書,包含書名、分類、價格等信息。
- 圖書下架:管理員可以刪除已上架的圖書。
- 圖書分類:管理員可以給圖書分類,幫助用戶進行分類查找。
3. 用戶功能(普通用戶):
- 搜索功能:普通用戶可以通過關鍵字搜索圖書,查看圖書信息。
- 查閱功能:用戶可以查看圖書的詳細信息,包括書名、作者、簡介等。
2. 數據庫設計
在數據庫中,我們需要幾個表來存儲數據:
- users 表:存儲用戶信息,包括用戶名、密碼、角色(role)。
- books 表:存儲圖書信息,包括書名、作者、價格、分類等。
- categories 表:存儲圖書分類信息。
示例表結構:
- users 表:
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50) NOT NULL,password VARCHAR(50) NOT NULL,role VARCHAR(20) NOT NULL -- role 為 admin 或 user
);
- books 表:
CREATE TABLE books (id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(100) NOT NULL,author VARCHAR(100),price DECIMAL(10, 2),category_id INT,available BOOLEAN DEFAULT TRUE -- true 表示在架,false 表示下架
);
- categories 表:
CREATE TABLE categories (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL
);
創建好后圖表結構如圖:
3. 具體功能實現步驟
步驟 1:擴展 UserService 來管理角色
在 UserService.java 中,添加對 role 的判斷,用來區分用戶和管理員。
public String checkLogin(String username, String password) {User user = userDao.findByUsername(username);if (user != null && user.getPassword().equals(password)) {return user.getRole(); // 返回用戶角色("admin" 或 "user")}return null;
}
步驟 2:修改 LoginServlet 來跳轉到不同頁面
在 LoginServlet.java 中,判斷登錄后返回的 role,并跳轉到不同的頁面。
@WebServlet("/login")
public class LoginServlet extends HttpServlet {private UserService userService = new UserService();@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");// 檢查用戶名和密碼String role = userService.checkLogin(username, password);if (role != null) {HttpSession session = request.getSession();session.setAttribute("username", username);session.setAttribute("role", role); // 保存用戶角色if ("admin".equals(role)) {response.sendRedirect("admin_home.jsp"); // 管理員跳轉到管理后臺} else {response.sendRedirect("user_home.jsp"); // 普通用戶跳轉到用戶首頁}} else {response.sendRedirect("fail.jsp");}}
}
步驟 3:管理員后臺頁面(admin_home.jsp)
管理員登錄后可以進入 admin_home.jsp 頁面,進行圖書的增刪改查操作。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Admin Home</title>
</head>
<body><h2>管理員首頁</h2><a href="add_book.jsp">添加圖書</a><a href="manage_books.jsp">管理圖書</a><a href="logout.jsp">登出</a>
</body>
</html>
步驟 4:用戶首頁(user_home.jsp)
普通用戶登錄后,跳轉到 user_home.jsp 頁面,可以瀏覽和搜索圖書。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>User Home</title>
</head>
<body><h2>歡迎,${sessionScope.username}</h2><a href="search_books.jsp">搜索圖書</a><a href="logout.jsp">登出</a>
</body>
</html>
步驟 5:添加圖書頁面(add_book.jsp)
管理員可以在 add_book.jsp 頁面填寫圖書信息,添加圖書到數據庫。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.sql.*, com.example.util.JDBCUtils" %> <!-- 導入 JDBC 工具類 -->
<html>
<head><title>添加圖書</title>
</head>
<body>
<h2>添加圖書</h2>
<form action="add_book" method="post">書名:<input type="text" name="title"><br>作者:<input type="text" name="author"><br>價格:<input type="text" name="price"><br>分類:<select name="category"><%try {Connection conn = JDBCUtils.getConnection();String sql = "SELECT * FROM categories"; // 查詢所有分類PreparedStatement stmt = conn.prepareStatement(sql);ResultSet rs = stmt.executeQuery();while (rs.next()) {String categoryName = rs.getString("name");int categoryId = rs.getInt("id");out.println("<option value='" + categoryId + "'>" + categoryName + "</option>");}rs.close();stmt.close();conn.close();} catch (SQLException e) {e.printStackTrace();}%></select><br><input type="submit" value="添加">
</form>
</body>
</html>
步驟 6:圖書搜索與瀏覽頁面(search_books.jsp)
普通用戶可以在 search_books.jsp 頁面輸入書名或作者進行圖書搜索。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.List, com.example.model.Book" %>
<html>
<head><title>搜索圖書</title>
</head>
<body>
<h2>搜索結果</h2><!-- 搜索框,供用戶輸入書名或作者 -->
<form action="search_books" method="get"><input type="text" name="query" placeholder="請輸入書名或作者"><input type="submit" value="搜索">
</form><hr><!-- 顯示搜索結果 -->
<table border="1"><thead><tr><th>書名</th><th>作者</th><th>價格</th><th>分類</th><th>操作</th></tr></thead><tbody><%List<Book> books = (List<Book>) request.getAttribute("searchResults"); // 獲取搜索結果if (books != null && !books.isEmpty()) {for (Book book : books) {%><tr><td><%= book.getTitle() %></td><td><%= book.getAuthor() %></td><td><%= book.getPrice() %></td><td><%= book.getCategoryId() %></td><td><a href="view_book?id=<%= book.getId() %>">查看</a></td></tr><%}} else {%><tr><td colspan="5">沒有找到符合條件的圖書。</td></tr><%}%></tbody>
</table><br><br>
<a href="admin_home.jsp">返回管理首頁</a> <!-- 管理員才有權限 -->
</body>
</html>
步驟 7: 管理員圖書管理頁面(manage_books.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.List, com.example.model.Book" %>
<html>
<head><title>圖書管理頁面</title>
</head>
<body>
<h2>圖書管理頁面</h2><!-- 顯示所有圖書 -->
<table border="1"><thead><tr><th>書名</th><th>作者</th><th>價格</th><th>分類</th><th>操作</th></tr></thead><tbody><%List<Book> books = (List<Book>) request.getAttribute("books"); // 獲取傳遞的圖書列表if (books != null && !books.isEmpty()) {for (Book book : books) {%><tr><td><%= book.getTitle() %></td><td><%= book.getAuthor() %></td><td><%= book.getPrice() %></td><td><%= book.getCategoryId() %></td><td><a href="edit_book.jsp?id=<%= book.getId() %>">編輯</a> |<a href="delete_book?id=<%= book.getId() %>">刪除</a></td></tr><%}} else {%><tr><td colspan="5">暫無圖書信息。</td></tr><%}%></tbody>
</table><br><br>
<a href="add_book.jsp">添加新圖書</a> <!-- 進入添加圖書頁面 -->
<a href="logout.jsp">登出</a>
</body>
</html>
項目結構如圖: