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

效果

在这里插入图片描述

介绍

javaEE项目,见123

JDK8,JavaEE8

项目结构(下面没写的文件就是空的,或者系统自动生成的)
在这里插入图片描述
mysql中的表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

步骤

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

1 创建Web页面

index.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

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依赖

<!--        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 version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//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

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

UserMapper.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

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@Overridepublic void init() throws ServletException {factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {{//查看前端发来的账号和密码,debug// 遍历并打印请求参数映射表req.getParameterMap().forEach((k, v) -> {// 输出参数键值对,其中值以数组形式显示System.out.println(k + ": " + Arrays.toString(v));});}{// 设置响应内容类型为HTML,编码方式为UTF-8resp.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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/10356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习:基于人工神经网络ANN的降雨预测

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 本专栏涉及创建深度学习模型、处理非结构化数据以及指导复杂的模型&#xff0c;如卷积神经网络(CNN)、递归神经网络 (RNN)&#xff0c;包括长短期记忆 (LSTM) 、门控循环单元 (GRU)、自动编码器 (AE)、受限玻尔兹曼机(…

【Linux】-网络请求和下载、端口[6]

目录 一、网络请求和下载 1、ping命令 2、wget命令 3、curl命令 二、端口 1、虚拟端口 2、查看端口占用 一、网络请求和下载 1、ping命令 可以通过ping命令&#xff0c;检查指定的网络服务器是否可联通状态 语法&#xff1a;ping [ -c num ] ip或主机名 选项&…

Flutter3.x get-cli中运行get init初始化项目报错如何处理

Flutter get-cli中运行get init初始化项目会提示如下错误&#xff1a; get init s E:\flutter\flutter study\tempstudy\misapp01> get init 1)Getx Pattern (by Kau) 2)CLEAN (by Arktekko) which architecture do you want to use? [1] unhandled exception: Synchromu…

Fendi club啤酒与精酿文化的碰撞与整合

在啤酒的世界中&#xff0c;精酿啤酒文化正逐渐崛起&#xff0c;成为了品质和品味的象征。作为精酿啤酒的代表&#xff0c;Fendi club啤酒与精酿文化的碰撞与整合&#xff0c;不仅推动了啤酒产业的发展&#xff0c;更是一种全新的生活方式。 Fendi club啤酒一直秉持着对品质的追…

从零自制docker-12-【overlayfs】

文章目录 overlayfsexec.Command("tar", "-xvf", busyboxTarURL, "-C", busyboxURL).CombinedOutput()exec.Command格式差异 挂载mount卸载unmount代码地址结果演示 overlayfs 就是联合文件系统&#xff0c;将多个文件联合在一起成为一个统一的…

内存拆解分析表:学习版[图片]

对拆解system中主要是对比测试机和对比机之间的差距&#xff0c;测试机那些地方高于对比机 拆解表&#xff0c;作为理解 在拆解表中system测试机比对比机多出113M 这说明是有问题的 对system拆解&#xff1a; system12345对比机9102294380941069391081628测试机10252010331…

代码随想录第五十天|最佳买卖股票时机含冷冻期、买卖股票的最佳时机含手续费

题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 最佳买卖股票时机含冷冻期与打家劫舍的题目有异曲同工之妙&#xff0c;主要是出现了天数的间隔&#xff0c;一次需要在买卖股票的最佳时机II 题目上做一点调整&#xff0c;代码如下&#xff1a; 如代码所示&…

Linux系统编程——进程控制

目录 一&#xff0c;进程创建 1.1 fork回顾 1.2 写时拷贝 1.3 fork用处 1.4 fork调用失败原因 二&#xff0c;进程退出 2.1 进程退出场景 2.2 mainCRTStartup调用 2.3 进程退出码 2.3.1 main函数返回值 2.3.2 strerror ​编辑 2.3.3 命令的退出码 2.4 进程正常退…

【第19章】spring-mvc之全局异常处理

文章目录 前言一、全局异常处理1. 前端2. 后端 二、常见错误页1.增加界面2.web.xml3.异常处理4.效果 总结 前言 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了学习机器学习&#xff0c;本文就介绍了机器学习的基…

CSS-伪类选择器

结构伪类选择器 作用&#xff1a;根据元素的结构关系查找元素 分类&#xff1a; 选择器说明元素名:first-child查找第一个元素元素名:last-child查找最后一个元素元素名:nth-child(N)查找第N名元素 <!DOCTYPE html> <html lang"en"> <head><me…

【北京迅为】《iTOP-3588从零搭建ubuntu环境手册》-第3章 Ubuntu20.04系统设置

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

【论文阅读笔记】jTrans(ISSTA 22)

个人博客地址 [ISSTA 22] jTrans&#xff08;个人阅读笔记&#xff09; 论文&#xff1a;《jTrans: Jump-Aware Transformer for Binary Code Similarity》 仓库&#xff1a;https://github.com/vul337/jTrans 提出的问题 二进制代码相似性检测&#xff08;BCSD&#xff0…

2024数维杯数学建模B题完整论文讲解(含每一问python代码+结果+可视化图)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2024数维杯数学建模挑战赛生物质和煤共热解问题的研究完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 B题论…

数学学习笔记1——二次函数中的数形结合

二次函数中的数形结合 一、解一元二次不等式 基本方法&#xff1a;配方。 x 2 − 4 x 3 < 0 → ( x − 2 ) 2 < 1 → ∣ x − 2 ∣ < 1 → 1 < x < 3 x^2-4x3<0\to(x-2)^2<1\to\lvert x-2\rvert<1\to1<x<3 x2−4x3<0→(x−2)2<1→∣x−…

VBA_MF系列技术资料1-605

MF系列VBA技术资料1-605 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-0…

具备教学意义的实操(用队列实现栈)

225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/implement-stack-using-queues/description/ 实现逻辑 一个是先进先出&#xff08;队列&#xff09;&#xff0c;一个是后进先出&#xff08;栈&#xff09; 这里用两个队列导入一下数据…

项目管理 | 如何做好项目管理?

大部分人在做项目管理时会遇到以下问题&#xff1a; 团队沟通不畅&#xff0c;对于项目的各个环节和配合方无法掌控项目的任务分配和跟踪困难&#xff0c;项目进度不透明项目上线进度慢&#xff0c;没有威信难以服众 那项目管理怎么做&#xff1f;这篇就结合简道云团队的经验…

爬虫学习:XPath提取网页数据

目录 一、安装XPath 二、XPath的基础语法 1.选取节点 三、使用XPath匹配数据 1.浏览器审查元素 2.具体实例 四、总结 一、安装XPath 控制台输入指令&#xff1a;pip install lxml 二、XPath的基础语法 XPath是一种在XML文档中查找信息的语言&#xff0c;可以使用它在HTM…

数据结构----二叉树

博主主页: 码农派大星. 关注博主带你了解更多数据结构知识 1. 树型结构 1.1 概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上…

【软考】模拟考卷错题本2024-05-11

1 设计模式- 适配器模式 基本上上述的图解已经涵盖了绝大多数主流的设计模式和其特点。理解记忆下即可&#xff0c;这里对下午的考题也有帮助的。 2 计算机组成原理 cpu 访问速度 这个真的是憨憨咯~看到内存就选内存&#xff0c;题目都没审好。这里的速度比cpu内部的要比外部的…