使用JSP+Servlet+MySQL实现登录注册功能
创始人
2025-01-16 15:34:23
0

公众号封面

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉
🍎个人主页:Leo的博客
💞当前专栏: Java从入门到精通
✨特色专栏: MySQL学习
🥭本文内容:使用JSP+Servlet+MySQL实现登录注册功能
📚个人知识库: Leo知识库,欢迎大家访问

1.前言

大家好,我是Leo哥🫣🫣🫣,前几天一个在大学的粉丝跟我说:Leo哥,我们最近要搞那个Java期末作业,要求是通过Javaweb知识点,使用JDBC,MySQL,JSP,Servlet等技术实现一个登录和注册功能,能不能出一期教程啊,老师啥也不教。听到这里我也是感触颇深,让我看到我之前的影子,当时老师也是啥都不教,就念个PPT,啥都要咱们自己琢磨。既然这样,咱们就出一期保姆级教程。后面也会出一些demo案例放到这个系列,第一期就先来点简单的开胃菜吧好了,话不多说让我们开始吧😎😎😎。

2.环境配置

首先Leo哥这里先声明一下本次教程的环境配置哈,大家可以跟我横向对比。

因为是比较基础的一篇,考虑到做期末作业,没有接触到Maven,所以我们这里就还是使用原生jar包的方式哈。

环境:

  • Intellij IDEA 2023
  • MySQL8.0
  • Tomcat 8.5
  • JDK8
  • JDBC
  • Navicat 16

3.项目创建

首先我会带大家从零创建一个JavaWeb项目,然后进行环境测试没问题之后,我们再继续往下进行。

打开IDEA,File — New — Project进行创建

image-20231201164521620

开始创建项目,这里我们直接进模块创建。

image-20231202145436087

查看我们的项目结构,并引入MySQL依赖

image-20231202152727940

添加Tomcat依赖

image-20231202152908233

配置Tomcat服务器

首先点击IDEA,最上面,点击Edit Configuration进行配置

image-20231202153040456

然后依次按照我图中点击即可。

image-20231202153216016

然后依次点击选择自己的Artifacts进行配置。

image-20231202153310730

首先第一步检查配置一下自己本地的Tomcat路径,没问题之后,然后选择我们项目的访问路径,最后点击apply。

image-20231202153419753

最后我们启动项目,如果能访问到默认的JSP页面,说明我们项目环境搭建成功了。

image-20231202154153352

欧克,我们环境搭建篇大功告成!!!

4.数据库准备

4.1 SQL建表语句

大家可通过自行创建SQL表

