实习课知识整理2:用户登录及实现登录后用户名和头像的展示

接上一篇,当用户点击购买按钮后,还是未登录的状态,此时页面会跳转到登录页面,这时需要输入正确的用户名和密码,完成登录

1. 给登录按钮添加点击事件,并提交表单中的数据到后端

<form th:action="@{/user/loginIndex}" method="post"><div class="wthree-field"><input name="userName" id="userName" type="text" value="" placeholder="Username" required></div><div class="wthree-field"><input name="passWord" id="passWord" type="Password" placeholder="Password"></div><div class="wthree-field"><button type="submit" class="btn">Sign In</button></div><div class="login-bottom"><a href="#url" class="">Create An Account</a></div>
</form>

注意: 这边跳转路径的写法:@表示根路径

 

 2. 后端编写根据用户名查找用户的方法

 UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.shopping.mapper.UserMapper"><resultMap id="userBaseResultMap" type="User"><!-- 映射字段 --><id column="USER_ID" property="userId"/><id column="USER_NAME" property="userName"/><id column="PWD" property="passWord"/><id column="SEX" property="sex"/><id column="BIRTH" property="birth"/><id column="STATE" property="state"/><id column="ROLE" property="role"/><id column="USER_IMAGE" property="userImage"/><id column="PHONE" property="phone"/><id column="SCORE" property="score"/><id column="BALANCE" property="balance"/></resultMap><select id="findUserByName" resultMap="userBaseResultMap">select * from shopping.user where USER_NAME=#{userName}</select></mapper>

UserMapper.java

    // 根据用户名查找用户User findUserByName(String userName);

 UserService.java接口

    // 根据姓名查找User findUserByName(String userName);

UserServiceImpl实现类

    public User findUserByName(String userName) {return userMapper.findUserByName(userName);}

到这边我们已经将根据用户名参数查找用户的信息的方法已经写好了,那么便可以再写一个登录的方法,便于一系列的信息校验 

 在UserServiceImpl实现类编写登录的逻辑处理

