【JavaEE进阶】实现简单的加法计算器和用户登录

news2025/1/18 5:45:32

目录

🎍序言

🌳加法计算器

🚩准备工作

🚩约定前后端交互接口

🚩后端服务器代码的书写

🌴用户登录

🚩准备工作

🚩约定前后端交互接口

🏀需求分析

🏀接口定义

📌校验接口

📌查询登录用户接口

🚩后端代码的书写

🏀校验接口代码

🏀查询登录用户接口

🏀完整代码和接口测试

🚩调整前端页面代码

🏀ajax介绍

🏀调整登录页面login.html

🏀调整首页index.html


🎍序言

本文章主要内容:

  1. 理解前后端交互过程
  2. 接口传参,数据返回,以及页面展示

🌳加法计算器

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

效果展示如下:

具体实现步骤,大致分为以下几步:

  1. 准备工作
  2. 约定前后端交互接⼝
  3. 后端服务器代码的书写

🚩准备工作

创建SpringBoot项⽬: 引⼊Spring Web依赖

创建calc.html文件

接下来我会直接给出前端的代码,直接照抄即可,前端代码如下:

🚩约定前后端交互接口

接口概念介绍:

约定"前后端交互接"是进⾏Web开发中的关键环节

接⼝⼜叫API(Application Programming Interface),我们⼀般讲到接⼝或者API,指的都是同⼀个东西.

是指应⽤程序对外提供的服务的描述,⽤于交换信息和执⾏任务(与JavaSE阶段学习的[类和接⼝]中的接⼝是两回事).

简单来说,就是允许客⼾端给服务器发送哪些HTTP请求,并且每种请求预期获取什么样的HTTP响应.

现在"前后端分离"模式开发,前端和后端代码通常由不同的团队负责开发.双⽅团队在开发之前,会提前约定好交互的⽅式.客⼾端发起请求,服务器提供对应的服务.

服务器提供的服务种类有很多,客⼾端按照双⽅约定指定选择哪⼀个服务
接⼝,其实也就是我们前⾯⽹络模块讲的的"应⽤层协议".把约定的内容写在⽂档上,就是"接⼝⽂档",接⼝⽂档也可以理解为是应⽤程序的"操作说明书

在项⽬开发前,根据需求先约定好前后端交互接⼝,双⽅按照接⼝⽂档进⾏开发.

  • 接⼝⽂档通常由服务提供⽅来写,交由服务使⽤⽅确认,也就是客⼾端.
  • 接⼝⽂档⼀旦写好,尽量不要轻易改变.
  • 如若需要改变,必须要通知另⼀⽅知晓

接下来我们一起来写一个关于加法计算器的简单的接口文档

首先我们进行需求分析:

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

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

  1. 站在前端的角度:前端需要计算的结果
  2. 站在后端的角度:后端需要输入的数据

请求路径(URL):calc/sum

参数:num1(Integer)  num2(Integer)
请求⽅式:GET/POST
接⼝描述:计算两个整数相加

对于请求参数说明:

最后我们对于响应数据的格式也进行规定

Content-Type: text/html
响应内容:例如:计算结果为:23+25=48

🚩后端服务器代码的书写

基于接口文档我们就直接书写了

代码:

先测试后端代码,通过浏览器访问:观察结果后端是没有问题的

接下来就是前端和后端进行交互,上述calc.html通过浏览器访问:

🌴用户登录

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

1. 如果不正确,前端进⾏用户告知

2. 如果正确,跳转到⾸⻚.⾸⻚显⽰当前登录用户

3. 后续再访问⾸⻚,可以获取到登录⽤⼾信息

前端页面展示:

🚩准备工作

将前端代码放入static文件中:

index.html代码如下:

longin.html代码如下:

🚩约定前后端交互接口

🏀需求分析

对于后端开发⼈员⽽⾔,不涉及前端⻚⾯的展⽰,只需要提供两个功能

  1. 登录⻚⾯: 通过账号和密码,校验输⼊的账号密码是否正确,并告知前端
  2. ⾸⻚:告知前端当前登录⽤⼾.如果当前已有⽤⼾登录,返回登录的账号,如果没有,返回false

