【Spring】Spring实现加法计算器和用户登录

server/2024/10/17 6:05:45/

加法计算器

准备工作

创建 SpringBoot 项目:引入 Spring Web 依赖,把前端的页面放入项目中

**<!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/sum" 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>**

放入静态文件夹image.png|422
image.png


约定前后端交互接口

接口定义:前后端交互的约定,定义完了之后,前端就按照这个文档进行开发

  1. 通常由服务端定义
  2. 定义之后,客户端(前端)进行检查(review
  3. 双方开始并行开发

概念介绍

约定“前后端交互接口”是进行 Web 开发中的关键环节。接口又叫 APIApplication Programming Interface),我们一般讲到接口或者 API,指的都是同一个东西

是指应用程序对外提供的服务的描述,用于交换信息和执行任务(与 JavaSE 中学习的类和接口是两回事)。简单来说,就是允许客户端给服务器发送哪些 HTTP 请求,并且每种请求预期获取什么样的 HTTP 响应。

现在“前后端分离”模式开发,前端和后端的代码通常由不同的团队负责开发,双方团队在开发之前,会提前约定好交互的方式

  • 客户端发起请求
  • 服务器提供对应的服务
    服务器提供的服务种类有很多,客户端按照双方约定指定选择哪一个服务

接口,其实也就是我们前面网络模块讲的“应用层协议”,把约定的内容写在文档上,就是“接口文档”,接口文档也可以理解为是应用程序的“操作说明书”

  • 接口定义之后,不轻易改变
  • 如果需要修改,就必须要通知到每一个调用方
  • 一定同步接口文档,防止背锅

比如儿童玩具 image.png|300

  • 按 1:响应儿歌
  • 按 2:响应钢琴曲
  • 按 3:安抚睡眠
    等等,但是这些操作说明,如果没有一个文档来说明,用户就不太清楚哪个按键对应哪个,所以商品一般会带一个说明书。
  • 这些按键,就是“接口“
  • 这个说明书,就是应用程序的“接口文档“

需求分析

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


基于上面的分析,我们来定义接口

接口定义

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

请求参数

参数名类型是否必须备注
num 1Integer参与计算的第一个数
num 2Integer参与计算的第二个数

服务器端代码

java">import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RestController;  @RequestMapping("/calc")  
@RestController  
public class CalcController {  @RequestMapping("/sum")  public String sum(Integer num1, Integer num2) {  Integer sum = num1 + num2;  return "计算器计算结果: " + sum;  }  
}

image.png

遇到问题后如何解决

  1. 先测试后端接口。通过 Postman 测试后端接口有没有问题,排除后端的情况

  2. 看日志

  3. 如果觉得代码没问题,就优先考虑缓存问题

    • 前端缓存,ctrl+F5 强制刷新,或者大招(清除浏览器缓存)
    • 后端缓存:Maven ——> Lifecycle ——> cleannnn

用户登录

需求:用户输入账号和密码,后端进行校验密码是否正确

  1. 如果不正确,前端进行用户告知
  2. 如果正确,跳转到首页,首页显示当前登录用户
  3. 后续再访问首页,可以获取到登录用户信息

准备工作

把前端页面放在项目中 image.png|274

约定前后端交互接口

需求分析

对于后端开发人员而言,不涉及前端页面的展示,只需要提供两个功能

  1. 登录页面:通过账号和密码,校验输入的账号密码是否正确,并告知前端
  2. 首页:告知前端当前登录用户,如果当前已有登录用户,返回登录的账号;如果没有,则返回 null

校验接口

校验接口

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

请求参数

参数名类型是否必须备注
userNameString校验的账号
userNameString校验的密码

响应数据

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

登录接口

请求路径:/user/getLoginUser请求方式:GET接口描述:查询当前登录的用户

请求参数:无

  • 当我们登录成功之后,后端会将当前用户的信息存储到 Session 中。之后后端要用的时候直接到里面拿就可以了
  • 前端发送请求的时候,任何的信息 Cookie 都会带过去,不管你要不要

响应数据

Content-Type:text/html响应内容:zhangsan
  • 返回当前登录的用户

服务器端代码

参数校验

普通判断方式

java">import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RestController;  @RestController  
@RequestMapping("/user")  
public class UserController {  @RequestMapping("/login")  public Boolean login(String userName, String password){  //参数校验  if(userName == null || userName.length()==0  || password == null || password.length()==0){  return false;  }  }  
}

学习 Spring 后的判断方式

java">@RestController  
@RequestMapping("/user")  
public class UserController {  @RequestMapping("/login")  public Boolean login(String userName, String password){  //参数校验  if(!StringUtils.hasLength(userName)|| !StringUtils.hasLength(password)) {  return false;  }  }  
}

判断密码是否正确

java">@RestController  //登录接口  
@RequestMapping("/user")  
public class UserController {  @RequestMapping("/login")  public Boolean login(String userName, String password){  //参数校验  if(!StringUtils.hasLength(userName)|| !StringUtils.hasLength(password)) {  return false;  }  //判断密码是否正确  if("admin".equals(userName) && "admin".equals(password)){  return true;  }  return false;  }  
}

上面已经做了判空的处理,userName 不会为 null

