iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >JavaWeb:用户注册登录案例
  • 401
分享到

JavaWeb:用户注册登录案例

mybatisjavamysqlservletmaven 2023-09-26 14:09:21 401人浏览 独家记忆
摘要

1.1 用户登录 1.1.1 需求分析 用户在登录页面输入用户名和密码,提交请求给LoginServlet在LoginServlet中接收请求和数据[用户名和密码]在LoginServlt中通过my

1.1 用户登录

1.1.1 需求分析

在这里插入图片描述

  1. 用户在登录页面输入用户名和密码,提交请求给LoginServlet
  2. LoginServlet中接收请求和数据[用户名和密码]
  3. LoginServlt中通过mybatis实现调用UserMapper来根据用户名和密码查询数据库
  4. 将查询的结果封装到User对象中进行返回
  5. LoginServlet中判断返回的User对象是否为null
  6. 如果为nul,说明根据用户名和密码没有查询到用户,则登录失败,返回"登录失败"数据给前端
  7. 如果不为null,则说明用户存在并且密码正确,则登录成功,返回"登录成功"数据给前端

1.1.2 环境准备

  1. 复制静态页面到项目WEBapp目录下,效果如下:

在这里插入图片描述

  1. 创建db1数据库,创建tb_user表,创建User实体类

1 将sql语句执行下:

在这里插入图片描述

2 创建User.java实体类

package com.dcxuexi.pojo;public class User {    private Integer id;    private String username;    private String passWord;    public Integer getId() {        return id;    }    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 + '\'' +                '}';    }}
  1. 在项目的pom.xml导入MybatisMysql驱动坐标
    <dependency>      <groupId>org.mybatisgroupId>      <artifactId>mybatisartifactId>      <version>3.5.10version>    dependency>    <dependency>      <groupId>mysqlgroupId>      <artifactId>mysql-connector-javaartifactId>      <version>8.0.30version>    dependency>
  1. 创建mybatis-config.xml核心配置文件,UserMapper.xml映射文件,UserMapper接口

1 在resources目录下创建mybatis-config.xml配置文件

DOCTYPE configuration        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"        "Http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>        <typeAliases>        <package name="com.dcxuexi.pojo"/>    typeAliases>    <environments default="development">        <environment id="development">            <transactionManager type="JDBC" />            <dataSource type="POOLED">                <property name="driver" value="com.mysql.jdbc.Driver"/>                                <property name="url" value="jdbc:mysql:///db1?useSSL=false&useServerPrepStmts=true"/>                <property name="username" value="root"/>                <property name="password" value="1234"/>            dataSource>        environment>    environments>    <mappers>                <package name="com.dcxuexi.mapper"/>    mappers>configuration>

2 在com.dcxuexi.mapper包下创建UserMapper接口

package com.dcxuexi.mapper;public interface UserMapper {}

3 resources目录下创建UserMapper.xml

注意:在resources下创建UserMapper.xml的目录时,要使用/分割

在这里插入图片描述

DOCTYPE mapper        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.dcxuexi.mapper.UserMapper">mapper>

至此我们所需要的环境就都已经准备好了,具体该如何实现?

1.1.3 代码实现

  1. UserMapper接口中提供一个根据用户名和密码查询用户对象的方法
package com.dcxuexi.mapper;import com.dcxuexi.pojo.User;import org.apache.ibatis.annotations.Param;public interface UserMapper {        User select(@Param("username") String username, @Param("password")  String password);}

UserMapper.xml实现根据用户名和密码查询用户对象。

DOCTYPE mapper        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.dcxuexi.mapper.UserMapper">    <select id="select" resultType="com.dcxuexi.pojo.User">        select * from tb_user                 where username = #{username}                   and password = #{password}    select>mapper>

说明

@Param注解的作用:用于传递参数,是方法的参数可以与SQL中的字段名相对应。

  1. 修改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="/request_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>
  1. 编写LoginServlet