DROP TABLE IF EXISTS `user`; CREATE TABLE `user` (   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,   `username` varchar(50) NOT NULL DEFAULT 'default',   `password` varchar(50) NOT NULL DEFAULT '123456',   `phone`  varchar(50) NOT NULL ,   PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; 

4.2 插入数据

INSERT INTO `user` VALUES (1, 'jack', '19978786751', '123456'); INSERT INTO `user` VALUES (2, 'tony', '19975067512', '123123'); INSERT INTO `user` VALUES (3, 'lisa', '19971286751', '123123');  

5.编写后端代码

5.1 代码及项目结构总览

image-20231202162940482

5.2 编写实体类

package org.javatop.case01.domain;  /**  * @author : Leo  * @version 1.0  * @date 2023-11-28 20:57  * @description :  */ public class User {     private int id;      private String username;      private String password;       private String phone;       public User(int id, String username, String password,  String phone) {         this.id = id;         this.username = username;         this.password = password;         this.phone = phone;     }      public String getPhone() {         return phone;     }      public void setPhone(String phone) {         this.phone = phone;     }      public User() {     }       public int getId() {         return id;     }      public void setId(int id) {         this.id = id;     }      public String getUsername() {         return username;     }      public void setUsername(String username) {         this.username = username;     }      public String getPassword() {         return password;     }      public void setPassword(String password) {         this.password = password;     }       @Override     public String toString() {         return "User{" +                 "id=" + id +                 ", username='" + username + '\'' +                 ", password='" + password + '\'' +                 ", phone='" + phone + '\'' +                 '}';     } } 

5.3 编写Dao接口

package org.javatop.case01.dao;  import org.javatop.case01.domain.User;  /**  * @author : Leo  * @version 1.0  * @date 2023-11-28 20:59  * @description :  */ public interface UserDao {      // 登录     User login(String username, String password);      // 注册     Boolean register(User user); } 

5.4 编写Dao实现类

package org.javatop.case01.dao.impl;   import org.javatop.case01.dao.UserDao; import org.javatop.case01.domain.User; import org.javatop.case01.utils.JdbcUtil;  import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet;  /**  * @author : Leo  * @version 1.0  * @date 2023-11-28 21:01  * @description :  */ public class UserDaoImpl  implements UserDao {     @Override     public User login(String username, String password) {         User user = null;         Connection connection = null;         PreparedStatement preparedStatement = null;         ResultSet resultSet = null;          try {             connection = JdbcUtil.getConnection();             String sql = "select * from user where username = ? and password= ?";             preparedStatement = connection.prepareStatement(sql);             preparedStatement.setString(1, username);             preparedStatement.setString(2, password);             resultSet = preparedStatement.executeQuery();             if(resultSet.next()){                 user = new User();                 user.setId(resultSet.getInt("id"));                 user.setUsername(resultSet.getString("username"));                 user.setPassword(resultSet.getString("password"));                 user.setPhone(resultSet.getString("phone"));                 System.out.println("登录成功" + user.toString());             } else {                 System.out.println("用户名或者密码错误");             }         } catch (Exception e) {             e.printStackTrace();         } finally {             JdbcUtil.release(resultSet, preparedStatement, connection);         }         return user;     }      @Override     public Boolean register(User user) {         Connection connection = null;         PreparedStatement preparedStatement = null;         ResultSet resultSet = null;         int result = 0;          try {             connection = JdbcUtil.getConnection();             String sql = "insert into user(username, password) values (?, ?);";             preparedStatement = connection.prepareStatement(sql);             preparedStatement.setString(1, user.getUsername());             preparedStatement.setString(2, user.getPassword());             result = preparedStatement.executeUpdate();          } catch (Exception e) {             e.printStackTrace();         } finally {             JdbcUtil.release(resultSet, preparedStatement, connection);         }         // 三目表达式,result等1则人会true,否则返回false         return result == 1 ? true:false;     } } 

5.5 实现Servlet

1.LoginServlet
package org.javatop.case01.controller;  import org.javatop.case01.dao.UserDao; import org.javatop.case01.dao.impl.UserDaoImpl; import org.javatop.case01.domain.User;  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 java.io.IOException;  /**  * @author : Leo  * @version 1.0  * @date 2023-12-02 14:34  * @description :  */ @WebServlet(name = "/login") public class LoginServlet extends HttpServlet {      @Override     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {         doPost(request,response);     }       @Override     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {          request.setCharacterEncoding("UTF-8");         response.setContentType("text/html;charset=UTF-8");          // 获取前端页面传过来的值         String username = request.getParameter("username");         String password = request.getParameter("password");          // 执行查询数据库逻辑         UserDao userDao = new UserDaoImpl();         User user = userDao.login(username, password);          // 如果根据用户名和密码能查得到值         if (user != null) {             request.setAttribute("user", user);             request.getRequestDispatcher("/success.jsp").forward(request, response);         } else {    // 用户名或者密码错误执行以下代码             request.setAttribute("message", "用户名或者密码错误");             request.getRequestDispatcher("/defeat.jsp").forward(request, response);         }     } } 
2.RegisterServlet
package org.javatop.case01.controller;  import org.javatop.case01.dao.UserDao; import org.javatop.case01.dao.impl.UserDaoImpl; import org.javatop.case01.domain.User;  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 java.io.IOException;  /**  * @author : Leo  * @version 1.0  * @date 2023-12-02 16:28  * @description : 注册接口  */ @WebServlet(name = "/register") public class RegisterServlet extends HttpServlet {      @Override     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {         doPut(req, resp);     }      @Override     protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {         req.setCharacterEncoding("UTF-8");         resp.setContentType("text/html;charset=UTF-8");          String username = req.getParameter("username");         String password = req.getParameter("password");          User user = new User();         user.setUsername(username);         user.setPassword(password);          UserDao userDao = new UserDaoImpl();         if (userDao.register(user)) {             System.out.println("注册成功");             // 注册成功,跳转登录页面             req.getRequestDispatcher("register-success.jsp").forward(req,resp);         } else {             System.out.println("注册失败");             req.setAttribute("message", "注册失败");             req.getRequestDispatcher("register.jsp").forward(req,resp);         }      } } 

5.6 编写数据库连接工具类

package org.javatop.case01.utils;  import java.sql.*;  /**  * @author : Leo  * @version 1.0  * @date 2023-11-28 20:59  * @description : 数据库连接工具类  */ public class JdbcUtil {      /**      * 1、获取Connection      * @return Connection      * @throws Exception      */     public static Connection getConnection() throws Exception {          Class.forName("com.mysql.cj.jdbc.Driver");         return DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root", "root");      }      /**      * 2、释放资源      * @param resultSet resultSet      * @param statement statement      * @param connection connection      */     public static void release(ResultSet resultSet, Statement statement, Connection connection) {         if (resultSet != null) {             try {                 resultSet.close();             } catch (SQLException e) {                 e.printStackTrace();             }         }         if (statement != null) {             try {                 statement.close();             } catch (SQLException e) {                 e.printStackTrace();             }         }         if (connection != null) {             try {                 connection.close();             } catch (SQLException e) {                 e.printStackTrace();             }         }     } } 

6.编写前端代码

这里为了演示效果我实现了两个简单的登录注册页面

image-20231202201827183

image-20231202201849306

6.1 登录页面

<%--   Created by IntelliJ IDEA.   User: Administrator   Date: 2023/11/28   Time: 20:52   To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %>        Login Page        

登录

去注册

6.2 注册页面

<%--   Created by IntelliJ IDEA.   User: Administrator   Date: 2023/11/28   Time: 20:52   To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %>        Login Page        

注册

6.3 登录错误页面

<%--   Created by IntelliJ IDEA.   User: Administrator   Date: 2023/11/28   Time: 21:10   To change this template use File | Settings | File Templates. --%> <%--<%@ page contentType="text/html;charset=UTF-8" language="java"%>--%> <%@ page contentType="text/html; charset=gb2312" language="java" %>       登录失败   

登录失败!

<% if(request.getAttribute("message")!= null){ response.setContentType("text/html;charset=UTF-8"); out.print(request.getAttribute("message")); } %>
重新登录

6.4 登录成功页面

<%@ page import="org.javatop.case01.domain.User" %><%--   Created by IntelliJ IDEA.   User: Administrator   Date: 2023/11/28   Time: 21:10   To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=utf-8" language="java" %>       登录成功   

登录成功!


<% User user = (User)request.getAttribute("user"); String username = user.getUsername(); %> 欢迎您: <% out.print(username); %>

6.5 注册成功页面

<%--   Created by IntelliJ IDEA.   User: Administrator   Date: 2023/11/28   Time: 21:10   To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %>  ccccccccccccccccc     注册成功   

注册成功!


跳转登录 继续注册

7.总结

本篇教程内容比较长,适合初学者学习,但是也需要有一点基础,比如环境的配置,但如果你稍微有点基础,操作一下这篇文章是非常不错的,特别是代码。

8.最后总结

以上便是本文的全部内容,本人才疏学浅,文章有什么错误的地方,欢迎大佬们批评指正!我是Leo,一个在互联网行业的小白,立志成为更好的自己。

如果你想了解更多关于Leo,可以关注公众号-程序员Leo,后面文章会首先同步至公众号。

公众号封面

相关内容

热门资讯

黑科技辅助(wepokeai代... 黑科技辅助(wepokeai代打)外挂透明挂辅助教程(透视)一贯有挂(黑科技脚本)-哔哩哔哩wepo...
透视实锤!(aaPoker)透... 透视实锤!(aaPoker)透视辅助,(AAPOKer)素来存在有挂,必胜教程,(有挂透明挂)-哔哩...
黑科技讲解!聚星扑克进去后怎么... 黑科技讲解!聚星扑克进去后怎么操作(ai辅助)太坑了是有挂(黑科技教程黑科技解说)-哔哩哔哩1、聚星...
黑科技最新(wepoke是机器... 黑科技最新(wepoke是机器发牌吗)外挂黑科技辅助插件(透视)竟然存在有挂(黑科技方法)-哔哩哔哩...
透视美元局!(AAPoker)... 透视美元局!(AAPoker)ai辅助,(aapoker)从前真的有挂,可靠教程,(有挂详细)-哔哩...
黑科技ai!wpk积分后台管理... 黑科技ai!wpk积分后台管理系统(黑科技)太坑了是有挂(wpk教程黑科技工具)-哔哩哔哩1、wpk...
黑科技智能ai(aapoker... 黑科技智能ai(aapoker俱乐部)外挂透明挂辅助app(透视)原来有挂(黑科技解密)-哔哩哔哩1...
7分钟黑科技!德扑之星ai代打... 7分钟黑科技!德扑之星ai代打怎么弄,(德扑之星)切实存在有挂,介绍教程(有挂详细)-哔哩哔哩1、全...
黑科技好牌!wepoke用模拟... 黑科技好牌!wepoke用模拟器(黑科技)太坑了存在有挂(透牌教程黑科技教程)-哔哩哔哩wepoke...
黑科技有挂(德州之星app有外... 黑科技有挂(德州之星app有外挂吗)外挂透视辅助神器(透视)都是真的是有挂(黑科技解说)-哔哩哔哩1...