Spring MVC开发小练习

1. 加法计算器

需求:输入两个整数,计算和

约定前后端交互接口:

在开发项目前,根据需求先约定好前后端交互接口,双方按照接口文档进行开发,接口文档一旦写好,尽量不要轻易改变,如果要修改,必须通知另一方知晓

接口定义:

请求路径:calc/add

请求方式:GET/POST

接口描述:计算两个整数相加

请求参数:

参数名:num1 类型:Integer 是否必须:是  备注:参与计算的第一个数

参数名:num2 类型:Integer 是否必须:是  备注:参与计算的第二个数

响应数据:

Content-Type:text/html

响应内容:计算结果是:(num1+num2)

后端代码:

@RestController
@RequestMapping("/calc")
public class CalcController {@RequestMapping("/add")public String add(Integer num1, Integer num2) {Integer sum = num1 + num2;return "计算结果是:" + sum;}
}

前端代码: 

这里我们放在static内:

<!DOCTYPE html>
<html lang="ch">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Calc</title>
</head>
<body><form action="calc/add"><h1>计算器</h1>数字1:<input type="text" name="num1"><br/>数字2:<input type="text" name="num2"><br/><input type="submit" value="计算结果">
</form>
</body>
</html>

注意: name属性决定url中的Key

2. 用户登录

接口定义:

1.登录接口

请求路径:user/login

请求方式:POST

接口描述:校验用户名密码是否正确

请求参数:

参数1:参数名:userName 类型:String 是否必须:是 备注:用户名

参数2:参数名:password 类型:String 是否必须:是 备注:密码

响应数据:

Content-Type:text/html

响应内容:

true:登录成功

false:登录失败

2. 查询登录用户接口

请求路径:/user/getUserName

请求方式:GET/POST

接口描述:查询当前登录的用户

请求参数:无
响应数据:Content-Type:text/html

响应内容:用户名

后端代码:

