广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java-web实现用户登录、注册功能
  • 807
分享到

Java-web实现用户登录、注册功能

java前端servlet 2023-10-10 08:10:23 807人浏览 泡泡鱼
摘要

源码在资源里 目录 环境搭建数据库 用户登录需求分析代码实现编写UserMapper类编写User类编写loginServlet类编写login.html编写login.css

源码在资源里

目录

环境搭建

在编写代码之前,在pom.xml导入servlet、mybatis的依赖,导入Tomcat插件
在这里插入图片描述

数据库

在这里插入图片描述

用户登录

需求分析

  1. 前端页面输入用户名和密码,点击登录,将数据提交给servlet。
  2. 在servlet中编写程序,实现接收前端提交的用户名和密码。
  3. 在servlet中通过Mybatis框架调用Mapper查询,返回结果封装成一个User对象并返回
  4. 判断User对象是否为null,是null登录失败、不是null登录成功。

代码实现

编写UserMapper类

编写UserMapper提供根据用户名、密码查询用户数据方法方法

public interface UserMapper {        @Select("select* from tb_user where username =#{username} and passWord = #{password}")    User select(@Param("username") String username, @Param("password") String password);}

编写User类

编写User类

public class User {    private Integer id;    private String username;    private String password;    public void setId(Integer 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 + '\'' +                '}';    }}

编写loginServlet类

编写loginServlet类

@WEBServlet("/loginServlet")public class loginServlet extends httpservlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        //第一步:接收用户名、密码        String username;        username= req.getParameter("username");        String password;        password= req.getParameter("password");        byte[] bytes = username.getBytes(StandardCharsets.ISO_8859_1);        username = new String(bytes, StandardCharsets.UTF_8);        byte[] bytes1 = password.getBytes(StandardCharsets.ISO_8859_1);        password = new String(bytes1, StandardCharsets.UTF_8);        //第二步:调用Mybatis查询用户        //工具sqlSessionFactoryUtil调用方法返回sqlSessionFactory        SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtil.getSqlSessionFactory();        //  获取sqlSession对象,执行sql        SqlSession sqlSession = sqlSessionFactory.openSession();        //获取UserMapper接口的代理对象        UserMapper mapper = sqlSession.getMapper(UserMapper.class);        //获取方法        User user = mapper.select(username, password);        sqlSession.close();        //获取字符的输出流 设置content-type        resp.setContentType("text/html;charset=utf-8");        PrintWriter writer = resp.getWriter();        //第三步:判断        if(user!=null){            //登陆成功            writer.write("登录成功");        }else {            //登录失败            writer.write("登录失败");        }    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        this.doGet(req, resp);    }}

编写login.html

编写login.html

DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>logintitle>    <link href="CSS/login.css" rel="stylesheet">head><body><div id="loginDiv">    <fORM action="/Web-Demo/loginServlet" method="post" id="form">        <h1 id="loginMsg">LOGIN INh1>        <p>UserName:<input id="username" name="username" type="text">p>        <p>PassWord:<input id="password" name="password" type="password">p>        <div id="subDiv">            <input type="submit" class="button" value="login up">            <input type="reset" class="button" value="reset">               <a href="reGISter.html">没有账号?点击注册a>        div>    form>div>body>html>

编写login.css

编写login.css

* {    margin: 0;    padding: 0;}html {    height: 100%;    width: 100%;    overflow: hidden;    margin: 0;    padding: 0;    background: url(../imgs/BackGround.JPG) no-repeat 0px 0px;    background-repeat: no-repeat;    background-size: 100% 100%;    -moz-background-size: 100% 100%;}body {    display: flex;    align-items: center;    justify-content: center;    height: 100%;}#loginDiv {    width: 37%;    display: flex;    justify-content: center;    align-items: center;    height: 300px;    background-color: rgba(75, 81, 95, 0.3);    box-shadow: 7px 7px 17px rgba(52, 56, 66, 0.5);    border-radius: 5px;}#name_trip {    margin-left: 50px;    color: red;}p {    margin-top: 30px;    margin-left: 20px;    color: Azure;}input {    margin-left: 15px;    border-radius: 5px;    border-style: hidden;    height: 30px;    width: 140px;    background-color: rgba(216, 191, 216, 0.5);    outline: none;    color: #f0edf3;    padding-left: 10px;}#username{    width: 200px;}#password{    width: 202px;}.button {    border-color: cornsilk;    background-color: rgba(100, 149, 237, .7);    color: aliceblue;    border-style: hidden;    border-radius: 5px;    width: 100px;    height: 31px;    font-size: 16px;}#subDiv {    text-align: center;    margin-top: 30px;}#loginMsg{    text-align: center;color: aliceblue;}

用户注册