🏀接口定义

该功能设计两个页面,所以这里我们定义两个接口

📌校验接口

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

  • 请求参数

  • 响应数据

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

  • true //账号密码验证成功
  • false//账号密码验证失败
📌查询登录用户接口

请求路径:/user/getUserInfo
请求⽅式:GET
接⼝描述:查询当前登录的用户信息

  • 请求参数

  • 响应数据

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

🚩后端代码的书写

🏀校验接口代码

校验我们首先需要进行判断用户名与密码是否为空或者长度为0,若为,则返回false。

这里我们选择使用StringUtils.hasLength()来判断,StringUtils.hasLength()是Spring提供的⼀个⼯具⽅法,判断字符串是否有值(或者字符串是否有长度),字符串为null或者""时,返回false,其他返回true

其次由于我们这里并没有添加数据库,所以我们直接使用固定的字符串进行判断。

如果用户名与密码正确,则将该用户添加至session

🏀查询登录用户接口

对于该接口实现就更加加简单了。直接在HttpSeesion对象中获取即可

🏀完整代码和接口测试

代码:

后端接口测试:

🚩调整前端页面代码

🏀ajax介绍

在上述的加法计算器中,前端是通过最原生的from表单来提交的,接下来换一种方式。

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。

AJAX 不需要任何浏览器插件,但需要用户允许 JavaScript 在浏览器上执行。

例子:在上述加法计算器中点击"点击相加"之后,就会跳转到另一个页面,但是有的时候,比如有一个登录页面,当我们用户名密码输入正确之后才需要进行页面跳转,用户名或者密码错误的时候,就不需要跳转,若出现跳转会给用户带来非常不好的体验!或者说一个注册页面,当用户 输入一个用户名之后,如果说该用户名已经被注册了,则提示"用户名已被注册",而这个数据是通过在数据库中查询之后得到的结果,即该结果是从后端返回的,而当前页面是没有进行跳转的,这种体验也是非常好的!上述的加法计算器是通过from表单的形式提交的,页面是一定会跳转的。

那么ajax是属于异步调用,异步调用的意思是我给你发送了一个请求,等你进行回复,等你回复之后,我再来看接下来的操作是什么。from表单是直接跳转到另一个URL了。

同步和异步的区别:

  • 同步,可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到返回的值或消息后才往下执行其他的命令。
  • 异步,执行完函数或方法后,不必阻塞性地等待返回值或消息,只需要向系统委托一个异步过程,那么当系统接收到返回值或消息时,系统会自动触发委托的异步过程,从而完成一个完整的流程。  

🏀调整登录页面login.html

由于idea中编写前端代码不是很方便,所以后面就通过vsCode来编写

在vsCode上打开你前端代码所在的路径:在idea中打开文件所在位置,复制后通过vsCode打开文件夹搜索改路径即可,所以现在idea中的前端代码(static文件路径下的)和vsCode中的代码对应的是同一个文件,即使在vsCode中修改之后保存,也会同步到idea中。

ajax的写法:写法有多种,原生的ajax这里就不说了,非常复杂 。此处通过JQuery的ajax方式,JQuery把ajax进行了封装。

语法:$.ajax();              ()里面是你需要做什么事情,是一个对象,对象使用{}表示   ​​​​​​​

做的事情:发送一个请求,成功干什么,失败干什么(需要传递URL,请求方法,数据)​​​​​​​​​​​​​​​​​​​​​

上述给后端传递了数据,由于是异步的,不像加法计算器中发送请求后就直接跳转了(跳转完之后页面上接口返回计算结果),那么ajax发出去请求之后,等请求成功了,后端调用success方法,success方法中就写成功了干什么​​​​​​​,请求失败​​​​​​​,后端调用error方法......​​​​​​​​​​​​​​

页面跳转的三种方式:

  • 1. window.location.href = "book_list.html";
  • 2. window.location.assign("book_list.html");
  • 3. window.location.replace("book_list.html");

以上写法,通常把window.省略,比如 写成 window.location.href = "book_list.html"; location.href = "book_list.html";

三者区别参考:location.assign()、location.href、location.replace(url)的不同-阿里云开发者社区

