Java web 实现简朴的登陆注册功能

十念  论坛元老 | 2025-3-26 13:48:37 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1619|帖子 1619|积分 4857

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、项目准备

  • 工具环境:


  • JDK 1.8+
  • MySQL 8.0+
  • MyEclipse 2022或IntelliJ IDEA
  • Tomcat 9.x

  • 数据库计划:
    创建名为user_db的数据库
  1. [/code] sql
  2. [code]CREATE TABLE users (
  3.     id INT AUTO_INCREMENT PRIMARY KEY,
  4.     username VARCHAR(50) NOT NULL UNIQUE,
  5.     password VARCHAR(100) NOT NULL,
  6.     email VARCHAR(100)
  7. );
复制代码
二、项目结构说明
src/
├── com.example.model → 实体类
│ └── User.java
├── com.example.util → 工具类
│ └── DBUtil.java
├── com.example.servlet → Servlet类
│ ├── LoginServlet.java
│ └── RegisterServlet.java
WebContent/
├── WEB-INF/
│ ├── web.xml
│ └── lib/ → 放置JDBC驱动
├── index.jsp → 首页
├── login.jsp → 登录页面
└── register.jsp → 注册页面
三、核心代码实现

  • User实体类(User.java)
  1. [/code] java
  2. [code]package com.example.model;
  3. public class User {
  4.     private int id;
  5.     private String username;
  6.     private String password;
  7.     private String email;
  8.     // 省略getter和setter方法
  9. }
复制代码

  • 数据库工具类(DBUtil.java)
  1. [/code] java
  2. [code]package com.example.util;
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.SQLException;
  6. public class DBUtil {
  7.     private static final String URL = "jdbc:mysql://localhost:3306/user_db?useSSL=false&serverTimezone=UTC";
  8.     private static final String USER = "root";
  9.     private static final String PASSWORD = "password"; // 修改为实际密码
  10.     static {
  11.         try {
  12.             Class.forName("com.mysql.cj.jdbc.Driver");
  13.         } catch (ClassNotFoundException e) {
  14.             e.printStackTrace();
  15.         }
  16.     }
  17.     public static Connection getConnection() throws SQLException {
  18.         return DriverManager.getConnection(URL, USER, PASSWORD);
  19.     }
  20. }
复制代码

  • 登录Servlet(LoginServlet.java)
  1. [/code] java
  2. [code]package com.example.servlet;
  3. import com.example.model.User;
  4. import com.example.util.DBUtil;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.IOException;
  11. import java.sql.Connection;
  12. import java.sql.PreparedStatement;
  13. import java.sql.ResultSet;
  14. @WebServlet("/login")
  15. public class LoginServlet extends HttpServlet {
  16.     @Override
  17.     protected void doPost(HttpServletRequest req, HttpServletResponse resp)
  18.             throws ServletException, IOException {
  19.         String username = req.getParameter("username");
  20.         String password = req.getParameter("password");
  21.         try (Connection conn = DBUtil.getConnection()) {
  22.             String sql = "SELECT * FROM users WHERE username = ?";
  23.             PreparedStatement pstmt = conn.prepareStatement(sql);
  24.             pstmt.setString(1, username);
  25.             
  26.             ResultSet rs = pstmt.executeQuery();
  27.             if (rs.next() && rs.getString("password").equals(password)) {
  28.                 User user = new User();
  29.                 user.setId(rs.getInt("id"));
  30.                 user.setUsername(rs.getString("username"));
  31.                 user.setEmail(rs.getString("email"));
  32.                
  33.                 req.getSession().setAttribute("user", user);
  34.                 resp.sendRedirect(req.getContextPath() + "/welcome.jsp");
  35.             } else {
  36.                 req.setAttribute("error", "用户名或密码错误");
  37.                 req.getRequestDispatcher("/login.jsp").forward(req, resp);
  38.             }
  39.         } catch (SQLException e) {
  40.             e.printStackTrace();
  41.             req.setAttribute("error", "数据库连接错误");
  42.             req.getRequestDispatcher("/login.jsp").forward(req, resp);
  43.         }
  44.     }
  45. }