@RestController
@RequestMapping("/user")
public class LoginController {@RequestMapping("/login")public Boolean login(String userName, String password, HttpSession session) {//储存当前用户的Sessionsession.setAttribute("name", userName);return "Ting-666".equals(userName) && "666777".equals(password);}@RequestMapping("/getUserName")public String getUserName(@SessionAttribute("name") String name){return name;}
}

前端代码:

login.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>login</title>
</head>
<body><h1>用户登录</h1>用户名<input type="text" name="userName" id="userName"><br/>密码<input type="password" name="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发送请求$.ajax({url:"/user/login",type:"post",data:{userName:$("#userName").val(),password:$("#password").val()},//HTTP 响应成功success:function(result) {if(result) {location.href = "/getUserName.html";}else{alert("用户名或密码错误");}}});}</script>
</body>
</html>

注意Jquery不能使用本地的

getUserName.html

<!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>登录人:<span id="loginUser"></span><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script><script>$.ajax({url:"/user/getUserName",type:"get",success:function(UserName){$("#loginUser").text(UserName);}})</script>
</body>
</html>

3. 留言板

需求:实现一个留言板,把A对B说的话添加到留言版上

1. 发布留言

接口定义:

请求路径:/message/publish

请求方法:post

请求参数:

参数1:参数名:from 类型:String 是否必须:是 备注:A

参数2:参数名:to 类型:String 是否必须:是 备注:B

参数1:参数名:say 类型:String 是否必须:是 备注:说的内容

返回值:true/false 备注:成功/失败

2. 展示已有的留言

接口定义:

请求路径:/message/getMessage

请求方法:get

请求参数:无

返回值:返回一个list

后端代码:

package com.example.j20240313springmvc;import lombok.Data;/*** 存储一次留言*/
@Data
public class Message {private String from;private String to;private String say;
}
//@Data 是lombok中的一个注解,可以在编译时自动生成get,set,toString 等方法
@RestController
@RequestMapping("/message")
public class MessageController {List<Message> messages = new ArrayList<>();public Boolean publish(Message message) {if(!StringUtils.hasLength(message.getFrom())||!StringUtils.hasLength(message.getTo())||!StringUtils.hasLength(message.getSay())) {return false;}messages.add(message);return true;}public List<Message> getMessages() {return messages;}
}

前端代码:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>留言板</title><style>.container {width: 350px;height: 300px;margin: 0 auto;/* border: 1px black solid; */text-align: center;}.grey {color: grey;}.container .row {width: 350px;height: 40px;display: flex;justify-content: space-between;align-items: center;}.container .row input {width: 260px;height: 30px;}#submit {width: 350px;height: 40px;background-color: orange;color: white;border: none;margin: 10px;border-radius: 5px;font-size: 20px;}</style>
</head><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/getMessages",type:"get",success:function(messages) {for(var message of messages) {var divE = "<div>"+message.from +"对" + message.to + "说:" + message.say+"</div>";$(".container").append(divE);}}});function submit(){var from = $('#from').val();var to = $('#to').val();var say = $('#say').val();$.ajax({url:"/message/publish",type:"post",data:{from:$("#from").val(),to:$("#to").val(),say:$("#say").val()},success:function(result) {if(result) {//2. 构造节点var divE = "<div>"+from +"对" + to + "说:" + say+"</div>";//3. 把节点添加到页面上$(".container").append(divE);//4. 清空输入框的值$('#from').val("");$('#to').val("");$('#say').val("");}else{$('#from').val("");$('#to').val("");$('#say').val("");alert("非法输入");}}});}</script>
</body></html>

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

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

相关文章

Springboot+vue的船舶维保管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的船舶维保管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09…

2024最新自动化测试面试题合集 (附答案)

1、你会封装自动化测试框架吗&#xff1f; 这个问得最多&#xff0c;甚至有很多公司直接写在招聘要求中&#xff01; 当然可以&#xff0c;自动化框架主要的核心框架就是分层PO模式&#xff1a;分别为&#xff1a;基础封装层BasePage&#xff0c;PO页面对象层&#xff0c;Tes…

网络编程-DAY6

1>创建一个武器信息库&#xff0c;包含编号&#xff08;主键&#xff09;、名称、属性、描述、价格 2>添加三把武器 3>修改某把武器的价格 4>展出价格在1000到4000的武器 5>卖掉一把武器&#xff0c;删除该武器的信息 6>几天后&#xff0c;客户顶着光头…

HarmonyOS NEXT应用开发之左右拖动切换图片效果案例

介绍 本示例使用滑动手势监听&#xff0c;实时调整左右两侧内容显示区域大小和效果。通过绑定gesture事件中的PanGesture平移手势&#xff0c;实时获取拖动距离。当拖动时&#xff0c;实时地调节左右两个Image组件的宽度&#xff0c;从而成功实现左右拖动切换图片效果的功能。…

C语言之动态内存管理(快点进来!!!)

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

2024全国水科技大会【联合主办】福州水务集团有限公司

福州水务成立于2008年11月&#xff0c;AA信用评级&#xff0c;注册资本21.2亿元。下属各级企业70多家&#xff08;包括3家国家级高新技术企业、1家A股上市企业&#xff09;。集团主营供水、排水、环保、温泉文旅、综合服务五大板块&#xff0c;旗下运营自来水厂17座&#xff0c…

【WSL】Ubuntu 20.04 字符集不认识中文,及其中文路径

1. 问题 $ locale locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory LANGen_US.UTF-8 LANGUAGE LC_CTYPEUTF-8 LC_NUMERIC"en_US.UTF-8" LC_TIME"en_US.UT…

算法沉淀——贪心算法五(leetcode真题剖析)

算法沉淀——贪心算法五 01.跳跃游戏 II02.跳跃游戏03.加油站04.单调递增的数字 01.跳跃游戏 II 题目链接&#xff1a;https://leetcode.cn/problems/jump-game-ii/ 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转…

redis在springboot项目中的应用

一&#xff0c;将查询结果放到redis中作为缓存&#xff0c;减轻mysql的压力。 只有在数据量大的时候&#xff0c;查询速度慢的时候才有意义。 本次测试的数据量为XXX. 测试代码: 功能为根据昵称进行模糊匹配。 GetMapping("/get-by-nick")public String getNickN…

维度建模理论之事实表

事实表概述 事实表作为数据仓库维度建模的核心&#xff0c;紧紧围绕着业务过程来设计。其包含与该业务过程有关的维度引用&#xff08;维度表外键&#xff09;以及该业务过程的度量&#xff08;通常是可累加的数字类型字段&#xff09;。 事实表特点 事实表通常比较“细长”…

Node.js核心命令与工具:提升开发效率的实用指南

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

Redis面试题以及答案

1. 什么是Redis&#xff1f;它主要用来什么的&#xff1f; Redis&#xff0c;英文全称是Remote Dictionary Server&#xff08;远程字典服务&#xff09;&#xff0c;是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并…

刷力扣看见一个寻找单身狗的问题?【力扣题解】

今天刷力扣遇到一道有意思的题目&#xff0c;题目是写着撞色问题177 &#xff0c;当我写完这个题去看看有什么好的解题方式的时候&#xff0c;看见一个有趣的题解问题&#xff0c;他对这个题目的描述是几对情侣&#xff0c;带几个单身狗出去玩&#xff0c;然后现在我们要把这几…

天文馆3D可视化:揭秘宇宙星辰的奇幻之旅

在这个科技日新月异的时代&#xff0c;我们似乎离神秘的宇宙越来越近。 天文馆作为普及天文知识、展示宇宙奥秘的重要场所&#xff0c;一直备受人们的喜爱。然而&#xff0c;传统的天文馆展示方式往往局限于平面图片和简单的模型&#xff0c;无法让人真正感受到宇宙的浩瀚与壮丽…

Java与Go:指针

在计算机内存中&#xff0c;每个变量都有一个唯一的地址&#xff0c;指针就是用来保存这个地址的变量。通过指针&#xff0c;我们可以间接地访问和修改存储在该地址处的数据。今天我们来聊一聊Java和Go指针&#xff0c;预告一下&#xff0c;我们需要借助C语言做一些小小的比较。…

【堆】Top-K问题

标题&#xff1a;C语言库函数scanf&#xff08;&#xff09;解读 水墨不写bug &#xff08;图片来源于网络&#xff09; 正文开始&#xff1a; Top-K问题是一类问题的统称&#xff1a; 即根据对象的某一属性&#xff0c;找出这个属性最突出的K个对象&#xff0c;并且通常对象…

22. UE5 RPG使用MMC根据等级设置血量和蓝量(下)

上一篇&#xff0c;我们实现了玩家角色和敌人的等级的获取&#xff0c;使用MMC的提前工作已经准备完成&#xff0c;那么&#xff0c;这一篇讲一下&#xff0c;如何使用MMC&#xff0c;通过角色等级和体力值设置角色的最大血量。 MMC 全称 Mod Magnitude Calculation&#xff0c…

基于springboot的同城宠物帮养照看平台

技术&#xff1a;springbootmysqlvue 一、背景 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统同城上门喂遛宠物…

Java学习六—面向对象

一、关于面向对象 1.1简介 Java 是一种面向对象编程语言&#xff0c;其核心思想是面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;。 面向对象编程是一种程序设计范式&#xff0c;它将数据与操作数据的方法&#xff08;函数&#xff09;捆…

软件工程-第三版王立福-第1章 绪论

本书结合IEEE最新发布的软件工程体系SWEBOK&#xff0c;和IEEE/ACM软件工程学科小组公布的软件工程教育知识体系SEEK&#xff0c;北大本科生指定教材。注重基础知识的系统性&#xff0c;选材的先进性及知识的应用。2009年出版 软件开发本质的认识&#xff0c;两大技术问题&…