在这个方法中调用上述编写的 findUserByName() 方法

    @Overridepublic String login(User user) {  // 后面会使用DTO进行数据的封装User userInfo = findUserByName(user.getUserName());if (null == userInfo) {return "nameError";  /*用户名不存在*/} else {if (userInfo.getPassWord().equals(user.getPassWord())) {if (1 == userInfo.getState()) {if (1 == userInfo.getRole()) {return "custom";  /*普通用户*/} else if (8 == userInfo.getRole()) {return "itemAdmin";   /*商品管理员*/} else if (9 == userInfo.getRole()) {return "superAdmin";   /*超级管理员*/} else {return "otherError";}} else {return "stateError";  /*只有状态为 1 才可以登录*/}} else {return "passWordError";  /*密码错误*/}}}

上述的一系列校验条件是我根据数据库中的相应信息写的,可以根据实际情况修改 

 

 编写UserController代码, 在controller层中调用service层中写的login()方法 

    @RequestMapping("/loginIndex")public ModelAndView login(ModelAndView mav, User user, HttpSession session) throws Exception{// 调用登录的方法String loginResult = userService.login(user);switch (loginResult) {case "nameError":mav.addObject("errInfo", "用户名不存在");mav.setViewName("login");break;case "passwordError":mav.addObject("errInfo", "密码错误");mav.setViewName("login");break;case "stateError":mav.addObject("errInfo", "状态错误");mav.setViewName("login");break;case "custom":// 只有普通用户才能跳到主页// 登录后,需要携带商品的一系列信息List<Item> allItems = itemService.getItemList();List<Item> itemsByHeart = itemService.getItemListByHeart();mav.addObject("allItems",allItems);mav.addObject("itemsByHeart",itemsByHeart);User loginUser = userService.findUserByName(user.getUserName());session.setAttribute("loginUser", loginUser);  // 将用户登录的信息放到session中mav.setViewName("index");break;case "otherError":break;case "itemAdmin":System.out.println("8未完善");break;case "superAdmin":System.out.println("9未完善");break;}return mav;}

 相关注意点:

3. 登录后,再进行购买商品操作 

 

用户的用户名和头像都可以从session.loginUser中获取

 

因为登录后session.loginUser已经不是空字符串了,所以便会打印出跳转到商品结算页面字样

 

 

 4. 如果登录失败,后端也会返回相对应的信息

 前端渲染到页面上:

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

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

相关文章

Elasticsearch Reroute API 的使用

本文通过一个 Elasticsearch 集群中主分片分配不均衡的例子演示一下 Cluster reroute API 的使用。 对于 Elasticsearch 分片分配策略不了解的同学可以点一下关注&#xff0c;后面更文之后获取第一手资料。 环境信息 Windows 10 Elasticsearch 8.1 JDK17 初始集群状态 分片…

【JAVA面试题】什么是引用传递?什么是值传递?

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 前言 博客的正文部分可以详细介绍Java中参数传递的机制&#xff0c;强调Java是按值传递的&#xff0c;并解释了基本数据类型和对象引用在这种传…

鳄鱼目标检测数据集VOC格式100张

鳄鱼是一种生活在热带和亚热带地区的爬行动物&#xff0c;属于爬行纲鳄形目鳄鱼科。它们的体形庞大&#xff0c;有粗壮的四肢和强壮的尾巴&#xff0c;一般能长到2-6米长&#xff0c;体重可达500公斤以上。鳄鱼的皮肤粗糙&#xff0c;呈灰褐色或黑色&#xff0c;布满了坚韧的鳞…

XSKY星辰天合星海架构荣获 IT168 “2023 年度技术卓越奖”

近日&#xff0c;"2023 年度技术卓越奖"获奖名单公布&#xff0c;XSKY 星辰天合的星海架构&#xff08;XSEA&#xff0c;极速全共享架构&#xff09;获得行业 CIO/CTO 大咖、技术专家及 IT 媒体三方认可&#xff0c;成功入选&#xff01; “技术卓越奖”评选由国内著…

【Linux驱动】字符设备驱动程序框架 | LED驱动

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f3c0;Hello驱动程序⚽驱动程序框架⚽编程 &#x1f3c0;LED驱动⚽配置GPIO⚽编程驱动…

最小二乘法简介

最小二乘法简介 1、背景描述2、最小二乘法2.1、最小二乘准则2.2、最小二乘法 3、最小二乘法与线性回归3.1、最小二乘法与线性回归3.2、最小二乘法与最大似然估计 4、正态分布&#xff08;高斯分布&#xff09; 1、背景描述 在工程应用中&#xff0c;我们通常会用一组观测数据去…

电商数仓项目----笔记六(数仓ODS层)

ODS层的设计要点如下&#xff1a; &#xff08;1&#xff09;ODS层的表结构设计依托于从业务系统同步过来的数据结构。 &#xff08;2&#xff09;ODS层要保存全部历史数据&#xff0c;故其压缩格式应选择压缩比较高的&#xff0c;此处选择gzip。 &#xff08;3&#xff09;…

C++入门-【13-C++ 多维数组】

C 多维数组 C 支持多维数组。多维数组声明的一般形式如下&#xff1a; type name[size1][size2]...[sizeN]; 例如&#xff0c;下面的声明创建了一个三维 5 . 10 . 4 整型数组&#xff1a; int threedim[5][10][4]; 二维数组 多维数组最简单的形式是二维数组。一个二维数组&am…

用23种设计模式打造一个cocos creator的游戏框架----(二十三)中介者模式

1、模式标准 模式名称&#xff1a;中介者模式 模式分类&#xff1a;行为型 模式意图&#xff1a;用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互。 结构图&#xff…

竞赛保研 基于GRU的 电影评论情感分析 - python 深度学习 情感分类

文章目录 1 前言1.1 项目介绍 2 情感分类介绍3 数据集4 实现4.1 数据预处理4.2 构建网络4.3 训练模型4.4 模型评估4.5 模型预测 5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于GRU的 电影评论情感分析 该项目较为新颖&#xff0c;适合作为竞…

Linux基本指令(一)

前言 基本知识 文件文件内容文件属性(对文件的操作就是对这两部分进行操作) 在Linux中以 . 开头的文件叫隐藏文件 以-开头的是普通文件 以d开头的是目录文件 几个指令 先快速认识几个指令&#xff0c;方便后续的详细介绍 whoami 查看当前使用Linux系统的用户是谁 pwd …

要参加微软官方 Copilot 智能编程训练营了

GitHub Copilot 是由 GitHub、OpenAI 和 Microsoft 联合开发的生成式 AI 模型驱动的。 GitHub Copilot 分析用户正在编辑的文件及相关文件的上下文&#xff0c;并在编写代码时提供自动补全式的建议。 刚好下周要参加微软官方组织的 GitHub Copilot 工作坊-智能编程训练营&…

【51单片机系列】C51中的中断系统扩展实验

本文是关于51单片机中断系统的扩展实验。 文章目录 一、 扩展实验一&#xff1a;使用外部中断0控制蜂鸣器&#xff0c;外部中断1控制直流电机二、扩展实验二&#xff1a;修改定时器初值&#xff0c;设定3秒钟的定时时间让LED模块闪烁三、扩展实验三&#xff1a;使用定时器1和数…

法线贴图实现地形模型皱褶、凹凸不平的纹理效果

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 法线贴图在3D建模中扮演着重要的角色&#xff0c;它通过模拟表面的微…

(十七)Flask之大型项目目录结构示例【二扣蓝图】

大型项目目录结构&#xff1a; 问题引入&#xff1a; 在上篇文章讲蓝图的时候我给了一个demo项目&#xff0c;其中templates和static都各自只有一个&#xff0c;这就意味着所有app的模板和静态文件都放在了一起&#xff0c;如果项目比较大的话&#xff0c;这就非常乱&#xf…

Canal使用详解

Canal介绍 Canal是阿里巴巴开发的MySQL binlog增量订阅&消费组件&#xff0c;Canal是基于MySQL二进制日志的高性能数据同步系统。在阿里巴巴集团中被广泛使用&#xff0c;以提供可靠的低延迟增量数据管道。Canal Server能够解析MySQL Binlog并订阅数据更改&#xff0c;而C…

springboot集成websocket全全全!!!

一、界面展示 二、前置了解 1.什么是websocket WebSocket是一种在单个TCP连接上进行全双工通信的持久化协议。 全双工协议就是客户端可以给我们服务器发数据 服务器也可以主动给客户端发数据。 2.为什么有了http协议 还要websocket 协议 http协议是一种无状态&#xff0c;非…

可视化开发

可视化开发 数据可视化 交互式可视化 文章目录 可视化开发前言一、可视化开发二、Python数据可视化大屏GIS图像智能识别处理软件开发三、可视化开发必备总结前言 可视化开发可以帮助开发者通过图形化界面和拖放操作来创建、编辑和测试应用程序。使用这些工具,开发者可以提高开…

【小黑嵌入式系统第十二课】μC/OS-III程序设计基础(二)——系统函数使用场合、时间管理、临界区管理、使用规则、互斥信号量

上一课&#xff1a; 【小黑嵌入式系统第十一课】μC/OS-III程序设计基础&#xff08;一&#xff09;——任务设计、任务管理&#xff08;创建&基本状态&内部任务&#xff09;、任务调度、系统函数 文章目录 一、系统函数使用场合1.1 时间管理1.1.1 控制任务的执行周期1…

代码随想录算法训练营Day7 | 344.反转字符串、541.反转字符串||、替换数字、151.反转字符串中的单词、右旋字符串

LeetCode 344 反转字符串 本题思路&#xff1a;反转字符串比较简单&#xff0c;定义两个指针&#xff0c;一个 i 0, 一个 j s.length-1。然后定义一个临时变量 tmp&#xff0c;进行交换 s[i] 和 s[j]。 class Solution {public void reverseString(char[] s) {int i 0;int …