页面访问一(记得重启服务):由于index.html代码还没有写,所以没有信息,当前可看到请求后端接口成功,页面发生了跳转

访问页面二:当前请求后端接口失败,提示"用户名或者密码错误"

通过Fiddler抓包查看前端传递参数的形式:后端可用对象接收,也可使用包装类型接收

ajax语法小结:

ajax括号里面的是对象,使用{}来表示

里面的属性是由键值对组成,个键值对之间使用逗号分隔

在传递的参数中,其中key与后端接收的参数保持一致,若不一致使用后端参数重命名(@RequestParam),value表示给后端传递的参数

success表示HTTP请求成功时执行的内容,function函数中的变量表示后端接口返回的数据,起任何名字都可

🏀调整首页index.html

在上述login.html中,请求后端接口成功后跳转到了index.html页面,只显⽰当前登录用户即可.

当前登录⽤⼾需要从后端获取,并显⽰到前端

在上述login.html页面中,在点击"登录"会去执行"login"这个函数,所以把ajax写在了"login"函数中

那么在index.html页面中,只需要显示从后端获取的用户名,没有任何点击操作,直接在script中写ajax即可

页面访问:发现用户主页还是没有打印出用户名信息

排查前后端问题:作为后端人员,首先排查后端问题(可通过postman,Fiddler,debug,打印日志等方式排查后端问题)

通过Fiddler抓包是否正确返回响应,发现正确返现

此处是前端的缓存问题:crtl+F5强刷

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

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

相关文章

2025年01月蓝桥杯Scratch1月stema选拔赛真题—美丽的图形

美丽的图形 编程实现美丽的图形具体要求: 1)点击绿旗,角色在舞台中心,如图所示; 2)1秒后,绘制一个边长为 140的红色大正方形,线条粗细为 3,正方形的中心为舞台中心,如图所示; 完整题目可点击下…

西门子【Library of Basic Controls (LBC)基本控制库”(LBC) 提供基本控制功能】

AF架构中使用的库 文章目录 Table of contents Legal information ..............................................................................................................................2 1 Introduction ................................................…

搜维尔科技提供完整的人形机器人解决方案以及训练系统

问题:从灵巧手收集的数据是否也会在大脑大模型中训练,或是在专门用于手部控制的单独模型中训练? Q: If the data collected from dexterous hands will be trained as well in the brain large model, or in a separate model dedicated for…

《自动驾驶与机器人中的SLAM技术》ch4:预积分学

目录 1 预积分的定义 2 预积分的测量模型 ( 预积分的测量值可由 IMU 的测量值积分得到 ) 2.1 旋转部分 2.2 速度部分 2.3 平移部分 2.4 将预积分测量和误差式代回最初的定义式 3 预积分的噪声模型和协方差矩阵 3.1 旋转部分 3.2 速度部分 3.3 平移部分 3.4 噪声项合并 4 零偏的…

ASP .NET Core 学习 (.NET 9)- 创建 API项目,并配置Swagger及API 分组或版本

本系列为个人学习 ASP .NET Core学习全过程记录,基于.NET 9 和 VS2022 ,实现前后端分离项目基础框架搭建和部署,以简单、易理解为主,注重页面美观度和后台代码简洁明了,可能不会使用过多的高级语法和扩展,后…

vue项目捕获500报错操作