@WebServlet("/loginServlet")public class LoginServlet extends httpservlet {    @Override    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        //1. 接收用户名和密码        String username = request.getParameter("username");        String password = request.getParameter("password");        //2. 调用MyBatis完成查询        //2.1 获取SqlSessionFactory对象        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        //2.2 获取SqlSession对象        SqlSession sqlSession = sqlSessionFactory.openSession();        //2.3 获取Mapper        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);        //2.4 调用方法        User user = userMapper.select(username, password);        //2.5 释放资源        sqlSession.close();        //获取字符输出流,并设置content type        response.setContentType("text/html;charset=utf-8");        PrintWriter writer = response.getWriter();        //3. 判断user释放为null        if(user != null){            // 登陆成功            writer.write("登陆成功");        }else {            // 登陆失败            writer.write("登陆失败");        }    }    @Override    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        this.doGet(request, response);    }}
  1. 启动服务器测试在这里插入图片描述

1 如果用户名和密码输入错误,则

在这里插入图片描述

2 如果用户名和密码输入正确,则

在这里插入图片描述

至此用户的登录功能就已经完成了。

1.2 用户注册

1.2.1 需求分析

在这里插入图片描述

  1. 用户在注册页面输入用户名和密码,提交请求给RegisterServlet
  2. RegisterServlet中接收请求和数据[用户名和密码]
  3. RegisterServlet中通过Mybatis实现调用UserMapper来根据用户名查询数据库表
  4. 将查询的结果封装到User对象中进行返回
  5. RegisterServlet中判断返回的User对象是否为null
  6. 如果为nul,说明根据用户名可用,则调用UserMapper来实现添加用户
  7. 如果不为null,则说明用户不可以,返回"用户名已存在"数据给前端

1.2.2 代码编写

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

    package com.dcxuexi.mapper;import com.dcxuexi.pojo.User;import org.apache.ibatis.annotations.Param;public interface UserMapper {        User select(@Param("username") String username, @Param("password")  String password);        User selectByUsername(String username);        void add(User user);}

    UserMapper.xml实现方法

DOCTYPE mapper        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.dcxuexi.mapper.UserMapper">    <select id="select" resultType="com.dcxuexi.pojo.User">        select * from tb_user                 where username = #{username}                   and password = #{password}    select>    <select id="selectByUsername" resultType="com.dcxuexi.pojo.User">        select * from tb_user                 where username = #{username}    select>    <insert id="add">        insert into tb_user        values(null,#{username},#{password})    insert>mapper>
  1. 修改register.html
DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>欢迎注册title>    <link href="css/register.css" rel="stylesheet">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="/request_demo/registerServlet" method="post">        <table>            <tr>                <td>用户名td>                <td class="inputs">                    <input name="username" type="text" id="username">                    <br>                    <span id="username_err" class="err_msg" style="display: none">用户名不太受欢迎span>                td>            tr>            <tr>                <td>密码td>                <td class="inputs">                    <input name="password" type="password" id="password">                    <br>                    <span id="password_err" class="err_msg" style="display: none">密码格式有误span>                td>            tr>        table>        <div class="buttons">            <input value="注 册" type="submit" id="reg_btn">        div>        <br class="clear">    form>div>body>html>
  1. 创建RegisterServlet
package com.dcxuexi.web;import com.dcxuexi.mapper.UserMapper;import com.dcxuexi.pojo.User;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;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;import java.io.InputStream;@WebServlet("/registerServlet")public class RegisterServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        //1. 接收用户数据        String username = req.getParameter("username");        String password = req.getParameter("password");        //封装用户对象        User user = new User();        user.setUsername(username);        user.setPassword(password);        //2. 调用mapper 根据用户名查询用户对象        //2.1 获取SqlSessionFactory对象        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        //2.2 获取SqlSession对象        SqlSession sqlSession = sqlSessionFactory.openSession();        //2.3 获取Mapper        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);        //2.4 调用方法        User user2 = userMapper.selectByUsername(username);        resp.setContentType("text/html;charset=utf-8");        //3. 判断用户对象释放为null        if (user2 == null){            // 用户名不存在,添加用户            userMapper.add(user);            // 提交事务            sqlSession.commit();            // 释放资源            sqlSession.close();            resp.getWriter().write("用户注册成功");        }else {            // 用户名存在,给出提示信息            resp.getWriter().write("用户名已存在");        }    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        this.doGet(req, resp);    }}
  1. 启动服务器进行测试在这里插入图片描述

1 如果测试成功,则在数据库中就能查看到新注册的数据在这里插入图片描述

2 如果用户已经存在,则在页面上展示 用户名已存在 的提示信息在这里插入图片描述

1.3 SqlSessionFactory工具类抽取

上面两个功能已经实现,但是在写Servlet的时候,因为需要使用Mybatis来完成数据库的操作,所以对于Mybatis的基础操作就出现了些重复代码,如下

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

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

  • 重复代码不利于后期的维护
  • SqlSessionFactory工厂类进行重复创建
    • 就相当于每次买手机都需要重新创建一个手机生产工厂来给你制造一个手机一样,资源消耗非常大但性能却非常低。所以这么做是不允许的。

那如何来优化呢?

  • 代码重复可以抽取工具类
  • 对指定代码只需要执行一次可以使用静态代码块

有了这两个方向后,代码具体该如何编写?

package com.dcxuexi.util;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;import java.io.InputStream;public class SqlSessionFactoryUtils {    private static SqlSessionFactory sqlSessionFactory;    static {        //静态代码块会随着类的加载而自动执行,且只执行一次        try {            String resource = "mybatis-config.xml";            InputStream inputStream = Resources.getResourceAsStream(resource);            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        } catch (IOException e) {            e.printStackTrace();        }    }    public static SqlSessionFactory getSqlSessionFactory(){        return sqlSessionFactory;    }}

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

SqlSessionFactory sqlSessionFactory =SqlSessionFactoryUtils.getSqlSessionFactory();

这样就可以很好的解决上面所说的代码重复和重复创建工厂导致性能低的问题了。

LoginServlet类优化如下:

package com.dcxuexi.web;import com.dcxuexi.mapper.UserMapper;import com.dcxuexi.pojo.User;import com.dcxuexi.util.SqlSessionFactoryUtils;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;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;import java.io.InputStream;import java.io.PrintWriter;@WebServlet("/loginServlet")public class LoginServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        //1. 接收用户名和密码        String username = req.getParameter("username");        String password = req.getParameter("password");        System.out.println("username = " + username);        //2. 调用MyBatis完成查询        //2.1 获取SqlSessionFactory对象        //String resource = "mybatis-config.xml";        //InputStream inputStream = Resources.getResourceAsStream(resource);        //SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();        //2.2 获取SqlSession对象        SqlSession sqlSession = sqlSessionFactory.openSession();        //2.3 获取Mapper        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);        //2.4 调用方法        User user = userMapper.select(username, password);        //2.5 释放资源        sqlSession.close();        //获取字符输出流,并设置content type        resp.setContentType("text/html;charset=utf-8");        PrintWriter writer = resp.getWriter();        if (user!=null){            // 登陆成功            writer.write(username+"登陆成功");        }else {            // 登陆失败            writer.write("登陆失败");        }    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        this.doGet(req, resp);    }}

RegisterServlet类优化如下:

package com.dcxuexi.web;import com.dcxuexi.mapper.UserMapper;import com.dcxuexi.pojo.User;import com.dcxuexi.util.SqlSessionFactoryUtils;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;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;import java.io.InputStream;@WebServlet("/registerServlet")public class RegisterServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        //1. 接收用户数据        String username = req.getParameter("username");        String password = req.getParameter("password");        //封装用户对象        User user = new User();        user.setUsername(username);        user.setPassword(password);        //2. 调用mapper 根据用户名查询用户对象        //2.1 获取SqlSessionFactory对象        //String resource = "mybatis-config.xml";        //InputStream inputStream = Resources.getResourceAsStream(resource);        //SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();        //2.2 获取SqlSession对象        SqlSession sqlSession = sqlSessionFactory.openSession();        //2.3 获取Mapper        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);        //2.4 调用方法        User user2 = userMapper.selectByUsername(username);        resp.setContentType("text/html;charset=utf-8");        //3. 判断用户对象释放为null        if (user2 == null){            // 用户名不存在,添加用户            userMapper.add(user);            // 提交事务            sqlSession.commit();            // 释放资源            sqlSession.close();            resp.getWriter().write("用户注册成功");        }else {            // 用户名存在,给出提示信息            resp.getWriter().write("用户名已存在");        }    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        this.doGet(req, resp);    }}

来源地址:https://blog.csdn.net/qq_37726813/article/details/128514400

您可能感兴趣的文档:

--结束END--

本文标题: JavaWeb:用户注册登录案例

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

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

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

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

下载Word文档
猜你喜欢
  • JavaWeb:用户注册登录案例
    1.1 用户登录 1.1.1 需求分析 用户在登录页面输入用户名和密码,提交请求给LoginServlet在LoginServlet中接收请求和数据[用户名和密码]在LoginServlt中通过My...
    99+
    2023-09-26
    mybatis java mysql servlet maven
  • 【Java案例】用户登录注册
    案例介绍: 编写程序实现简单的用户登录注册功能。程序包含以下4个功能: (1)登录功能,用户输入正确的账号密码登录成功; (2)注册功能,输入用户名和密码进行注册; (3)查看功能,查看所有的用户名与密码; (4)退出功能,退出系统; 用户...
    99+
    2023-09-23
    java 开发语言
  • JavaWeb实现用户登录与注册功能
    本文实例为大家分享了JavaWeb实现用户登录与注册的具体代码,供大家参考,具体内容如下 所用知识 客户端:HTML CSS JS (JQuery) 服务器:JAVA基础 ...
    99+
    2022-11-12
  • javaweb实现注册登录页面
    本文实例为大家分享了javaweb实现注册登录页面的具体代码,供大家参考,具体内容如下 <%@ page language="java" contentType="text/h...
    99+
    2022-11-13
  • JavaWeb实现用户登录与注册功能(服务器)
    本文实例为大家分享了JavaWeb实现用户登录与注册功能的具体代码,供大家参考,具体内容如下 用到的知识 客户端:HTML CSS JS (JQuery) 服务器:JAVA基础&nb...
    99+
    2022-11-12
  • JavaWeb实战之用Servlet+JDBC实现用户登录与注册
    目录一、前言二、准备工作三、编写web层一、前言 使用到的技术栈: (1)JDBC (2)Servlet (3)MySQL 二、准备工作 (1)书城用户数据库与表创建 (2)编写用户...
    99+
    2022-11-12
  • Java实现登录和注册案例
    本文实例为大家分享了Java实现登录和注册的具体代码,供大家参考,具体内容如下 登录和注册案例的分析: 我们在完成一个需求时,需要面向对象,我们必须找到能完成某个功能的类,接着调用里...
    99+
    2022-11-13
  • Vue+MySQL实现登录注册案例
    Vue+MySQL实现登录注册案例 1.新建vue项目并连接数据库 具体步骤见vue连接mysql数据库 2.新建登录页面、注册页面和首页 在src/views文件夹下,新建 login.vue(登录...
    99+
    2023-09-03
    mysql vue.js 前端
  • Python实现用户登录注册
    简单的Python代码:用户登录注册 利用业余时间,写了一个用户进行登录注册的代码,非常简单。主要实现的功能是: 1、可以进行用户登录,在用户进行登录之前,对用户名进行检查,查看是否...
    99+
    2022-11-13
  • QT实现用户登录注册
    本文实例为大家分享了QT实现用户登录注册的具体代码,供大家参考,具体内容如下 #include "widget.h" #include "ui_widget.h" //窗口设置 #...
    99+
    2022-11-13
  • 基于IO版的用户登录注册实例(Java)
    今天学的是用户登录注册功能。4个包:itcast.cn.user包 User.java 用户类,描述用户基本信息,包括成员变量,无参构造函数,带参构造(可有可无).get和set方法package itcast.cn.day22;publi...
    99+
    2023-05-31
    java 用户 登录
  • JavaWeb中Servlet+jsp+JDBC完成登录注册界面
    文章目录​​ 前言 一、登录注册思路 二、前端页面 1.Login 2.Register 3.UserList界面 三、后端代码 1.封装实体类User类 2.Login对应的Servlet(验证信息功能) 3.Register对应的Ser...
    99+
    2023-09-26
    servlet java html maven
  • 使用Vue+MySQL实现登录注册的实战案例
    目录1.新建vue项目并连接数据库2.新建登录页面、注册页面和首页3.页面路由配置4.新建/server/API/login.js5.在/server/router.js中配置对应路...
    99+
    2022-11-13
  • JavaWeb实现注册用户名检测
    本文实例为大家分享了JavaWeb实现注册用户名检测的具体代码,供大家参考,具体内容如下 案例说明 实现一个可以异步获取用户名是否被注册的小案例。如: 1.编写Html与js: ...
    99+
    2022-11-13
  • Python实现用户注册登录程序
    本文实例为大家分享了Python实现用户注册登录程序的具体代码,供大家参考,具体内容如下 要求: 1.支持多个用户登录(把已有的用户名和密码存放在一个文件中,锁定的用户名存放在另一个...
    99+
    2022-11-13
  • python 容器 用户注册登录系统
    1. 列表和普通变量有什么区别  列表是数据类型,普通变量是用来存储数据的  可以把列表赋值给普通变量 2.存在列表 a = [11, 22, 33], 如何向列表中添加(增)新元素 44  a.append(44)  或者  a.ins...
    99+
    2023-01-30
    用户注册 容器 系统
  • QT如何实现用户登录注册
    本篇内容主要讲解“QT如何实现用户登录注册”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“QT如何实现用户登录注册”吧!具体代码如下#include "widget.h&quo...
    99+
    2023-07-02
  • QT实现用户登录注册功能
    本文实例为大家分享了QT实现用户登录注册的具体代码,供大家参考,具体内容如下 1、login.h #ifndef LOGIN_H #define LOGIN_H #include ...
    99+
    2022-11-13
  • Java-web实现用户登录、注册功能
    源码在资源里 目录 环境搭建数据库 用户登录需求分析代码实现编写UserMapper类编写User类编写loginServlet类编写login.html编写login.css ...
    99+
    2023-10-10
    java 前端 servlet
  • Node.js+Express+MySql实现用户登录注册功能
    本文实例为大家分享了Node.js实现用户登录注册的具体代码,供大家参考,具体内容如下 IDE:WebStorm 工程目录: 数据库表 Login.js: var express=r...
    99+
    2022-06-04
    用户登录 功能 js
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作