【后端开发】Spring MVC-计算器、用户登录、留言板

文章目录

  • 前后端分离设计
    • 接口设计思路
    • 项目问题解决思路
  • 计算器
    • 需求分析
    • 接口定义
    • 前端页面代码
    • 服务器代码
  • 用户登录
    • 需求分析
    • 接口定义
      • 用户登录校验接口
      • 查询登录用户接口
    • 前端页面代码
      • 用户登录校验
      • 查询登录用户
    • 服务器代码
    • 前后端交互
  • 留言版
    • 需求分析
    • 接口定义
    • 获取全部留言
    • 发布留言
    • 前端页面代码
    • 服务器代码

前后端分离设计

前后端分析需要设计接口,接口通常由服务端定义,服务端定义之后,客户端(前端) 进行review,双方并行开发。

接口定义之后,不轻易改变,如果需要改变,必须要通知到每一个调用方,同步修改接口文档接口定义,以接口文档来呈现。
如果修改的比较少,或者之前的文档没有体现到这点,不想修改文档时,可以通过聊天工具去说一下。

接口设计思路

  • 接收什么(看后端完成这个功能需要什么)
  • 返回什么(1.后端能提供什么,2,前端页面展示需要什么)

项目问题解决思路

  • 先测试后端接口,通过postman测试后端接口没有问题,暂时排除后端问题
  • 看日志,可以借助Debug
  • 如果觉得代码没问题,优先考虑缓存问题,前端缓存 ctrl+F5 强制刷新,或者清除浏览器缓存后端缓存(maven->clean)

计算器

需求分析

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

接口定义

  • 请求路径:/calc/sum
  • 请求方式:GET/POST
  • 接口描述:计算两个整数相加
  • 返回:sum
  • 参数:num1、num2
参数名类型是否必须备注
num1Integer参与计算的第⼀个数
num2Integer参与计算的第二个数

前端页面代码

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

在这里插入图片描述

服务器代码

@RequestMapping("/calc")
@RestController
public class CalcController {@RequestMapping("/sum")public String sum(Integer num1, Integer num2) {return String.valueOf(num1 + num2);}
}

用户登录

需求分析

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

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

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

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

接口定义

用户登录校验接口

  • 请求路径:/user/login
  • 请求方式:GET/POST
  • 接口描述:校验账号密码是否正确
  • 返回:
    true //账号密码验证成功
    false//账号密码验证失败
  • 参数:username、password
参数名类型是否必须备注
usernameString校验的账号
passwordString校验的密码

查询登录用户接口

  • 请求路径:/user/indexs
  • 请求方式:GET/POST
  • 接口描述:查询当前登录的用户
  • 返回:
    当前登录的用户–username
  • 参数:无

前端页面代码