复制代码

  • 注册Servlet(RegisterServlet.java)
  1. [/code] java
  2. [code]package com.example.servlet;
  3. import com.example.model.User;
  4. import com.example.util.DBUtil;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.IOException;
  11. import java.sql.Connection;
  12. import java.sql.PreparedStatement;
  13. import java.sql.SQLException;
  14. @WebServlet("/register")
  15. public class RegisterServlet extends HttpServlet {
  16.     @Override
  17.     protected void doPost(HttpServletRequest req, HttpServletResponse resp)
  18.             throws ServletException, IOException {
  19.                 String username = req.getParameter("username");
  20.                 String password = req.getParameter("password");
  21.                 String email = req.getParameter("email");
  22.                 User user = new User();
  23.                 user.setUsername(username);
  24.                 user.setPassword(password);
  25.                 user.setEmail(email);
  26.                 try (Connection conn = DBUtil.getConnection()) {
  27.                     String sql = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)";
  28.                     PreparedStatement pstmt = conn.prepareStatement(sql);
  29.                     pstmt.setString(1, username);
  30.                     pstmt.setString(2, password);
  31.                     pstmt.setString(3, email);
  32.                     
  33.                     int affectedRows = pstmt.executeUpdate();
  34.                     if (affectedRows > 0) {
  35.                         resp.sendRedirect(req.getContextPath() + "/login.jsp");
  36.                     } else {
  37.                         req.setAttribute("error", "注册失败,请重试");
  38.                         req.getRequestDispatcher("/register.jsp").forward(req, resp);
  39.                     }
  40.                 } catch (SQLException e) {
  41.                     e.printStackTrace();
  42.                     req.setAttribute("error", "数据库操作错误");
  43.                     req.getRequestDispatcher("/register.jsp").forward(req, resp);
  44.                 }
  45.             }
  46. }
复制代码
四、JSP页面示例(login.jsp)
  1. [/code] jsp
  2. [code]<%@ page contentType="text/html;charset=UTF-8" language="java" %>
  3. <html>
  4. <head>
  5.     <title>登录页面</title>
  6. </head>
  7. <body>
  8. <h2>用户登录</h2>
  9. <form action="login" method="post">
  10.     用户名:<input type="text" name="username"><br><br>
  11.     密码:<input type="password" name="password"><br><br>
  12.     <input type="submit" value="登录">
  13. </form>
  14. <% if (request.getAttribute("error") != null) { %>
  15.     <p style="color:red;"><%= request.getAttribute("error") %></p>
  16. <% } %>
  17. <a href="register.jsp">还没有账号?立即注册</a>
  18. </body>
  19. </html>
复制代码
五、设置说明

  • web.xml设置:
  1. [/code] xml
  2. [code]<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  5.          http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  6.          version="4.0">
  7.    
  8.     <servlet>
  9.         <servlet-name>LoginServlet</servlet-name>
  10.         <servlet-class>com.example.servlet.LoginServlet</servlet-class>
  11.     </servlet>
  12.    
  13.     <servlet>
  14.         <servlet-name>RegisterServlet</servlet-name>
  15.         <servlet-class>com.example.servlet.RegisterServlet</servlet-class>
  16.     </servlet>
  17.    
  18.     <servlet-mapping>
  19.         <servlet-name>LoginServlet</servlet-name>
  20.         <url-pattern>/login</url-pattern>
  21.     </servlet-mapping>
  22.    
  23.     <servlet-mapping>
  24.         <servlet-name>RegisterServlet</servlet-name>
  25.         <url-pattern>/register</url-pattern>
  26.     </servlet-mapping>
  27. </web-app>
复制代码
六、注意事项

  • 数据库驱动需要添加到项目的lib目录下(mysql-connector-java-8.0.26.jar)
  • 根据实际环境修改DBUtil类中的数据库连接参数
  • 初始状态下数据库是空的,首次运行前需要插入测试数据:
  1. [/code] sql
  2. [code]INSERT INTO users (username, password, email) VALUES
  3. ('admin', 'password123', 'admin@example.com'),
  4. ('user', 'user123', 'user@example.com');
复制代码
七、常见标题处理惩罚

  • 访问404错误:检查servlet映射的URL路径是否正确
  • 数据库连接失败:确认MySQL服务已启动,JDBC驱动版本是否匹配
  • 暗码不匹配:确保在注册时存储的是明文暗码(生产环境请利用加密算法)
八、安全建议(生产环境实用)

  • 利用PreparedStatement防止SQL注入
  • 暗码存储应采用MD5/SHA加密算法
  • 添加验证码机制
  • 利用HTTPS协议传输敏感数据
本文完整代码可在GitHub开源仓库获取(需注明出处),建议新手通过此项目实践明确JavaWeb开发的基本流程和核心技能点。学习过程中遇到标题可通过官方文档和社区论坛寻求资助。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

十念

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表