Spring Boot代码案例(计算器、登录、留言板)

文章目录

  • 一、计算器
  • 二、登录
    • 2.1 判断账号密码是否正确
    • 2.2 根据不同的用户作出不同反应
  • 三、留言板
    • 3.1 提交数据
    • 3.2 展示所有数据
  • 四、Lombok 工具包
    • 4.1 场景介绍
    • 4.2 如何使用
  • 五、Edit Starters插件
  • 六、项目如何Debug
  • 七、项目命名规范

一、计算器

  1. 导入前端文件
  2. 后端代码
@RestController
@RequestMapping("/calc/calc")
public class CalcController {@RequestMapping("/sum")public String sum(Integer num1, Integer num2){return "计算的结果是:" + (num1 + num2);}
}
  1. 前端代码
    • 代码解析:是一个post请求,请求的路径是 “/calc/sum"”,传的值的属性名是num1和num2,按下【点击相加】按钮,就会把这个post请求发送出去。然后该请求就会到达后端。
<!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>

二、登录

2.1 判断账号密码是否正确

  1. 后端代码
    • StringUtils.hasLength(userName):判断了userName != null和userName.length() != 0
    • !“zhangsan”.equals(userName):这里其实应该要去数据库拿值,此处为了方便,直接设置【userName 为“zhangsan”,password 为“123456”】
@RestController
@RequestMapping("/user")
public class UserController {@RequestMapping("/login")public boolean login(String userName, String password, HttpSession session){if (!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)){return false;}if ("zhangsan".equals(userName) && "123456".equals((password))){session.setAttribute("username", "zhangsan");return true;}return false;}
}
  1. 前端代码
    • 请求类型设置:即此处的"post",应该是一个字符串
    • 关于 $.ajax();:只有一个参数,且参数是一个对象,需要用{}
    • 关于 ${}:JQuery式写法,是一个选择器,相当于document.querySelector(JS写法)
      • 选择对象:此处的#userName就是表示选择id为userName的对象,需要用引号,以便他们被当成字符串处理
    • 成功是的回调函数中的参数:参数名写什么都行,都代表【后端的返回结果】