用户登录校验

  <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() {$.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");}else{alert("密码错误");}}})}</script>

查询登录用户

	登录人: <span id="loginUser"></span><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script><script>$.ajax({url:"/user/index",type:"get",success:function(loginName){$("#loginUser").text(loginName);}});</script>

服务器代码

@RequestMapping("/user")
@RestController
public class UserController {@RequestMapping("login")public boolean login(String username, String password, HttpSession session) {//参数校验
//        if (username == null || username.length() == 0 || password == null || password.length() == 0) {
//            return false;
//        }//Spring提供的参数校验的简化版本if (!StringUtils.hasText(username) || !StringUtils.hasText(password)) {return false;}//判断密码是否正确//写equlas()方法时,最好将常量放在前面if ("admin".equals(username) && "admin".equals(password)) {//设置session信息session.setAttribute("username", username);return true;}return false;}@RequestMapping("/index")public String getUsername(@SessionAttribute("username") String username) {return username;}
}

前后端交互

通过ajax中的参数实现前后的交互,部分位置中的前后端参数的名称必须对应。
在这里插入图片描述
包括设置的session,在寻找对应的username时,也必须保持一致。
在这里插入图片描述

留言版

需求分析

  1. 输入留言信息,点击提交,后端把数据存储起来。
  2. 页面展示输入的留言板的信息

后端需要提供两个服务

  • 提交留言:用户输入留⾔信息之后,后端需要把留言信息保存起来。
  • 展示留言:页面展示时,需要从后端获取到所有的留⾔信息。

接口定义

获取全部留言

全部留言信息,⽤List来表示,可以用JSON来描述这个List数据,这里简化描述。

  • url:/message/getList
  • param:无
  • return:[{},{},{}]

发布留言

  • url:/message/publish
  • param:from, to, say
  • return:true/false

前端页面代码

<body><div class="container"><h1>留言板</h1><p class="grey">输入后点击提交, 会将信息显示下方空白处</p><div class="row"><span>谁:</span> <input type="text" name="" id="from"></div><div class="row"><span>对谁:</span> <input type="text" name="" id="to"></div><div class="row"><span>说什么:</span> <input type="text" name="" id="say"></div><input type="button" value="提交" id="submit" onclick="submit()"><!-- <div>A 对 B 说: hello</div> --></div><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script><script>$.ajax({url: "/message/getList",type: "get",success: function (messageInfos) {console.log("成功获取消息列表:", messageInfos);var finalHtml = "";for (var message of messageInfos) {finalHtml += '<div>' + message.from + ' 对 ' + message.to + ' 说: ' + message.say + '</div>';}$(".container").append(finalHtml)}});function submit() {//1. 获取留言的内容var fromQian = $('#from').val();var toQian = $('#to').val();var sayQian = $('#say').val();if (fromQian == '' || toQian == '' || sayQian == '') {return;}//发送ajax请求,这里为了更好地看清楚前后端的交互过程$.ajax({url: "/message/publish",type: "post",data: {from: fromQian,to: toQian,say: sayQian},success: function (result) {if (result) {//2. 构造节点var divE = "<div>" + fromQian + "对" + toQian + "说:" + sayQian + "</div>";//3. 把节点添加到页面上    $(".container").append(divE);//4. 清空输入框的值$('#from').val("");$('#to').val("");$('#say').val("");}else{alert("输入不合法")}}});}</script>
</body>

服务器代码

@RequestMapping("message")
@RestController
public class MessageController {private List<MessageInfo> messageInfos = new ArrayList<>();@RequestMapping("publish")public Boolean publish(MessageInfo messageInfo) {//1.参数校验if (!StringUtils.hasLength(messageInfo.getFrom()) || !StringUtils.hasLength(messageInfo.getTo()) || !StringUtils.hasLength(messageInfo.getSay())) {return false;}//2.存储数据,暂时存在内存中messageInfos.add(messageInfo);return true;}/** 获取留言信息 */@RequestMapping("getList")public List<MessageInfo> getList(){return messageInfos;}
}

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

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

相关文章

在Ubuntu-22.04.5中安装ONLYOFFICE DocSpace(协作空间)【注意:安装失败,谨慎参考!】

1. 通过Docker安装 预计需要下载10G的镜像。 &#xff08;1&#xff09;下载docspace安装脚本 curl -fsSL https://download.onlyoffice.com/docspace/docspace-install.sh -o docspace-install.sh &#xff08;2&#xff09;修改docker compose的别名为docker-compose ali…

2025年计算机领域重大技术突破与行业动态综述

——前沿技术重塑未来&#xff0c;开发者如何把握机遇&#xff1f; 2025年第一季度&#xff0c;全球计算机领域迎来多项里程碑式进展&#xff0c;从量子计算到人工智能&#xff0c;从芯片设计到网络安全&#xff0c;技术革新与产业融合持续加速。本文梳理近三个月内最具影响力…

一、LLM 大语言模型初窥:起源、概念与核心原理

一、初识大模型 1.1 人工智能演进与大模型兴起:从A11.0到A12.0的变迁 AI 1.0时代&#xff08;2012-2022年&#xff09; 感知智能的突破&#xff1a;以卷积神经网络&#xff08;CNN&#xff09;为核心&#xff0c;AI在图像识别、语音处理等感知任务中超越人类水平。例如&#…

Redis 分布式锁+秒杀异步优化

文章目录 问题思路setnx实现锁误删问题和解决方案Redis Lua脚本问题引出解决方案 setnx实现的问题Redission快速入门redission可重入锁原理 秒杀优化(异步优化)异步秒杀思路秒杀资格判断Redis消息队列 问题 比如我们两个机器都部署了我们项目&#xff0c;这里nginx使用轮询的方…

机器学习中的距离度量与优化方法:从曼哈顿距离到梯度下降

目录 前言一、曼哈顿距离(Manhattan Distance)&#xff1a;二、切比雪夫距离 (Chebyshev Distance)&#xff1a;三、 闵可夫斯基距离(Minkowski Distance)&#xff1a;小结四、余弦距离(Cosine Distance)五、杰卡德距离(Jaccard Distance)六、交叉验证方法6.1 HoldOut Cross-v…

HTML 嵌入标签对比:小众(<embed>、<object>) 与 <iframe> 的优缺点及使用场景和方式

需求背景 在网页开发中&#xff0c;嵌入外部资源预览&#xff08;如视频、PDF、地图或其他网页&#xff09;是常见的需求。HTML 提供了多种标签来实现这一功能&#xff0c;其中 <embed>、<object> 和 <iframe> 是最常用的三种。本文将对比它们的优缺点&…

未来七轴机器人会占据主流?深度解析具身智能方向当前六轴机器人和七轴机器人的区别,七轴力控机器人发展会加快吗?

六轴机器人和七轴机器人在设计、功能和应用场景上存在明显区别。六轴机器人是工业机器人的传统架构&#xff0c;而七轴机器人则在多自由度和灵活性方面进行了增强。 本文将在理解这两者的区别以及为何六轴机器人仍然是市场主流&#xff0c;从多个方面进行深入解读六轴和七轴区…

C++基础精讲-07

文章目录 1. const对象2. 指向对象的指针3. 对象数组4. c中const常见用法总结4.1 修饰常量4.2 修饰指针4.3 修饰函数参数4.4 修饰函数返回值4.5 修饰成员函数4.6 const对象 5. 赋值运算符函数&#xff08;补充&#xff09;5.1 概念5.2 默认赋值运算符函数局限5.3 解决办法 1. c…

软件测试之接口测试用例设计

1.接口测试用例设计简介 我们对系统的需求分析完成之后&#xff0c;即可设计对应的接口测试用例&#xff0c;然后用接口测试用例进行接口测试。接口测试用例的设计也需要用到黑盒测试方法&#xff0c;其与功能测试用例设计的方法类似&#xff0c;接口测试用例设计中还需要增加…

(2)VTK C++开发示例 --- 绘制多面锥体

文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;VTK开发 &#x1f448; 1. 概述 VTK C开发示例程序&#xff1b; 使用C 和VTK绘制一个多面锥体。 环境说明系统ubuntu22.04、windows11cmake3.22、3.2…

公司内部自建知识共享的方式分类、详细步骤及表格总结,分为开源(对外公开)和闭源(仅限内部),以及公共(全员可访问)和内部(特定团队/项目组)四个维度

以下是公司内部自建知识共享的方式分类、详细步骤及表格总结&#xff0c;分为开源&#xff08;对外公开&#xff09;和闭源&#xff08;仅限内部&#xff09;&#xff0c;以及公共&#xff08;全员可访问&#xff09;和内部&#xff08;特定团队/项目组&#xff09;四个维度&am…

DeepSeek使用001:Word中配置DeepSeek AI的V3和R1模型

文章目录 Word中配置DeepSeek大模型1、勾选开发工具2、信任中心设置3、添加DeepSeek-V3模型4、获取API KEY5、添加DeepSeek-R1模型6、新建组7、测试使用 Word中配置DeepSeek大模型 1、勾选开发工具 打开【选项】 选择【自定义功能区】 2、信任中心设置 打开【信任中心】&…

Spark-SQL核心编程语言

利用IDEA开发spark-SQL 创建spark-SQL测试代码 自定义函数UDF 自定义聚合函数UDAF 强类型的 Dataset 和弱类型的 DataFrame 都提供了相关的聚合函数&#xff0c; 如 count()&#xff0c; countDistinct()&#xff0c;avg()&#xff0c;max()&#xff0c;min()。除此之外&…

从图像“看出动作”

&#x1f4d8; 第一部分&#xff1a;运动估计&#xff08;Motion Estimation&#xff09; &#x1f9e0; 什么是运动估计&#xff1f; 简单说&#xff1a; &#x1f449; 给你一段视频&#xff0c;计算机要“看懂”里面什么东西动了、往哪动了、有多快。 比如&#xff1a; 一…

Spring Boot 使用 SMB 协议

2025/4/14 向全栈工程师迈进&#xff01; 一、详述SMB协议 SMB&#xff08;Server Message Block&#xff09;协议是一个网络文件共享协议&#xff0c;它使得计算机可以在网络中共享文件、打印机以及其他资源。SMB 主要用于 Windows 操作系统&#xff0c;但也有其他平台&#…

Spring编程式事务(本地事务)

使用 TransactionTemplate等类和 API 手动管理事务&#xff0c;控制事务的新建、提交、回滚等过程 方式一&#xff1a;使用 TransactionTemplate&#xff08;推荐方式&#xff09; Service public class OrderService {private final TransactionTemplate transactionTemplat…

itext7 html2pdf 将html文本转为pdf

1、将html转为pdf需求分析 经常会看到爬虫有这样的需求&#xff0c;将某一个网站上的数据&#xff0c;获取到了以后&#xff0c;进行分析&#xff0c;然后将需要的数据进行存储&#xff0c;也有将html转为pdf进行存储&#xff0c;作为原始存档&#xff0c;当然这里看具体的需求…

企业级低代码平台的架构范式转型研究

在快速迭代的数字时代&#xff0c;低代码平台如同一股清流&#xff0c;悄然成为开发者们的新宠。 它利用直观易用的拖拽式界面和丰富的预制组件&#xff0c;将应用程序的开发过程简化到了前所未有的程度。通过封装复杂的编程逻辑和提供强大的集成能力&#xff0c;低代码平台让…

C++ | STL之list详解:双向链表的灵活操作与高效实践

引言 std::list 是C STL中基于双向链表实现的顺序容器&#xff0c;擅长高效插入和删除操作&#xff0c;尤其适用于频繁修改中间元素的场景。与std::vector不同&#xff0c;std::list的内存非连续&#xff0c;但提供了稳定的迭代器和灵活的元素管理。本文将全面解析std::list的…

AI运算服务器工控机特点与应用

AI运算服务器工控机是专门针对工业环境设计的计算设备&#xff0c;结合了传统工控机&#xff08;工业控制计算机&#xff09;的可靠性与AI服务器的强大算力&#xff0c;广泛应用于智能制造、边缘计算、机器视觉、自动化控制等领域。以下是其核心特点、应用场景及选型建议&#…