需求分析

  1. 在前端页面输入用户名和密码,点击注册,将数据提交给servlet。
  2. 在servlet中编写程序,实现接收前端提交的用户名和密码。
  3. 在servlet中通过Mybatis框架调用Mapper查询,返回结果封装成一个User对象并返回
  4. 判断User对象是否为null,是null调用mapper添加用户、不是null代表用户已存在。

代码编写

编写UserMapper类

编写UserMapper提供根据用户名查询用户数据方法和添加用户方法

public interface UserMapper {        @Select("select* from tb_user where username =#{username}")    User selectByUsername(String username);        @Select("insert into tb_user values(null,#{username},#{password})")    void add(User user);}

编写registerServlet类

@WebServlet("/registerServlet")public class registerServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        //第一步:接收用户名、密码        String username;        String password;        username= req.getParameter("username");        password= req.getParameter("password");        byte[] bytes = username.getBytes(StandardCharsets.ISO_8859_1);        username = new String(bytes, StandardCharsets.UTF_8);        byte[] bytes1 = password.getBytes(StandardCharsets.ISO_8859_1);        password = new String(bytes1, StandardCharsets.UTF_8);        //封装用户对象        User user1 = new User();        user1.setUsername(username);        user1.setPassword(password);        //第二步:调用Mybatis查询用户        //加载Mybatis的核心配置文件        SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtil.getSqlSessionFactory();        //  获取sqlSession对象,执行sql        SqlSession sqlSession = sqlSessionFactory.openSession();        //获取UserMapper接口的代理对象        UserMapper mapper = sqlSession.getMapper(UserMapper.class);        //获取方法        User user = mapper.selectByUsername(username);        //获取字符的输出流 设置content-type        resp.setContentType("text/html;charset=utf-8");        PrintWriter writer = resp.getWriter();        //第三步:判断        if(user==null){            //用户名不存在,添加用户            mapper.add(user1);            //提交事务            sqlSession.commit();            sqlSession.close();        }else {            //用户存在,给出提示信息            writer.write("用户已存在");        }    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        this.doGet(req, resp);    }}

编写register.html

采用正则表达式实现用户名不超过15个字符、密码在4~10个字符。采用上个案例的注册界面。

DOCTYPE html><html><head>    <meta charset="utf-8">    <title>欢迎注册title>    <link rel = "stylesheet" href="css/register.css">head><body><div class = "form-div">    <div class="reg-content">        <h1>欢迎注册h1>        <span>已有账号?span>        <a href="login.html">登录a>    div>    <form id = "reg-form" action="/Web-Demo/registerServlet" method="post">        <table>            <tr>                <td>用户名:td>                <td class="inputs">                    <input type="text" name = "username" id="username"/>                    <br>                    <span id = "username_err" class="err_msg" style="display:none">用户名不符合规则span>                td>            tr>            <tr>                <td>密码:td>                <td class="inputs">                    <input type="password" name = "password" id = "password"/>                    <br>                    <span id="password_err" class="err_msg" style="display: none">密码格式有误span>                td>            tr>        table>        <div class="buttons">            <input type = "submit" value="注册" id ="reg_btn" />        div>        <br class="clear">    form>div><script>    //验证用户名    var usernameInput = document.getElementById("username");    usernameInput.onblur = checkUser;    function checkUser(){        var username = usernameInput.value.trim();        //判断用户名是否符合规则:长度0~15 单词字符组成        var reg = /^\w{0,15}$/;        var flag= reg.test(username);        if(flag){            document.getElementById("username_err").style.display = "none";        }else{            document.getElementById("username_err").style.display = "";        }        return flag;    }    //验证密码    var passwordInput = document.getElementById("password");    passwordInput.onblur = checkPassword;    function checkPassword(){        var password = passwordInput.value.trim();        var reg = /^\w{4,10}$/;        var flag= reg.test(password);        if(flag){            document.getElementById("password_err").style.display = "none";        }else{            document.getElementById("password_err").style.display = "";        }        return flag;    }script>body>html>

编写register.css

