系统必须要有注册登录功能,并且至少要实现基本的数据库操作(增删改查)。系统的实现需要使用我们这门课程学习的技术,包括JSP、Servlet、JDBC、EL、JSTL和过滤器。
3条回答 默认 最新
关注让【道友老李】来帮你解答,本回答参考通义千问qwen-plus编写,并整理提供,如果还有疑问可以点击头像关注,评论或留言
### 系统需求分析为了满足系统的需求,我们需要实现一个具备注册登录功能,并能够进行基本数据库操作(增删改查)的Web应用。我们将使用以下技术:
- JSP:用于生成动态网页。
- Servlet:用于处理用户请求和响应。
- JDBC:用于与数据库进行交互。
- EL:用于在JSP页面中访问数据。
- JSTL:用于在JSP页面中进行逻辑控制。
- 过滤器:用于处理请求和响应的预处理和后处理。
系统设计
1. 数据库设计
假设我们有一个用户表
users,其结构如下:CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, email VARCHAR(100) );2. 项目结构
WebContent/ ├── META-INF/ │ └── MANIFEST.MF ├── WEB-INF/ │ ├── lib/ │ ├── web.xml │ └── classes/ │ └── com/ │ └── example/ │ ├── controller/ │ │ ├── LoginServlet.java │ │ ├── RegisterServlet.java │ │ └── UserServlet.java │ ├── dao/ │ │ └── UserDao.java │ ├── model/ │ │ └── User.java │ └── filter/ │ └── AuthFilter.java ├── index.jsp ├── login.jsp ├── register.jsp └── user.jsp3. 主要类和接口
3.1 User.java
package com.example.model; public class User { private int id; private String username; private String password; private String email; // Getters and Setters }3.2 UserDao.java
package com.example.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import com.example.model.User; import com.example.util.DBUtil; public class UserDao { public void addUser(User user) throws SQLException { String sql = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)"; try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setString(1, user.getUsername()); ps.setString(2, user.getPassword()); ps.setString(3, user.getEmail()); ps.executeUpdate(); } } public User getUserByUsername(String username) throws SQLException { String sql = "SELECT * FROM users WHERE username = ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setString(1, username); try (ResultSet rs = ps.executeQuery()) { if (rs.next()) { User user = new User(); user.setId(rs.getInt("id")); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); user.setEmail(rs.getString("email")); return user; } } } return null; } public List<User> getAllUsers() throws SQLException { String sql = "SELECT * FROM users"; List<User> users = new ArrayList<>(); try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery()) { while (rs.next()) { User user = new User(); user.setId(rs.getInt("id")); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); user.setEmail(rs.getString("email")); users.add(user); } } return users; } public void updateUser(User user) throws SQLException { String sql = "UPDATE users SET username = ?, password = ?, email = ? WHERE id = ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setString(1, user.getUsername()); ps.setString(2, user.getPassword()); ps.setString(3, user.getEmail()); ps.setInt(4, user.getId()); ps.executeUpdate(); } } public void deleteUser(int id) throws SQLException { String sql = "DELETE FROM users WHERE id = ?"; try (Connection conn = DBUtil.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setInt(1, id); ps.executeUpdate(); } } }3.3 DBUtil.java
package com.example.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBUtil { private static final String URL = "jdbc:mysql://localhost:3306/yourdb"; private static final String USER = "youruser"; private static final String PASSWORD = "yourpassword"; static { try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USER, PASSWORD); } }3.4 LoginServlet.java
package com.example.controller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.example.dao.UserDao; import com.example.model.User; @WebServlet("/login") 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"); UserDao userDao = new UserDao(); User user = null; try { user = userDao.getUserByUsername(username); } catch (SQLException e) { e.printStackTrace(); } if (user != null && user.getPassword().equals(password)) { HttpSession session = request.getSession(); session.setAttribute("user", user); response.sendRedirect("user.jsp"); } else { request.setAttribute("error", "Invalid username or password"); request.getRequestDispatcher("login.jsp").forward(request, response); } } }3.5 RegisterServlet.java
package com.example.controller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.example.dao.UserDao; import com.example.model.User; @WebServlet("/register") 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"); String email = request.getParameter("email"); User user = new User(); user.setUsername(username); user.setPassword(password); user.setEmail(email); UserDao userDao = new UserDao(); try { userDao.addUser(user); request.setAttribute("success", "Registration successful"); request.getRequestDispatcher("login.jsp").forward(request, response); } catch (SQLException e) { e.printStackTrace(); request.setAttribute("error", "Registration failed"); request.getRequestDispatcher("register.jsp").forward(request, response); } } }3.6 UserServlet.java
package com.example.controller; import java.io.IOException; import java.sql.SQLException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.example.dao.UserDao; import com.example.model.User; @WebServlet("/users") public class UserServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { UserDao userDao = new UserDao(); List<User> users = null; try { users = userDao.getAllUsers(); } catch (SQLException e) { e.printStackTrace(); } request.setAttribute("users", users); request.getRequestDispatcher("user.jsp").forward(request, response); } }3.7 AuthFilter.java
package com.example.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class AuthFilter implements Filter { public void init(FilterConfig fConfig) throws ServletException { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; HttpSession session = httpRequest.getSession(false); if (session == null || session.getAttribute("user") == null) { httpResponse.sendRedirect("login.jsp"); } else { chain.doFilter(request, response); } } public void destroy() { } }JSP 页面
4.1 index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <title>Home</title> </head> <body> <h1>Welcome to the User Management System</h1> <a href="login.jsp">Login</a> | <a href="register.jsp">Register</a> </body> </html>4.2 login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <title>Login</title> </head> <body> <h1>Login</h1> <form action="login" method="post"> <label for="username">Username:</label> <input type="text" id="username" name="username" required><br> <label for="password">Password:</label> <input type="password" id="password" name="password" required><br> <input type="submit" value="Login"> </form> <p style="color: red;">${error}</p> <p style="color: green;">${success}</p> </body> </html>4.3 register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <title>Register</title> </head> <body> <h1>Register</h1> <form action="register" method="post"> <label for="username">Username:</label> <input type="text" id="username" name="username" required><br> <label for="password">Password:</label> <input type="password" id="password" name="password" required><br> <label for="email">Email:</label> <input type="email" id="email" name="email" required><br> <input type="submit" value="Register"> </form> <p style="color: red;">${error}</p> <p style="color: green;">${success}</p> </body> </html>4.4 user.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html> <html> <head> <title>User Management</title> </head> <body> <h1>User Management</h1> <table border="1"> <tr> <th>ID</th> <th>Username</th> <th>Email</th> <th>Action</th> </tr> <c:forEach var="user" items="${users}"> <tr> <td>${user.id}</td> <td>${user.username}</td> <td>${user.email}</td> <td> <a href="edit?userId=${user.id}">Edit</a> | <a href="delete?userId=${user.id}">Delete</a> </td> </tr> </c:forEach> </table> <a href="logout">Logout</a> </body> </html>配置文件
5.1 web.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.example.controller.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> <servlet> <servlet-name>RegisterServlet</servlet-name> <servlet-class>com.example.controller.RegisterServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RegisterServlet</servlet-name> <url-pattern>/register</url-pattern> </servlet-mapping> <servlet> <servlet-name>UserServlet</servlet-name> <servlet-class>com.example.controller.UserServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UserServlet</servlet-name> <url-pattern>/users</url-pattern> </servlet-mapping> <filter> <filter-name>AuthFilter</filter-name> <filter-class>com.example.filter.AuthFilter</filter-class> </filter> <filter-mapping> <filter-name>AuthFilter</filter-name> <url-pattern>/user.jsp</url-pattern> <url-pattern>/users</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>总结
以上是一个完整的基于JSP、Servlet、JDBC、EL、JSTL和过滤器的用户管理系统。该系统实现了注册、登录功能,并提供了基本的数据库操作(增删改查)。通过上述代码和配置,你可以快速搭建并运行这个系统。希望这些内容对你有所帮助!
解决 无用评论 打赏 举报