在VUE中,我封装了请求方法,对于接口返回的500错误仅抛出了异常没有进行处理,在实际使用我需要对接口返回的500错误进行二次处理。 taskreject(this.dynamicValidateForm).then(response > { console.log(response); return this.rejectdis…

微信小程序-base64加解密

思路:先创建一个base64.js的文件,这个文件可以作为专门加解密的文件模块,需要时就引用;创建好后,引用base64.js里的加解密函数。 注意:引用模块一定要引用正确的路径,否则会报错。 base64.js:…

UllnnovationHub,一个开源的WPF控件库

目录 UllnnovationHub1.项目概述2.开发环境3.使用方法4.项目简介1.控件样式1.Button2.GroupBox3.TabControl4.RadioButton5.SwitchButton6.TextBox7.PasswordBox8.CheckBox9.DateTimePicker10.Expander11.Card12.ListBox13.Treeview14.Combox15.Separator16.ListView17.DataGri…

备份和容灾之区别(The Difference between Backup and Disaster Recovery)

备份和容灾之区别 备份和容灾都是数据安全常见的保障手段,但是一般在正常业务运行时是无需用到这两个技术手段的。只有在业务已经崩溃,需要进行业务恢复时,这两种技术的价值才能真正体现。所以,备份和容灾可以说是数据安全最后两…

Linux和Docker常用终端命令:保姆级图文详解

文章目录 前言1、Docker 常用命令1.1、镜像管理1.2、容器管理1.3、网络管理1.4、数据卷管理1.5、监控和性能管理 2、Linux 常用命令分类2.1、文件和目录管理2.2、用户管理2.3、系统监控和性能2.4、软件包管理2.5、网络管理 前言 亲爱的家人们,创作很不容易&#xf…

GPU 硬件原理架构(一)

这张费米管线架构图能看懂了,整个GPU的架构基本就熟了。市面上有很多GPU厂家,他们产品的架构各不相同,但是核心往往差不多,整明白一了个基本上就可以触类旁通了。下面这张图信息量很大,可以结合博客GPU 英伟达GPU架构回…

强化学习的数学原理(十-1)Actor-Critic初步

Actor-Critic的方法是PG方法的一种,它把PG方法与value function结合起来了。 一、基本介绍 Actor:代表 policy update。算法中采用Actor来产生动作。 Critic:代表 policy evaluation 或者 value estimation。算法中采用Critic来评价policy…

工具推荐:PDFgear——免费且强大的PDF编辑工具 v2.1.12

PDFgear——免费且强大的PDF编辑工具 v2.1.12 软件简介 PDFgear 是一款 完全免费的 PDF 软件,支持 阅读、编辑、转换、合并 以及 跨设备签署 PDF 文件,无需注册即可使用。它提供了丰富的 PDF 处理功能,极大提升了 PDF 文件管理的便捷性和效…

IIO(Industrial I/O)驱动介绍

文章目录 IIO(Industrial I/O)驱动是Linux内核中用于工业I/O设备的子系统,主要用于处理传感器数据采集和转换。以下是其关键点: 功能 数据采集:从传感器读取数据。数据处理:对原始数据进行滤波、校准等操作…

Realsense相机驱动安装及其ROS通讯配置——机器人抓取系统基础系列(四)

文章目录 概要1 Realsense相机驱动安装Method1: 使用Intel服务器预编译包Method2: 使用ROS服务器预编译包Method3: 使用SDK源代码方法对比总结 2 Realsense-ROS通讯配置与使用2.1 Realsense-ROS包安装2.2 ROS节点启动 小结Reference 概要 本文首先阐述了Realsense相机驱动安装…

vscode配置opencv4.8环境

1 安装cmake 下载链接如下https://github.com/Kitware/CMake/releases/download/v3.27.7/cmake-3.27.7-windows-x86_64.zip 解压后放到指定目录后,添加bin目录到环境变量即可。 2 mingw安装 下载链接如下(下图的x86_64-posix-sjlj): Download x86_6…

软件测试 —— Selenium(等待)

软件测试 —— Selenium(等待) 一个例子强制等待使用示例:为什么不推荐使用强制等待?更好的选择 隐式等待 implicitly_wait()隐式等待和强制等待的区别隐式等待(Implicit Wait)强制等…

自动化之Ansible

一、Ansible介绍 Ansible是一个同时管理多个远程主机的软件(任何可以通过SSH协议登录的机器),因此Ansible可以管理 运程虚拟机、物理机,也可以是本地主机(linux、windows)。 Ansible通过SSH协议实现 管理节点、远程节点的通信。 只要是能够SSH登录的主机…

算法(蓝桥杯)贪心算法4——拦截导弹的系统数量求解

题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。 假设某天雷达捕捉到敌国的导弹来袭。由于该系统还在试用…

一些常见的Java面试题及其答案

Java基础 1. Java中的基本数据类型有哪些? 答案:Java中的基本数据类型包括整数类型(byte、short、int、long)、浮点类型(float、double)、字符类型(char)和布尔类型(boo…