* {    margin: 0;    padding: 0;    list-style-type: none;}.reg-content{    padding: 30px;    margin: 3px;}a, img {    border: 0;}body {    background-image: url("../imgs/BackGround.JPG") ;    no-repeat:center center fixed;        -webkit-background-size: cover;    -o-background-size: cover;    background-size: cover;    display: flex;    align-items: center;    justify-content: center;    height: 100%;}table {    border-collapse: collapse;    border-spacing: 0;}td, th {    padding: 0;    height: 90px;}.inputs{    vertical-align: top;}.clear {    clear: both;}.clear:before, .clear:after {    content: "";    display: table;}.clear:after {    clear: both;}.form-div {    background-color: rgba(255, 255, 255, 0.27);    border-radius: 10px;    border: 1px solid #aaa;    width: 424px;    margin-top: 150px;    margin-left:1050px;    padding: 30px 0 20px 0px;    font-size: 16px;    box-shadow: inset 0px 0px 10px rgba(255, 255, 255, 0.5), 0px 0px 15px rgba(75, 75, 75, 0.3);    text-align: left;}.form-div input[type="text"], .form-div input[type="password"], .form-div input[type="email"] {    width: 268px;    margin: 10px;    line-height: 20px;    font-size: 16px;}.form-div input[type="checkbox"] {    margin: 20px 0 20px 10px;}.form-div input[type="button"], .form-div input[type="submit"] {    margin: 10px 20px 0 0;}.form-div table {    margin: 0 auto;    text-align: right;    color: rgba(64, 64, 64, 1.00);}.form-div table img {    vertical-align: middle;    margin: 0 0 5px 0;}.footer {    color: rgba(64, 64, 64, 1.00);    font-size: 12px;    margin-top: 30px;}.form-div .buttons {    float: right;}input[type="text"], input[type="password"], input[type="email"] {    border-radius: 8px;    box-shadow: inset 0 2px 5px #eee;    padding: 10px;    border: 1px solid #D4D4D4;    color: #333333;    margin-top: 5px;}input[type="text"]:focus, input[type="password"]:focus, input[type="email"]:focus {    border: 1px solid #50afeb;    outline: none;}input[type="button"], input[type="submit"] {    padding: 7px 15px;    background-color: #3c6db0;    text-align: center;    border-radius: 5px;    overflow: hidden;    min-width: 80px;    border: none;    color: #FFF;    box-shadow: 1px 1px 1px rgba(75, 75, 75, 0.3);}input[type="button"]:hover, input[type="submit"]:hover {    background-color: #5a88c8;}input[type="button"]:active, input[type="submit"]:active {    background-color: #5a88c8;}.err_msg{    color: red;    padding-right: 170px;}#password_err,#tel_err{    padding-right: 195px;}#reg_btn{    margin-right:50px; width: 285px; height: 45px; margin-top:20px;}

编写SqlSessionFactory工具类

在写Servlet的时候,因为需要使用Mybatis来完成数据库的操作,所
以对于Mybatis的基础操作就出现了些重复代码:

String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new  SqlSessionFactoryBuilder().build(inputStream);

有了这些重复代码就会造成一些问题:

  1. 重复代码不利于后期的维护

  2. SqlSessionFactory工厂类进行重复创建,资源消耗非常大但性能却非常低。

  3. 代码重复可以抽取工具类

  4. 对指定代码只需要执行一次可以使用静态代码块

对于静态代码块会随着类的加载而自动执行同时加载,只执行一次,就很好解决这一问题。

public class SqlSessionFactoryUtil {//SqlSessionFactory工具类抽取    private static SqlSessionFactory sqlSessionFactory;    static {        //静态代码块会随着类的加载而加载 只执行一次        //加载Mybatis的核心配置文件        String resource = "mybatis-config.xml";        InputStream resourceAsStream = null;        try {            resourceAsStream = Resources.getResourceAsStream(resource);        } catch (IOException e) {            e.printStackTrace();        }        //  获取sqlSessionFactory对象        sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);   }    public static SqlSessionFactory getSqlSessionFactory (){        return sqlSessionFactory;    }}

工具类抽取以后,以后在对Mybatis的SqlSession进行操作的时候,就可以直接使用。

项目总体架构

在这里插入图片描述

运行展示

用户登录:
在这里插入图片描述

登录成功:
在这里插入图片描述
来一个登录失败的案例:admin用户不存在
在这里插入图片描述

登录失败:

在这里插入图片描述

注册admin用户:
在这里插入图片描述

注册成功,后端数据库已写入admin用户数据

在这里插入图片描述

案例图片

漂亮~~
在这里插入图片描述

来源地址:https://blog.csdn.net/m0_52822058/article/details/128355926

--结束END--

本文标题: Java-web实现用户登录、注册功能

本文链接: https://www.lsjlt.com/news/426858.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java-web实现用户登录、注册功能
    源码在资源里 目录 环境搭建数据库 用户登录需求分析代码实现编写UserMapper类编写User类编写loginServlet类编写login.html编写login.css ...
    99+
    2023-10-10
    java 前端 servlet
  • QT实现用户登录注册功能
    本文实例为大家分享了QT实现用户登录注册的具体代码,供大家参考,具体内容如下 1、login.h #ifndef LOGIN_H #define LOGIN_H #include ...
    99+
    2022-11-13
  • JavaWeb实现用户登录与注册功能
    本文实例为大家分享了JavaWeb实现用户登录与注册的具体代码,供大家参考,具体内容如下 所用知识 客户端:HTML CSS JS (JQuery) 服务器:JAVA基础 ...
    99+
    2022-11-12
  • Java Web实现用户登录功能
    文章目录 一、纯JSP方式实现用户登录功能(一)实现思路1、创建Web项目2、创建登录页面3、创建登录处理页面4、创建登录成功页面5、创建登录失败页面6、编辑项目首页 (三)测试结果 ...
    99+
    2023-10-02
    java 前端 servlet
  • Node.js+Express+MySql实现用户登录注册功能
    本文实例为大家分享了Node.js实现用户登录注册的具体代码,供大家参考,具体内容如下 IDE:WebStorm 工程目录: 数据库表 Login.js: var express=r...
    99+
    2022-06-04
    用户登录 功能 js
  • QT如何实现用户登录注册功能
    这篇文章主要介绍“QT如何实现用户登录注册功能”,在日常操作中,相信很多人在QT如何实现用户登录注册功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”QT如何实现用户登录注册功能”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-02
  • java+mysql实现登录和注册功能
    初学JAVA  EE,老师留下一小作业,用JAVA实现与服务器端交互,实现登录和注册功能,初学一种专业课很多老师都会留下一种让学生实现登录和注册的作业。 下面是记录的实现步...
    99+
    2022-11-13
  • java注册登录功能如何实现
    Java注册登录功能可以通过以下步骤来实现:1. 创建数据库表:- 创建一个用户表,包括用户ID(主键),用户名,密码等字段。2. ...
    99+
    2023-08-11
    java
  • Python实现注册登录功能
    用Python写个注册登录功能,供大家参考,具体内容如下 本文是用Python写一个注册登录功能,难度不大,很适合练手主要就是用列表和字典,以及逻辑判断用到的第3方库模块是time模...
    99+
    2022-11-13
  • Node.js实现登录注册功能
    本文实例为大家分享了Node.js实现登录注册功能的具体代码,供大家参考,具体内容如下 目录结构 注册页面: reg.html <!DOCTYPE html> <...
    99+
    2022-11-13
  • Android实现登录注册功能
    本文实例为大家分享了Android实现登录注册功能的具体代码,供大家参考,具体内容如下 运行环境 Android Studio 总体效果图 一、 设计注册页面的布局 二、完成注册...
    99+
    2022-11-13
  • java web实现简单登录注册功能全过程(eclipse,mysql)
    目录1.工程文件2.DBBean.java3.login.jsp4.check.jsp5.zhuce.jsp6.zhuceck.jsp7.success.jsp8.zhucesu.j...
    99+
    2022-11-13
  • Node.js+Express+MySql如何实现用户登录注册功能
    这篇文章主要介绍了Node.js+Express+MySql如何实现用户登录注册功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如...
    99+
    2022-10-19
  • JavaWeb实现用户登录与注册功能(服务器)
    本文实例为大家分享了JavaWeb实现用户登录与注册功能的具体代码,供大家参考,具体内容如下 用到的知识 客户端:HTML CSS JS (JQuery) 服务器:JAVA基础&nb...
    99+
    2022-11-12
  • java+mysql怎么实现登录和注册功能
    本篇内容主要讲解“java+mysql怎么实现登录和注册功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java+mysql怎么实现登录和注册功能”吧!1、首先是账号密码输入框和按钮:登录:&...
    99+
    2023-06-30
  • python实现登录与注册功能
    本文实例为大家分享了python实现登录与注册的具体代码,供大家参考,具体内容如下 1. 案例介绍 本例设计一个用户登录和注册模块,使用 Tkinter 框架构建界面,主要用到画布、...
    99+
    2022-11-12
  • NodeJs+MySQL实现注册登录功能
    本文实例为大家分享了NodeJs+MySQL实现注册登录功能的具体代码,供大家参考,具体内容如下 之前写过一个没有连接数据库的注册与登陆的实现,这次加上了数据库 刚刚接触后端,很多不...
    99+
    2022-11-13
  • Android用SharedPreferences实现登录注册注销功能
    Android用SharedPreferences实现登录注册注销功能 前言 本文用SharedPreferences本地缓存账号信息来实现登录注册功能,以及退出注销功能。 一、本文...
    99+
    2022-11-13
  • MySQL 实现点餐系统的用户登录注册功能
    MySQL 实现点餐系统的用户登录注册功能在开发点餐系统时,用户登录注册功能是必不可少的一部分。本文将介绍如何使用MySQL数据库实现点餐系统的用户登录注册功能,并给出具体的代码示例。创建用户表首先,我们需要在MySQL数据库中创建一个用户...
    99+
    2023-11-01
    MySQL 用户登录注册 点餐系统
  • Python实现用户登录注册
    简单的Python代码:用户登录注册 利用业余时间,写了一个用户进行登录注册的代码,非常简单。主要实现的功能是: 1、可以进行用户登录,在用户进行登录之前,对用户名进行检查,查看是否...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作