【SpringMVC】用户登录器项目,加法计算器项目的实现

 8e19eee2be5648b78d93fbff2488137b.png

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

一:用户登录项目实现

1:需求

2:准备工作

(1)跳转的页面(首页)

(2) 登录的页面

3:预期结果

 二:约定前后端交互接口

1:需求分析

2:接口定义

(1)校验接口

①请求参数

②响应数据

(2)查询登录用户接口

①请求参数

②响应数据

3:后端校验代码

4:查询登录用户后端代码

 三:调整前端代码

四:运行测试结果

 五:计算器项目实现

1:需求

2:准备工作

3:结果如下

六:约定前后端交互接口

1:需求分析

2:定义接口

3:请求参数

七:后端代码

八:运行测试


一:用户登录项目实现

1:需求

⽤⼾输⼊账号和密码,后端进⾏校验密码是否正确。
(1) 如果不正确,前端进⾏⽤⼾告知
(2)如果正确,跳转到⾸⻚.⾸⻚显⽰当前登录⽤⼾
(3)后续再访问⾸⻚,可以获取到登录⽤⼾信息


2:准备工作

把前端代码放到项目中

(1)跳转的页面(首页)

<!doctype html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>用户登录首页</title>
</head><body>登录人: <span id="loginUser"></span><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script><script></script>
</body></html>

(2) 登录的页面

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>登录页面</title>
</head><body><h1>用户登录</h1>用户名:<input name="userName" type="text" id="userName"><br>密码:<input name="password" type="password" id="password"><br><input type="button" value="登录" onclick="login()"><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script><script>function login() {}</script>
</body></html>

3:预期结果

 二:约定前后端交互接口

1:需求分析

对于后端开发⽽⾔,只需要提供两个功能
①登录⻚⾯:通过账号和密码,校验输⼊的账号密码是否正确,并告知前端
② ⾸⻚:告知前端当前登录⽤⼾.如果当前已有⽤⼾登录,返回登录的账号,如果没有,返回空

2:接口定义

(1)校验接口

请求路径:/user/login
请求⽅式:POST
接⼝描述:校验账号密码是否正确

①请求参数

②响应数据

Content-Type: text/html
响应内容:
true //账号密码验证成功
false//账号密码验证失败

(2)查询登录用户接口

请求路径:/user/getLoginUser
请求⽅式:GET
接⼝描述:查询当前登录的⽤⼾


①请求参数

②响应数据

Content-Type: text/html
响应内容:
zhangsan

3:后端校验代码

package com.example.demoapplication;import jakarta.servlet.http.HttpSession;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.SessionAttribute;/*** Created with IntelliJ IDEA.* Description:* User: Hua YY* Date: 2024-11-11* Time: 13:10*/@RestController
@RequestMapping("/user")
public class LoginController {/** 这个类中的login方法是用来检验前端请求中的账号和密码是否正确的* */@RequestMapping(value = "/login")public Boolean login(String userName , String password , HttpSession session){//参数校验/*if(userName == null || userName.length() == 0|| password == null || password.length() == 0){return false;}*/if(!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)){return false;}//检验账号密码是否正确,这里内置的账号密码写死了,后面接触数据库之后在加深理解if(!"cbro".equals(userName) || !"123456".equals(password)){return false;}session.setAttribute("userName" , userName);return true;}@RequestMapping("/index")public String getUserName(@SessionAttribute("userName") String userName){return userName;}
}

StringUtils.hasLength()是Spring提供的⼀个⼯具⽅法,判断字符串是否有值,字符串为null或者""时,返回false,其他返回true。

4:查询登录用户后端代码

@RestController
@RequestMapping("/user")
public class getLoginUser {@RequestMapping(value = "/getLoginUser" )public String getLoginUser(HttpSession session){String userName = (String)session.getAttribute("userName");//向下转型if(StringUtils.hasLength(userName)){return userName;}return "";}
}

