Java Web入门神器 用JSP+Servlet+MySQL实现用户登录注册功能​

技术栈与工具准备

JDK 1.8+、Tomcat 8.5+、MySQL 5.7+
开发工具推荐IntelliJ IDEA或Eclipse with WTP插件
需导入jar包:mysql-connector-java (驱动)、javax.servlet-api (Servlet支持)

数据库设计

创建用户表user,包含基础字段:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `password` varchar(32) NOT NULL,
  `email` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

实体类实现

创建User类映射数据库字段:

public class User {
    private int id;
    private String username;
    private String password;
    private String email;
    
    // 生成getter/setter方法
    // 建议重写toString()方法
}

DAO层开发

实现数据库操作类UserDAO:

public class UserDAO {
    public boolean register(User user) {
        String sql = "INSERT INTO user(username,password,email) VALUES(?,?,?)";
        try (Connection conn = DBUtil.getConnection();
             PreparedStatement ps = conn.prepareStatement(sql)) {
            ps.setString(1, user.getUsername());
            ps.setString(2, MD5Util.encode(user.getPassword()));
            ps.setString(3, user.getEmail());
            return ps.executeUpdate() > 0;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    public User login(String username, String password) {
        String sql = "SELECT * FROM user WHERE username=? AND password=?";
        // 实现查询逻辑
    }
}

工具类封装

数据库连接工具DBUtil:

public class DBUtil {
    private static final String URL = "jdbc:mysql://localhost:3306/db_name?useSSL=false";
    private static final String USER = "root";
    private static final String PASSWORD = "123456";

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }
}

密码加密工具MD5Util:

public class MD5Util {
    public static String encode(String str) {
        return DigestUtils.md5Hex(str);
    }
}

Servlet实现

注册处理RegisterServlet:

@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);

        boolean isSuccess = new UserDAO().register(user);
        if(isSuccess) {
            response.sendRedirect("login.jsp");
        } else {
            request.setAttribute("msg", "注册失败");
            request.getRequestDispatcher("register.jsp").forward(request, response);
        }
    }
}

登录处理LoginServlet:

@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");
        
        User user = new UserDAO().login(username, MD5Util.encode(password));
        if(user != null) {
            request.getSession().setAttribute("user", user);
            response.sendRedirect("welcome.jsp");
        } else {
            request.setAttribute("msg", "用户名或密码错误");
            request.getRequestDispatcher("login.jsp").forward(request, response);
        }
    }
}

JSP页面开发

登录页面login.jsp核心表单:

<form action="login" method="post">
    <input type="text" name="username" placeholder="用户名" required>
    <input type="password" name="password" placeholder="密码" required>
    <button type="submit">登录</button>
</form>
${msg}

注册页面register.jsp类似实现,表单action指向/register

过滤器配置

实现登录验证过滤器AuthFilter:

@WebFilter("/*")
public class AuthFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) 
        throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        String uri = request.getRequestURI();
        
        if(uri.contains("login") || uri.contains("register") 
            || uri.contains(".css") || uri.contains(".js")) {
            chain.doFilter(req, resp);
            return;
        }
        
        if(request.getSession().getAttribute("user") == null) {
            request.getRequestDispatcher("login.jsp").forward(req, resp);
            return;
        }
        chain.doFilter(req, resp);
    }
}

项目部署

  1. 将编译后的项目放入Tomcat的webapps目录
  2. 启动MySQL服务并确保数据库连接配置正确
  3. 启动Tomcat服务器
  4. 通过http://localhost:8080/项目名/login.jsp访问

功能扩展建议

  • 增加验证码功能
  • 实现密码找回模块
  • 添加记住密码功能(Cookie实现)
  • 使用Ajax实现异步验证
  • 引入Bootstrap优化前端界面
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值