  • 但如果上面没有进行判断,userName 为空的时候就会报空指针异常
  • 所以就把常量写在前面,这是一种习惯

登录页面

  • 当你从 Session 拿数据的时候,前提是要有人设置过 Session 信息才可以
    • 我们就在 HttpSession 直接拿就好了(在前面先定义)

调整前端页面代码

  1. 调整登录页面 login.html

对于前端而言,当点击登录按钮时,需要把用户输入的信息传递到后端进行校验,后端校验成功,则跳转到首页:index. 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>javascript">function login() {$.ajax({url:"/user/login",type:"post",data:{userName: $("#userName").val(),password: $("#password").val()},//http响应成功后success:function(result){if(result==true){//页面跳转location.href = "index.html";//location.assign("index.html");//location.replace("index.html");}else{alert("密码错误");}}})}</script>
</body>
</html>

使用 ajax 传递参数。

  • 请求发送完毕之后(url—data)就等待接收的结果
    sucesshttp 响应成功之后执行的函数(返回 200)。并不是账号密码响应成功,返回 true 的时候
  • 对应的是一个回调函数
  • 其里面有一个内置的参数,接收我们的 http 响应(使用任何一个变量都可以)

  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>javascript">$.ajax({url: "/user/index",type: "get",success: function (loginName) {$("#loginUser").test(loginName);}})</script>
</body></html>

http://www.ppmy.cn/server/132412.html

相关文章

量化高频数据获取以及策略分析

标题&#xff1a;量化高频价差交易&#xff1a;技术与策略的完美结合 一、概述 量化高频价差交易&#xff0c;作为金融市场的一种新兴交易方式&#xff0c;以其独特的优势在众多交易策略中脱颖而出。本文将探讨量化高频价差交易的原理、策略及其在实战中的应用&#xff0c;为广…

爬虫逆向学习(十二):一个案例入门补环境

此分享只用于学习用途&#xff0c;不作商业用途&#xff0c;若有冒犯&#xff0c;请联系处理 反爬前置信息 站点&#xff1a;aHR0cDovLzEyMC4yMTEuMTExLjIwNjo4MDkwL3hqendkdC94anp3ZHQvcGFnZXMvaW5mby9wb2xpY3k 接口&#xff1a;/xjzwdt/rest/xmzInfoDeliveryRest/getInfoDe…

线下陪玩导游系统软件源码,家政预约服务源码(h5+小程序+app)

游戏陪玩系统源码陪玩小程序源码搭建基于PHP&#xff0b;MySQL陪玩系统app源码陪玩系统定制开发服务、成品陪玩系统源码 系统基于Nginx或者Apache PHP7.3 数据库mysql5.6 前端为uniapp-vue2.0 后端为thinkphp6 有域名授权加密&#xff0c;其他开源可二开 演示源码下载 开…

学习 Python 的途径

学习 Python 有许多途径,以下是一些常见的学习方法: 1. 阅读官方文档: Python 官方文档是学习和参考 Python 的权威资源,详细介绍了 Python 的语法、标准库、以及各种高级特性。文档包含教程、语言参考和库参考等内容。 - [Python 官方文档](https://docs.python.org/z…

基于SpringBoot的宇宙动漫网站系统【附源码】

基于SpringBoot的宇宙动漫网站系统 效果如下&#xff1a; 系统首页界面 用户注册界面 动漫信息页面 公告信息页面 管理员登录主页面 管理员主界面 动漫信息管理界面 订阅信息管理界面 研究背景 随着互联网技术的飞速发展&#xff0c;动漫文化在全球范围内迅速传播&#xff0…

信息与计算科学:“数学 + 计算机”,奏响未来科技新乐章

在当今科技飞速发展的时代&#xff0c;有一个专业如同一颗闪耀的新星&#xff0c;散发着独特的魅力&#xff0c;那就是信息与计算科学专业。 一、专业全貌&#xff1a;追根溯源&#xff0c;领略交叉之美 &#xff08;一&#xff09;专业的诞生与发展 1998 年&#xff0c;教育…

Android Jetpack Compose中UI刷新的几种方式

Android Jetpack Compose中UI刷新的几种方式 在 Jetpack Compose 中,如果你想强制刷新 UI,可以使用 remember 和 mutableStateOf 来创建一个可观察的状态。当这个状态变化时,Compose 会自动重组 UI。以下是一些常见的方法来实现这一点: 1. 使用 mutableStateOf 你可以使…

Redis学习笔记:跳跃表

概述 跳跃表&#xff08;skiplist&#xff09;是一种有序数据结构。相比于普通的链表访问元素需要一步一步的向后查找&#xff0c;它通过在每个节点中维持多个指向其他节点的指针&#xff0c;从而达到快速访问节点的目的。跳跃表支持平均O(logN)、最坏O(N)复杂度的节点查找。R…