 三:调整前端代码

<!doctype html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>用户登录首页</title>
</head><body>登录人: <span id="loginUser"></span><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script><script>$.ajax({url:"/user/getLoginUser",//这里才是真正的调用后端type:"get",success:function (loginName){//调用回调函数,接收后端结果,用body参数接收//给登录人span重新赋值$("#loginUser").text(loginName);//用text赋值,赋值来源为loginName}});</script>
</body></html>
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>登录页面</title>
</head><body><h1>用户登录</h1>用户名:<input name="userName" type="text" id="userName"><br>密码:<input name="password" type="password" id="password"><br><input type="button" value="登录" onclick="login()"><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script><script>function login() {//当点击登录的时候onclick调用function中的login//ajax请求包含路径类型,访问成功...,访问失败.....//格式   $.ajax({})  括号里面是一个对象$.ajax({url:"/user/login",//这里才是真正的调用后端type:"post",data:{  // data接收参数userName: $("#userName").val(),password: $("#password").val()},//以上是发送请求,响应成功//回调函数function内部有一个内置的参数用来接收后端的响应success:function (result){//result参数接收响应结果if(result){location.href = "/index.html"}else{alert("账号密码有误");//弹框}}})}</script>
</body></html>

四:运行测试结果

多次刷新http://127.0.0.1:8080/index.html发现依然可以获取到登录⽤⼾
如果重启服务器,则登录⼈显⽰:空

Session存在内存中,如果不做任何处理,默认服务器重启,Session数据就丢失了

 五:计算器项目实现

1:需求

输⼊两个整数,点击"点击相加"按钮,显⽰计算结果

2:准备工作

把前端代码引入项目中

前端代码如下

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><form action="calc" method="post"><h1>计算器</h1>数字1:<input name="num1" type="text"><br>数字2:<input name="num2" type="text"><br><input type="submit" value=" 点击相加 "></form></body></html>

3:结果如下

六:约定前后端交互接口

1:需求分析

加法计算器功能,对两个整数进⾏相加,需要客⼾端提供参与计算的两个数,服务端返回这两个整数计算的结果

2:定义接口

请求路径:calc/sum
请求⽅式:GET/POST
接⼝描述:计算两个整数相加

3:请求参数

七:后端代码

@RestControllerpublic class CalculateController {@RequestMapping("/calc")public String sum(Integer num1 , Integer num2){int sum = num1 + num2;return "<h1>计算的结果是:" + sum + "</h1>";}}

八:运行测试

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

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

相关文章

3.5 认识决策树

3.5 认识决策树 3.5.1 认识决策树 如何高效的进行决策&#xff1f; 特征的先后顺序 3.5.2 决策树分类原理详解 已知有四个特征&#xff0c;预测 是否贷款给某个人。 先看房子&#xff0c;再看工作&#xff0c;是否贷款。 年龄&#xff0c;信贷情况&#xff0c;工作&#…

AI智能体Prompt预设词指令大全+GPTs应用使用

AI智能体使用指南 直接复制在AI工具助手中使用&#xff08;提问前&#xff09; 可前往SparkAi系统用户官网进行直接使用 SparkAI系统介绍文档&#xff1a;Docs 常见AI智能体GPTs应用大全在线使用 自定义添加制作AI智能体进行使用&#xff1a; 文章润色器 你是一位具有敏锐洞察…

K8S,StatefulSet

有状态应用 Deployment实际上并不足以覆盖所有的应用编排问题&#xff1f; 分布式应用&#xff0c;它的多个实例之间&#xff0c;往往有依赖关系&#xff0c;比如&#xff1a;主从关系、主备关系。 还有就是数据存储类应用&#xff0c;它的多个实例&#xff0c;往往都会在本地…

子类有多个父类的情况下Super不支持指定父类来调用方法

1、Super使用方法 super()函数在Python中用于调用父类的方法。它返回一个代理对象&#xff0c;可以通过该对象调用父类的方法。 要使用super()方法&#xff0c;需要在子类的方法中调用super()&#xff0c;并指定子类本身以及方法的名称。这样就可以在子类中调用父类的方法。 …

使用国内镜像源加速Qt“更新/安装”的方法

QT更新/安装时&#xff0c;国外源下载很慢&#xff0c;国内镜像源也因网络环境的不同而速度各异&#xff0c;下文给出国内镜像源的配置方法。 一、命令行 1、切换对应目录&#xff0c;更新器默认目录是 C:\Qt 2、文件名镜像源 安装示例&#xff1a; .\qt-unified-windows-x…

如何让Google快速收录你的页面?

要让Google更快地收录你的网站内容&#xff0c;首先需要理解“爬虫”这个概念。Google的爬虫是帮助它发现和评估网站内容质量的工具&#xff0c;如果你的页面质量高且更新频率稳定&#xff0c;那么Google爬虫更可能频繁光顾。通常情况下&#xff0c;通过Google Search Console&…

qtcanpool 知 10:包管理雏形

文章目录 前言痛点转机雏形实践后语 前言 曾听闻&#xff1a;C/Qt 没有包管理器&#xff0c;开发起来太不方便。这是一个有过 node.js 开发经验的人对 Qt 的吐槽。 确实&#xff0c;像 python、golang、node.js 这些编程语言都有包管理器&#xff0c;给用户带来了极佳的开发体…

网络安全知识:网络安全网格架构

在数字化转型的主导下&#xff0c;大多数组织利用多云或混合环境&#xff0c;包括本地基础设施、云服务和应用程序以及第三方实体&#xff0c;以及在网络中运行的用户和设备身份。在这种情况下&#xff0c;保护组织资产免受威胁涉及实现一个统一的框架&#xff0c;该框架根据组…

CEEMDAN-CPO-VMD二次分解(CEEMDAN+冠豪猪优化算法CPO优化VMD)

CEEMDAN-CPO-VMD二次分解&#xff08;CEEMDAN冠豪猪优化算法CPO优化VMD&#xff09; 目录 CEEMDAN-CPO-VMD二次分解&#xff08;CEEMDAN冠豪猪优化算法CPO优化VMD&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 首先运用CEEMDAN对数据进行一次分解&#xff…

Ubuntu 22.04安装Nessus(离线激活模式)

Ubuntu 22.04安装Nessus 一、 Nessus 简介二、Nessus下载安装三、激活Nessus四、创建一个基础扫描五、 破解Nessus只能扫描16个地址的限制六、更新插件 一、 Nessus 简介 Nessus 官网&#xff1a; https://www.tenable.com/ Nessus号称世界上最流行的扫描程序&#xff0c;Nessu…

Ubuntu22.04深度学习环境安装【显卡驱动安装】

前言 使用Windows配置环境失败&#xff0c;其中有一个包只有Linux版本&#xff0c;Windows版本的只有python3.10的&#xff0c;所以直接选用Linux来配置环境&#xff0c;显卡安装比较麻烦&#xff0c;单独出一期。 显卡驱动安装 方法一&#xff1a;在线安装&#xff08;操作…

简单的动态带特殊符号敏感词校验

简单的动态带特殊符号敏感词校验 敏感词之前进行了简单了解&#xff0c;使用结巴分词自带词库可以实现&#xff0c;具体参考我的如下博文 敏感词校验 此次在此基础进行了部分优化&#xff0c;优化过程本人简单记录一下&#xff0c;具体优化改造步骤如下所示 1.需求 我们公司…

TCP客户端服务器端通信(线程池版)

1、什么是监听套接字&#xff0c;和UDP相比&#xff0c;TCP为什么文件描述符变多了&#xff1f; 在网络编程中&#xff0c;TCP和UDP是两种常见的传输协议&#xff0c;它们之间最大的不同之一在于连接的管理方式。为了更好地理解这个区别&#xff0c;我们可以用一个生动的比喻来…

微搭低代码AI组件单词消消乐从0到1实践

目录 1 为什么要开发单词消消乐2 需要具备什么功能3 采用什么技术方案实现4 逻辑设计4.1 数据结构设计4.2 游戏的核心逻辑4.3 数据设计 5 代码详解5.1 导入依赖5.2 定义函数组件5.3 数据初始化5.4 状态定义5.5 打乱解释的逻辑5.6 定义选择单词的函数5.7 定义选择解释的函数5.8 …

泷羽sec学习打卡-shell命令6

声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都 与本人无关,切莫逾越法律红线,否则后果自负 关于shell的那些事儿-shell6 if条件判断for循环-1for循环-2实践是检验真理的唯一标准 if条件判断 创建…

QT 中 sqlite 数据库使用

一、前提 --pro文件添加sql模块QT core gui sql二、使用 说明 --用于与数据库建立连接QSqlDatabase--执行各种sql语句QSqlQuery--提供数据库特定的错误信息QSqlError查看qt支持的驱动 QStringList list QSqlDatabase::drivers();qDebug()<<list;连接 sqlite3 数据库 …

万字长文解读深度学习——dVAE(DALL·E的核心部件)

&#x1f33a;历史文章列表&#x1f33a; 深度学习——优化算法、激活函数、归一化、正则化 深度学习——权重初始化、评估指标、梯度消失和梯度爆炸 深度学习——前向传播与反向传播、神经网络&#xff08;前馈神经网络与反馈神经网络&#xff09;、常见算法概要汇总 万字长…

【Python】练习【24-12-8】

题目出处 《Python程序设计基础&#xff08;第2版&#xff09;》&#xff0c;李东方等 主编&#xff0c;电子工业出版社&#xff0c;北京&#xff0c;2020.1 第 3 章&#xff1a;《Python程序的基本流程控制》 题目描述 3、编写程序&#xff0c;产生两个10以内的随机整数&a…

五、docker的网络模式

五、docker的网络模式 5.1 Docker的四种网络模式 当你安装docker时&#xff0c;它会自动创建三个网络&#xff0c;可使用如下命令查看&#xff1a; [rootlocalhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 7390284b02d6 bridge bridge lo…

二叉树优选算法(一)

一、根据二叉树创建字符串 题目介绍&#xff1a; 给你二叉树的根节点 root &#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号和整数组成的字符串&#xff0c;返回构造出的字符串。 空节点使用一对空括号对 "()" 表示&#xff0c;转化后需…