<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()},success: function (result){if (result){//执行页面跳转操作location.href = "/index.html";}else{alert("密码错误"); //弹框}}});}</script>

在这里插入图片描述

2.2 根据不同的用户作出不同反应

  1. 后端代码:两种写法
    • 区别:第一种写法中,就算session为空,获取到的us二N阿么1也将是null。故而两种写法都可以,但第二种更加规范
    • 为什么第二种更规范:因为前者默认里面是true,而此处我们是需要检验是否在登录状态的,即是否有会话,所以需要使用后者的对象设置默认值为false
    • 为什么不在后端执行页面跳转操作:前后端分离,后端尽量不要涉及到前端的内容
@RestController
@RequestMapping("/user")
public class UserController {@RequestMapping("/getUserInfo")public String getUserInfo(HttpSession session){String res = (String) session.getAttribute("username");return res;}
}
@RestController
@RequestMapping("/user")
public class UserController {@RequestMapping("/getUserInfo")public String getUserInfo(HttpServletRequest request){HttpSession session = request.getSession(false);String res = null;if (session != null) {res = (String) session.getAttribute("username");}return res;}
}
  1. 前端代码
<script>$.ajax({url: "/user/getUserInfo",type: "get",success: function (body){$("#loginUser").text(body);   //JQuery式写法}});
</script>
  1. 关于缓存问题:新写了代码,但是程序用的还是旧的,需要我们手动刷新
    • 分类:前端后端都存在缓存
    • 清理后端缓存:使用IDEA集成的Maven中【clean】命令
    • 清理前端缓存:【ctrl + 刷新】 或 【ctrl + F5】

三、留言板

3.1 提交数据

  1. 后端代码
    • 关于存储数据
      • 为什么是后端保存数据:前端没有保存数据的功能,页面一刷新数据就无了
      • 数据保存位置:可以保存在内存或外存中。
        • 如果保存在内存,服务器一刷新,数据就无了
        • 外存一般是存在硬盘中,具体形式为保存在文件、数据库等。
    • 为什么后端要进行参数的校验
      • 虽然前端已经检验了数据,但这是两个团队的事,各个团队要求各司其职,故后端依旧需要完成校验工作。不然万一前端没有做到位,后端服务就无法正常运行了。
      • 后端可能会收到非正常请求(如黑客的攻击),为了避免这类请求让程序报错,需要检验参数
@RestController
@RequestMapping("/message")
public class MessageController {//此处我们把数据保存在内存中private List<MessageInfo> messageInfoList = new ArrayList<>();@RequestMapping("/publish")public Boolean publish(MessageInfo messageInfo){if (!StringUtils.hasLength(messageInfo.getMessage())|| !StringUtils.hasLength(messageInfo.getFrom())|| !StringUtils.hasLength(messageInfo.getTo())){return false;}messageInfoList.add(messageInfo);return true;}
}
  1. 前端代码
    • VSCode格式化操作:Alt + Shift + F
    • 前端代码的构造
      • 创建标签并添加HTML:使用createElement创建标签,innerHTML方法往里面放值
      • 拼接字符串:用拼接字符串的方式,直接构造HTML
<script>function submit(){var from = $('#from').val();var to = $('#to').val();var say = $('#say').val();if (from== '' || to == '' || say == '') {return;}$.ajax({url: "/message/publish",type: "post",data: {"from": from,"to": to,"message": say},success: function (result){if (result){//2. 构造节点var divE = "<div>"+from +"对" + to + "说:" + say+"</div>";//3. 把节点添加到页面上$(".container").append(divE);//4. 清空输入框的值$('#from').val("");$('#to').val("");$('#say').val("");}}});}</script>

3.2 展示所有数据

  1. 后端代码
@RestController
@RequestMapping("/message")
public class MessageController {private List<MessageInfo> messageInfoList = new ArrayList<>();@RequestMapping("/getList")public List<MessageInfo> getMessageInfoList(){return messageInfoList;}
}
  1. 前端代码:
<script>$.ajax({url: "/message/getList",type: "get",success: function (messages){for (var m of messages){var divE = "<div>"+m.from +"对" + m.to + "说:" + m.message+"</div>";$(".container").append(divE);}}});
</script>

四、Lombok 工具包

4.1 场景介绍

  1. 需求场景:getter和setter方法太繁琐
    • 为了安全性,企业开发上一般不会给属性设置为public,大多是private。所以我们往往要通过getter和setter方法进行属性的获取和设置
    • 虽然说这些代码可以由IDEA生成,但代码量还是太多了,看着十分繁琐。且但凡新增或删除一条属性,我们就需要修改getter和setter方法。
  2. 解决方法:Spring提供了更简单的方式,即使用【Lombok工具包】

4.2 如何使用

  1. 引入Lombok依赖:有两种引入方法

    • 手动添加:去Maven的中央仓库搜索【Project Lombok】,选择版本后将< dependency>引入pom.xml文件即可
      • 关于版本的选择建议:建议选择次新版本(不是最新,但也挺新) + 使用者多的版本。太新的版本往往不太稳定。
      • 问题:【手动添加】的方式可能会出现“Lombok与Spring Boot版本冲突的问题”。而且每次去创建项目都需要去中央仓库也十分繁琐
    • 让Spring Boot帮我们管理
      • 原理:既然Spring Boot已经集成了Maven,可以帮我们管理包,我们干脆直接让Spring Boot替我们管理这个依赖。这可以很好解决【手动添加】方式的问题。
      • 如何使用Spring Boot快速添加 Jar包:使用Edit Starters插件添加
  2. 选择要使用注解:@Data、@Getter、@Setter、@ToString、@EqualsAndHashCode、@NoArgsConstructor、@AllArgsConstructor、@AllArgsConstructor、@NonNull、@RequiredArgsConstructor
    在这里插入图片描述

  3. 注解的工作原理:此处以@Data为例
    在这里插入图片描述
    在这里插入图片描述

五、Edit Starters插件

  1. 作用:让我们可以通过Spring快速添加Jar包
  2. 插件的下载
    • 手动下载:进入插件市场,选择版本后下载,在【Plugins】中选择disk,然后把下载得到的压缩包放进去(勿解压),最后重启IDEA即可。
    • IDEA里下载
      在这里插入图片描述
  3. 插件的使用
    在pom.xml 文件中,选择【Generate】—> 【Edit Starters】—> 选择要添加的包
    在这里插入图片描述

六、项目如何Debug

操作:和Java项目调试方法一样

  • 添加断点 + 选择小虫子Debug。如果断点打成功了,上面会有一个勾勾。此时项目会阻塞在断点处,我们按照前后端交互逻辑去测试即可

七、项目命名规范

  1. 类路径设置:通常会和该Controller的名字有关系,不一定一致,但会有关系
    • 好处:我们可以根据类名快速定位代码。
  2. 类名:大驼峰
  3. 变量名和方法:小驼峰
  4. 数据库字段命名:使用蛇形风格,用下划线分割,要求全小写

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

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

相关文章

AI Agent是什么?未来如何发展

AI Agnt是什么 AI代理&#xff08;AI Agent&#xff09;是指一种利用人工智能技术来执行特定任务或解决特定问题的自主软件程序。这些代理通过学习和模拟人类行为或特定领域的知识&#xff0c;能够在无需人为干预的情况下完成复杂的任务。AI代理广泛应用于多个领域&#xff0c…

SSM【Spring SpringMVC Mybatis】—— SpringMVC

目录 1、初识SpringMVC 1.1 SpringMVC概述 1.2 SpringMVC处理请求原理简图 2、SpringMVC搭建框架 2.1 搭建SpringMVC框架 3、RequestMapping详解 3.1 RequestMapping注解位置 3.2 RequestMapping注解属性 3.3 RequestMapping支持Ant 风格的路径&#xff08;了解&#…

【Linux玩物志】Linux环境开发基本工具使用(1)——vim

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; Linux开发工具 首先我们要知道vim是什么&#xff1f; vi&#xff08;Visual Editor&#xff09;是由美国程序员比尔乌尔曼&#xff08;Bill Joy&#xff09;于1976年开发的&#xff0c;最初是为了在Unix系统上进行文本编…

技术前沿 |【大模型LLaMA:技术原理、优势特点及应用前景探讨】

大模型LLaMA&#xff1a;技术原理、优势特点及应用前景探讨 一、引言二、大模型LLaMA的基本介绍三、大模型LLaMA的优势特点五、结论与展望 一、引言 随着人工智能技术的飞速发展&#xff0c;大模型已成为推动这一领域进步的重要力量。近年来&#xff0c;大模型LLaMA以其卓越的…

我和jetson-Nano的故事(11)——在ros中编译usb_cam

在jetson nano中编译旧版本的usb_cam 1. 问题背景1.1 jetson nano的软件环境版本 2.问题现象3.问题原因及解决办法 1. 问题背景 最近给jetson nano重装了系统之后&#xff0c;在编译今年人工智能ROS小车比赛用的工程包的时候&#xff0c;遇到一个问题迟迟没有解决&#xff0c;…

惠海 H4112 同步整流30V降压芯片IC 24V转12V5V3.3V3.5A方案EN使能控制

惠海H4112同步整流30V降压芯片IC是一款DCDC电源管理芯片&#xff0c;它具备精确恒压和恒流的同步降压能力&#xff0c;适用于多种应用场景&#xff0c;如汽车充电器、照明灯、便携式设备供电电源和电池充电器等。 输出电压与电流调整&#xff1a; H4112支持输出电压在2.5V到2…

HNU-算法设计与分析-作业4

第四次作业【贪心算法】 文章目录 第四次作业【贪心算法】<1> 算法分析题4-1 会场安排问题<2> 算法实现题4-9 虚拟汽车加油问题<3> 算法实现题4-13 非单位时间任务安排问题<4> 算法实现题4-14 多元Huffman编码问题 <1> 算法分析题4-1 会场安排问…

牛客热题:合并二叉树

牛客热题&#xff1a;二叉树与双向链表> &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题…

最高18K/月!云计算、网络方向招人啦~

云计算工程师岗位职责&#xff1a; 1.计算机网络相关专业&#xff0c;云计算、虚拟化相关开局、维护为主&#xff1b; 2.主要负责H3C云产品项目交付&#xff0c;重大故障处理、包括虚拟化、私有云平台、分布式/集中式存储、云桌面等&#xff1b;任职要求&#xff1a; 1.精通云计…

java优先级队列

1. 优先级队列 1.1 概念 前面介绍过队列&#xff0c;队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&#xff0c;一般出队 列时&#xff0c;可能需要优先级高的元素先出队列&#xff0c;该中场景下&#xff0c;使用队列显然…

【代码随想录】面试常考题目类型之贪心1

前言 更详细的在大佬的代码随想录 (programmercarl.com) 本系列仅是简洁版笔记&#xff0c;为了之后方便观看 本质 局部最优推出全局最优 验证 验证可不可以用贪心算法最好用的策略就是举反例&#xff0c;想不到反例就试贪心 分发饼干 455. 分发饼干 - 力扣&#xff08;…

深入理解 House of Cat

Index 序言利用 FSOP 调用 House of Cat利用条件伪造IO流条件完整调用链分析 模板System (one_gadget) 模板ORW模板 Demo & Exp利用 __malloc_assert 调用 House of Cat例题&#xff1a;题目思路Exp 序言 原文章&#xff1a;深入理解 House of Cat 随着 GNU 持续不断的更…

redis7基础篇2 redis的3种模式(主从,哨兵,集群)模式

一 主从复制模式 1.1 主从模式 主从模式&#xff1a; 主机可以读&#xff0c;写&#xff0c;重机只能写操作。 主机shutdown后&#xff0c;从机上位还是原地待命&#xff1a;从机不动&#xff0c;原地待命&#xff0c;数据正常使用&#xff0c;等待主机重启归来。 主机shu…

【Threejs进阶教程-算法篇】1.常用坐标系介绍与2d/3d随机点位算法

2d/3d随机算法 学习ThreeJS的捷径坐标系简介平面直角坐标系和极坐标系空间直角坐标系圆柱坐标系球坐标系球坐标系与直角坐标系的转换 基于坐标系系统的随机点位算法平面直角坐标系随机平面直角坐标系随机的变形 空间直角坐标系随机二维极坐标系随机圆柱坐标系随机基于Cylinderc…

QT学习----知识整理(入门篇)

一、初识QT 1、序章 1.1 下载地址 官网&#xff1a;Try Qt | Develop Applications and Embedded Systems | Qt 或者&#xff1a;Index of /archive/qt&#xff08;下载慢&#xff09; 或者&#xff1a;FFmpeg中文网站 中文教程 Android 安卓 -QT 下载 1.2 组件介绍 MSVC…

在面对各种问题时,我们应该如何进行数据分析

python数据分析汇总 前言一、对比分析概念特征类型案例Matplotlib的颜色字母对照表解决遇到未知函数 二、相关性分析概念类型案例一案例二 三、时间序列分析概念类型案例 四、回归分析概念类型案例一案例二案例三 五、决策树概念计算过程案例 六、主成分分析概念计算过程案例 七…

分析人工智能在智慧银行服务中的实际应用以及面临的挑战

一、引言 近年来,人工智能(AI)技术快速发展,其在金融领域,特别是智慧银行服务中的应用日益广泛。人工智能以其独特的数据处理能力、预测分析能力以及自动化决策能力,极大地提升了智慧银行的服务效率、降低了运营成本,并优化了客户体验。然而,人工智能在智慧银行服务中…

web安全学习笔记(16)

记一下第27-28课的内容。Token 验证 URL跳转漏洞的类型与三种跳转形式&#xff1b;URL跳转漏洞修复 短信轰炸漏洞绕过挖掘 一、token有关知识 什么是token&#xff1f;token是用来干嘛的&#xff1f;_token是什么意思-CSDN博客 二、URL跳转漏洞 我们在靶场中&#xff0c;…

计算机SCI期刊,中科院2区TOP,对国人相当友好,一周内出版!

一、期刊名称 ISA Transactions 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;计算机科学 影响因子&#xff1a;7.3 中科院分区&#xff1a;2区TOP 出版方式&#xff1a;订阅模式/开放出版 版面费&#xff1a;选择开放出版需支付$3950 三、期刊征稿范…

抖音小店有订单后怎么发货?实操分享!发货全流程来了

哈喽~我是电商月月 做无货源抖音小店的店铺在出单后怎么发货&#xff1f;今天我就来给大家解答这个问题&#xff0c;其中的注意事项新手商家可以收藏一下&#xff0c;避免犯错 抖音小店的商品出单后&#xff0c;商家在“管理中心-订单管理”页面就能看见所有待处理的订单 一…