简易的Web登录功能(Servlet,mybatis,MySQL)

效果

介绍

javaEE项目,见123

JDK8,JavaEE8

项目结构(下面没写的文件就是空的,或者系统自动生成的)

mysql中的表


步骤

  1. 创建Web页面
  2. 引入mybatis,MySQL依赖
  3. 写后端程序()

1 创建Web页面

index.html

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link href="style.css" rel="stylesheet">
    <script src="test.js"></script>
</head>

<body>
<h1>登录</h1>
<form method="post" action="login">
    <!--    method="post"表示表单数据将以POST方式提交到服务器。-->
    <!--    action="login"指定表单数据提交的目标地址为"login"。前面不要加"/"-->
    <label for="input-username">账号:</label>
    <input type="text" id="input-username" placeholder="账号" name="username"/>
    <br>
    <label for="input-password">密码:</label>
    <input type="password" id="input-password" placeholder="密码" name="password"/>
    <br>
    <div>
        <button onclick="http()">登录</button>
    </div>
</form>
</body>
</html>

style.css

css 复制代码
body {
    background-color: #ffffff;
    margin: 0;
    text-align: center;
}

input {
    border: 0;
    background: #e0e0e0;
    line-height: 40px;
    border-radius: 20px;
    padding: 0 20px 0 20px;
    width: 200px;
    font-size: 16px;
    margin-top: 20px;
}

input:focus {
    outline: 0;
}

button {
    margin-top: 20px;
    background: #6600CC;
    border-radius: 30px;
    border: 0;
    width: 200px;
    height: 50px;
    color: white;
    font-size: 16px;
    box-shadow: 0px 2px 10px blueviolet;
    /*按键四周的阴影*/
}

button:focus {
    outline: 0;
    background: #6666CC;
}

#input-remember {
    width: auto;
}

2 引入mybatis,MySQL依赖

引入maven依赖

xml 复制代码
<!--        lombok插件-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.32</version>
</dependency>
<!--        mybatis-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.7</version>
</dependency>
<!--        MySQL-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>

3 写后端程序

3.1 mybatis相关

mybatis-config.xml

mybatis-config.xml(从官网复制,再自己加配置)

xml 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/study"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--    mapper文件,在这注册-->
    <mappers>
        <mapper class="com.example.mapper.UserMapper"/>
    </mappers>
</configuration>

User.java

java 复制代码
package com.example.entity;
import lombok.Data;
@Data
public class User {
    int id;
    String username;
    String password;
}

UserMapper.Java

java 复制代码
package com.example.mapper;

import com.example.entity.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

public interface UserMapper {
	//用注解,不用xml
    @Select("select * from users where username = #{username} and password = #{password}")
    User getUser(@Param("username") String username, @Param("password") String password);
}

3.2 Servlet相关

LoginServlet

java 复制代码
package com.example.servlet;


import com.example.entity.User;
import com.example.mapper.UserMapper;
import lombok.SneakyThrows;
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.util.Arrays;
import java.util.Map;

@WebServlet(value = "/login", loadOnStartup = 1)
public class LoginServlet extends HttpServlet {
    SqlSessionFactory factory;

    @SneakyThrows
    @Override
    public void init() throws ServletException {
        factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        {//查看前端发来的账号和密码,debug
            // 遍历并打印请求参数映射表
            req.getParameterMap().forEach((k, v) -> {
                // 输出参数键值对,其中值以数组形式显示
                System.out.println(k + ": " + Arrays.toString(v));
            });
        }
        {
            // 设置响应内容类型为HTML,编码方式为UTF-8
            resp.setContentType("text/html;charset=UTF-8");
            // 获取请求中的表单参数
            Map<String, String[]> map = req.getParameterMap();

            // 检查表单中是否包含了用户名和密码字段
            if (map.containsKey("username") && map.containsKey("password")) {
                // 获取用户名和密码
                String username = req.getParameter("username");
                String password = req.getParameter("password");
                // 使用try-with-resources确保SqlSession正确关闭
                try (SqlSession sqlSession = factory.openSession(true)) {
                    // 获取UserMapper接口的实现
                    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
                    // 尝试根据用户名和密码从数据库中获取用户信息
                    User user = userMapper.getUser(username, password);

                    // 根据用户信息的存在与否返回不同的响应
                    if (user != null) {
                        resp.getWriter().write("用户" + username + "登录成功");
                    } else {
                        resp.getWriter().write("账号/密码错误 或 用户不存在");
                    }
                }
                // TODO: 进行权限校验
            } else {
                // 如果表单信息不完整,则返回错误信息
                resp.getWriter().write("错误,表单信息不完整!");
            }

        }


    }
}

参考

https://www.itbaima.cn/document/ycpagby2v7j4p728

相关推荐
mldong5 小时前
你的 Vue3 项目也能有钉钉同款审批流设计器:npm 装包,10 分钟画出第一条审批流
前端·vue.js
2分钟速写快排5 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
passerby60616 小时前
如何自己造一个时间处理库
前端·javascript·github
走到天涯海角7 小时前
react里面的长列表渲染优化
前端·react.js·前端框架
小羊没烦恼!7 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
北岛贰7 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
mayaairi9 小时前
Vue2 组件通讯(三):全局事件总线、PubSub、插槽与组件实例属性
前端·javascript·vue.js
kyriewen9 小时前
面试官问我:AI 都能写代码了,前端凭什么还值 25K
前端·javascript·人工智能
风骏时光牛马10 小时前
AI源码分析:拆解模型底层实现逻辑
前端
IT_陈寒10 小时前
React子组件莫名其妙重渲染?你可能漏了这个Hook
前端·人工智能·后端